WinLogon登录管理和GINA简介

WinLogon登录管理和GINA简介

 
WinLogon登录管理和GINA简介
Windows NT 和 Windows 2000 中的 Winlogon 进程负责管理登录相关的安全性工作,它负责处理用户的登录与注销、启动用户shell、输入口令、更改口令、锁定与解锁工作站等。 Winlogon 进程必须保证其与安全相关的操作对其他进程不可见,以免其他进程取得登录安全信息。

  系统初始化,启动用户程序之前,Winlogon进行特定工作已保证以上的要求。Winlogon进程将创建并打开一个窗口工作站Window Station)该工作站代表了物理屏幕、鼠标和键盘,然后在该工作站上创建三个桌面:Winlogon桌面、应用程序桌面、屏幕保护桌面
。Winlogon进程将设置只有本地系统可以完全控制这些对象,而交互登录的用户只能读该窗口工作站并完全控制应用程序工作站。Winlogon进程确保其他用户进程不能访问 Winlogon桌面的任何数据和代码;这样就保护了口令、锁定桌面等操作的安全。Winlogon进程还会注册安全注意序列( SAS - secure attention sequence)的热键,任何时候按下SAS热键(缺省为ctrl+alt+del),将调用Winlogon进程,切换到安全桌面,从而使一般的密码捕捉程序不能接收登录密码和更改密码等安全活动。

而登录的身份验证都是在GINA( GINA - Graphical Identification and Authentication,图形标识和身份验证)中实现的,微软的Windows NT/2000提供的GINA是MSGINA.dll,它实现了Windows NT/2000默认的登录界面。不过为了支持更多的交互登录验证方式,这个GINA DLL是可替换的,可以自己开发GINA DLL以实现其他的身份验证方法,如智能卡、指纹等其他验证机制,而且微软也提供了相关文档和例程。

当然这也为木马留下了机会,可以通过编写和系统GINA界面相同的GINA DLL,然后取代MSGINA.dll,同时进行密码记录。在MSDN 的例子里有一个GINA的例子。不过如果仅仅为了获取系统登录密码,就没有必要那么麻烦,只需编写一个接口和GINA一样的,然后所有函数在实现时都去调用MSGINA.dll的相同函数就可以了,不过这样就需要系统原来的msgina.dll,在MSDN 的例子里也有这样一个例子叫做ginastub,当然作为木马还要在登录时将密码转储(更多的gina信息,请在MSDN里查找gina)。就我所知在去年(2000年8月)就已经出现了名为FakeGina的这种木马,该木马只有一个DLL,它是ginastub类型的木马,因此需要系统原来的msgina.dll,系统才能支持启动,可以从 http://www.ntsecurity.nu/toolbox/fakegina/获得该木马的详细信息。

此外微软还在注册表里留了一个位置用于安装GINA,在HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon下设置GINADLL为某个GINA DLL(GINADLL这个键缺省没有),如果设置了这个值,Windows NT/2000就会调用该GINA DLL,而不会调用缺省的MSGINA.dll。FakeGina就是使用这种方式进行安装的。

由于GINA DLL负责系统认证和安全登录,因此如果一旦出错,用户将不能登录系统,必须慎用。如果采用FakeGina的安装方式,在卸载时不能只删除fakegina.dll,而不理会注册表,只删掉该木马将导致系统不能启动。必须删除注册表里GINADLL这个键值才行。

如果安装出错或者Gina/GinaStub程序有问题,用户将不能登录。在MSDN中Gina例子部分介绍了4种恢复Gina程序错误的方法,由于多数Gina木马都是使用GinaStub方式,因此我介绍一下错误使用GinaStub程序后的系统恢复。

首先介绍一下GinaStub方式的Gina DLL失败的几个可能性: 

1) 因为GinaStub方式的Gina DLL实际上没有完成真正的登录验证功能或者说没有全部完成这些功能,很多功能它都是调用系统原有的Gina DLL完成的,因此如果系统原来的Gina DLL丢失,那么系统自然不能启动。造成系统原有的Gina DLL丢失可能是因为安装者以为该Gina DLL是功能完整的Gina DLL,而把该DLL拷贝到系统目录并覆盖原来微软的MSGina.dll 。 

2)在注册表里设置GINADLL为某个GinaStub,该GinaStub也拷入系统了,但后来删除该GinaStub时只删除该文件,而忘了删除注册表里GINADLL一项,系统根本找不到所指定的Gina DLL 。 

3) GinaStub程序有Bug 

由于以上不同原因造成系统启动问题的,系统的现象也不同,不过都是在系统应该出现正常的登录对话框的时候出现: 

1) 这种情况下,有的Ginastub在初使化时会返回错误,通知Winlogon进程Gina DLL初使化失败,系统弹出对话框提示Gina DLL初使化失败。而有的Ginastub可能处理不周,使Winlogon进程非法操作,系统停止启动。如果删除了MsGina.dll,上边介绍的FakeGina就会出现后一种情况,这是由于该程序在调用原有的MsGina.dll时没有进行错误判断,直接认为调用成功,然后使用返回的句柄0x00000000造成的,可以参见下边该程序的这段反汇编后的代码。 

2) 这种情况下,在Win2000上指明需要某个Gina DLL,但是系统找不到,系统不能继续启动。而在Win NT上,系统没有任何提示,直接重启动。 

3) 根据bug不同,现象可能有所不同。 


Gina失败造成不能本机登录,不过仍然可以从网络上其它计算机访问该机的资源包括共享和注册表,因此采用网络方法是可以恢复这种故障的。 

1) 此时可以把其他系统上或者原来备份的Msgina.dll覆盖GinaStub方式的Gina DLL即可。如果有多个NT/2000系统,可以使用另一个系统进行启动进行;也可以从网络上连接到该计算机的系统盘进行;或者卸下该硬盘,安装到其他NT/2000的计算机上进行。 

2)用其他计算机连接到该机的注册表,把GinaDLL一项删除即可。或者也可以用前一种解决方法把系统原有的MsGina.dll拷贝成GinaDLL所指定的动态连接库。 

3) 根据以上两种安装方式,分别采用上边两种方法进行卸载。 

(不过当计算机启动后,使用网络共享访问计算机没有问题,不过使用注册表有一点儿问题,就是虽然可以连接上,但是不能打开各项。而且Win NT4在没有相应的Gina DLL会自动重启动,就不好用网络的方法恢复了。)

你可能感兴趣的:(WinLogon登录管理和GINA简介)