最近,在搜检垃圾信息时,我偶然看到了这样一个很普通的邮件。它使用了一个很简单的编造八卦的伎俩,推测奥巴马的性取向,并提供了一个指向一个证明图片的链接。
这条垃圾信息没有什么特别的,但链接指向的这个具有双重后缀的,叫做“you.jpg.exe”的文件却有点研究价值。出于好奇,我把这个文件下载下来,检查它会干些什么事。
我首先做的是看看这个文件真正的文件类型。很显然,它不是一个关于奥巴马的图片,而是一个可以自解压的RAR文件。
通过RAR提取工具,我打开了这个自解压文件,看到了里面的内容。
解压了“you.jpg.exe”,检查里面的每一个文件,但发现它们都是经过加密的。于是,我在测试机上直接运行了“you.jpg.exe”,看看会有什么事情发生。双击它后,下面的这个图片跳了出来。嘿嘿,果然不是奥巴马。
在后台,下列文件被自动安装到了Windows System32目录下:
- bpk.dat
- bpk.exe
- bpkhk.dll
- bpkr.exe
- inst.dat
- pk.bin
而且,在注册表里创建了一个自动运行的autorun命令:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run bpk = <%windir%\System32\bpk.exe>
我在谷歌上搜索这些文件名称,找到了一些有用的信息,测试机上被安装的这些文件是一种键盘监控程序,特别之处是,这是一款商业版的软件,来自 Blazing Tools公司,叫做Perfect Keylogger (PK)。这款键盘监控软件可以通过正常的渠道购买和合法的使用,公开宣传功用是监控孩子或员工的上网行为,等等。你可以想象,它同样可以拿来做坏事。
我的分析到这儿差不多准备结束了。但几分钟后,有趣的事情出现了。监控软件连接上了一个远程的FTP服务器,这样我就有了机会捕获这个入侵者的FTP帐户信息了。
通过拦截到的用户名和密码,我登入了这个FTP服务器,发现了大量的存放有监控日志和受害人桌面屏幕截屏的文件夹。从这些数目众多的日志就可以看出,这个垃圾信息制造者的一条八卦信息的伎俩是多么的有效。
下面是这个FTP服务器的注册信息:
我还不想就这么结束,我对这个监控软件的安装程序做了更进一步的研究,我希望能找到这个窃听事件的幕后人物。
从这个软件的网上帮助页面上的信息中得知,这个程序有一个快捷键能把隐藏着的管理员控制界面或系统托盘图标调出来。缺省的快捷键是组合的 CTRL+ALT+L,但我试了一下,不好使。于是我使用暴力方式尝试各种键组合,终于让我找到了正确的按键。但令人沮丧的是,出现的是下面的窗口:
在打算反编译这款软件、破解它的密码前,我在网上搜索了一下,发现了一些提示。我找到了Chris Pogue的个人博客, 他很巧是在Trustwave SpiderLabs的一位同事,之前也碰到过这种软件。在他的博客里,他指出密码和一些其它配置属性都存放在一个叫做PK.BIN的加密文件里,监视数 据存放在一个叫BPK.DAT的加密文件里。他还说,这些文件可以通过简单的对字节进行和0xAA的XOR运算破解。
我猜测Chris分析的是一个老版本的,因为对0xAA进行XOR并不能解码配置文件。然而,从转换的BPK.DAT文件里可以看出,这种XOR操作还是部分的有效的,为了让转码的效果更好看,我使用了双字节0xAA, 0×00进行XOR操作:
我更感兴趣的是PK.BIN这个文件,因为里面存放着这款软件的详细配置信息,其中可能包含这个软件入侵者的信息。可这需要更多的工作,因为很显然,简单的与0xAA进行XOR操作是不能解码的。所有我猜测很可能需要另外一个不一样的XOR值。
以文本模式查看这个文件是下面这个样子,注意看那些很多重复的片段!
在十六进制模式中,我取出这些重复出现的字符,把它们进行XOR运算:
通过一些python脚本,使我破译了这个文件:
if len(sys.argv) > 1: pkhandle = open(sys.argv[1],'rb') pkbuffer = pkhandle.read() pkhandle.close() key=[0x0D,0x0A,0x08,0x05,0x01,0x02,0x06,0x03,0x03,0x0E,0x01,0x08,0x03,0x0C,0x09,0x07,0x05,0x0D,0x0C,0x0B,0x03] dec = '' ctr = 0 for i in range(11,len(pkbuffer)): a= ord(pkbuffer[i]) b =key[ctr%len(key)] x = a^b dec = dec+(chr(x)) ctr+=1 dechandle = open('pk.dec','wb') dechandle.write(dec) dechandle.close()
瞧!(提示:我涂掉了一些细节,以保护FTP服务器上的受害人的信息不外泄)
解码后的PK.BIN文件向我展示了足够的信息让我能进入管理员控制面板,包括这款软件的管理员密码,FTP服务器密码,软件的购买许可证注册姓名和注册号。我输入管理员密码,很好用,里面我看到了入侵者要窃取哪些信息,以及更多的关于软件的配置信息。
在配置文件里,软件许可证的注册姓名是Charles Onuigbo。
现在,我不确定Charles Onuigbo就是这个入侵者,或真有其人。唯一值得一提的是,这是个在尼日利亚——垃圾邮件制造之国——一个非常常见的名称!
我用邮件向ISP举报了这个FTP站点,希望这个站点能够尽快的被关闭。
更新:
我收到了管理这台服务器的公司的一份邮件,里面写到:
"你好- 不知道我的同事是否就此事给你回复过。 我们已经禁止了你所说的这个帐号对这个服务器 的访问权限... "
我再次尝试登录这个FTP服务器,确认这个恶意的FTP帐号已经被封掉了。感谢Liquid Web公司的Alex Kwiecinski和你们团队行动的这么迅速。
[本文英文原文链接:Pwning a Spammer's Keylogger ]