写在前面的话
攻击者一直都会不断地寻找在Windows系统上执行任意文件的新方法,其中一种技术就涉及到AutoIT或AutoHotKey的使用,而这种简单的工具允许用户向Windows系统中写入各种类型的小型GUI程序以及键盘自动化任务。比如说,AutoHotKey(AHK)允许用户通过写入脚本代码来与Windows交互,从Windows中读取文本信息以及向其他应用程序发送键盘击键数据等任务。AHK还允许用户使用自己的代码创建可编译的exe文件。
如果你是一名攻击者,而你正好又想开发一款简单且高效的凭证窃取工具的话,那么AHK绝对会是一个很好的“帮手”。没错,我们的确发现了一款使用AHK开发的专门用来窃取用户凭证信息的恶意软件,这款恶意软件可以伪装成卡巴斯基反病毒软件,并通过受感染的USB设备来进行恶意软件传播。我们将其命名为Fauxpersky,接下来在这篇文章中我们将对这个恶意软件进行分析。
Fauxpersky分析
我们在受感染的客户设备上发现了四个感染文件,其中每一个文件的文件名都跟Windows系统中的合法文件名类似:
Explorers.exe
Spoolsvc.exe
Svhost.exe
Taskhosts.exe
下图显示的是客户环境中的可疑文件:
EXPLORERS.EXE:自我复制和持久化感染
这个AHK键盘记录工具使用了一种比较直接的方法来实现自我复制和传播。初始化执行完成之后,键盘记录工具会收集目标系统中的驱动器信息,然后开始向这些驱动器进行自我复制,下面给出的是大致的感染过程。
收集可移动驱动器:
重命名可移动驱动器:
向可移动驱动器中复制文件:
这样一来,键盘记录工具就可以从一台主机设备中传播到其他连接到该主机的外部驱动器中了。如果键盘记录工具成功感染了一台外部驱动器,那么它将会按照自己的命名机制来对受感染驱动器进行重命名。
比如说,如果目标设备挂载了一个名叫”Pendrive”的8GB USB驱动器,并执行了键盘记录工具,那么恶意软件会将这个USB驱动器的名字改为”Pendrive 8GB (Secured by Kaspersky Internet Security 2017)”,而这也是其中一个可以直接识别的入侵威胁指标IoC。
这款恶意软件还会创建一个指向batch脚本的autorun.inf文件,脚本内容如下:
start /d ".System Volume InformationKaspersky Internet Security 2017" taskhosts.exe
分析恶意软件在EXPLORERS.EXE中实现的持久化感染方法
explorers.exe中有一个名叫CheckRPath()的函数,如果目标文件不存在于当前驱动器中,键盘记录工具将使用这个函数来创建恶意文件。你可以从上图中看到,代码会根据传递进来的路径参数来创建文件,并使用AHK的FileSetAttrib()函数来设置文件属性“SH”(表示系统System和隐藏属性Hidden)。键盘记录工具还会使用相同的方法来创建所需的文件夹,比如说使用参数“RSH”、“Read-Only”、“System”或“Hidden“等等。
文件创建成功之后,它将会迭代查询所有需要的组件,并将它们发送到目标磁盘中。相关代码如下所示:
在开始创建组件文件(HideRFiles())时,代码会入一个循环。这种循环可以帮助键盘记录工具以一种结构化的方式对它所要写入到目标磁盘中的文件进行迭代查询。我们可以看到,一开始它会向每一个磁盘写入快捷方式链接(.lnk)、文本和batch文件。接下来,传递给函数的值将会自增,并在文件全部写入完毕之后移动到一个完整的文件夹之中,这样可以确保所有的文件都可以一次性被移动到正确的目的路径中。
最终,所有的文件(之前所介绍的四份可疑文件)都将会保存在一个名叫“Kaspersky Internet Security 2017 “的目录中。除了可执行文件之外,还有两个是非可执行文件。其中一个文件名叫”Logo.png“,如下图所示:
另一个文件名叫“Readme.txt”,其中包含下列内容:
If you are unable to launch files/folders correctly, please disable your antivirus program.
Source: https://www.bleepingcomputer.com/forums/t/114351/how-to-temporarily-disable-your-anti-virus-firewall-and-anti-malware-programs/
当受感染系统启动之后,Logo.png会显示在屏幕上,以此来欺骗用户让他们以为自己安装并运行了卡巴斯基的反病毒产品。
使用IDA Pro进行深入分析之后,我们发现这些文件其实是64位Windows PE文件,它们几乎是一模一样的。
我们可以看到,代码所创建的mutex名叫“AHK Keybd“。根据Google的搜索资料我们可以了解到,这是一个标准的AHK可执行程序,实际的AHK语言代码存在于每个PE文件的resource区域中(RCDATA)。
为了从exe文件中提取出AHK代码,Amit开发了一个名叫ahk-dumper的小型工具,它可以对PE文件中的RCDATA资源进行迭代搜索,并打印出相应的内容。
既然我们现在已经可以从每一个PE文件中提取出代码了,我们就可以弄清楚这些PE文件的功能了。
文件名:explorers.exe
功能:USB驱动器传播&感染
文件名:svhost.exe
功能:键盘记录、向文件(Log.txt)写入键盘记录数据
文件名:taskhost.exe
功能:持久化感染(?)
文件名:spoolsvc.exe
功能:数据提取
分析AHK代码
SVHOST.EXE-键盘记录
Svhost.exe可以通过AHK函数WinGetActiveTitle()监控捕捉到焦点的活动窗口,然后调用AHK函数input()来监控用户在该窗口中的输入。所有的键盘记录数据会保存在一个名叫“Log.txt“的文件中,该文件的存储路径为“%APPDATA%Kaspersky Internet Security 2017”。键盘记录数据样本如下图所示:
TASKHOST.EXE-持久化感染
这个部分的代码负责实现持久化感染,第一步就是将恶意软件的CWD修改为%APPDATA%,然后创建目录“Kaspersky Internet Security 2017”。
这个文件其实还有另一个执行路径:
为了防止文件拷贝失败,恶意软件还会使用FileCopy()函数来再次向目标路径拷贝文件,并使用FileSetAttrib()函数来设置文件属性。
SPOOLSVC.EXE-数据提取
Spoolsvc首先会修改注册表键,并禁止系统显示隐藏文件:
大家可以从上述代码中看到,恶意软件会编辑HKLMSoftwareMicrosoftWindowsCurrentVersionExplorerAdvanced中的两个键,即把“Hidden“设置为2(禁止显示隐藏文件),把”ShowSuperHidden“设置为0(隐藏系统文件)。
修改完成之后,恶意软件会检测explorers.exe是否处于运行状态。它的作用其实是一个watchdog,主要用来保证恶意软件的持久化感染&执行。
为了实现持久化感染,恶意软件还会在启动菜单中的startup目录下创建一个快捷方式:
需要注意的是,这个文件还可以将Log.txt文件中的键盘记录数据提取到Google表单中,而这绝对是一种非常聪明的数据提取方法。
下图显示的是整个攻击流程:
这也就意味着,攻击者不需要再去利用各种命令以及控制服务器来传递数据,而且对于很多流量监控机制来说,这些也不会被当作可疑流量。下图显示的是用于数据提取的Google表单:
下面的代码负责将数据提交至Google表单,该文件会将键盘记录数据读入到缓冲区中,然后把原始记录文件删除,最后再将缓冲区中的数据发送给Google表单:
总结
这款恶意软件其实并不算多么先进,而且隐蔽性也不够高,它的开发者甚至都没有认真去对一些细节进行修改,比如说绑定在恶意文件中的AHK图标等等。但是,这款恶意软件感染USB驱动器的效率非常高,而且还可以利用键盘记录工具从Google表单中提取数据,并将其发送至攻击者邮箱之中。目前我们还不清楚受感染用户的具体数量,感兴趣的同学可以持续关注《安全客》的最新报道。
缓解方案
我们已经将受影响的Google表单相关信息上报给了Google,Google的安全团队也在不到一个小时的时间里解决了表单的安全问题。如果你发现自己感染了这款恶意软件,你可以进入到系统的%appdata%Roaming目录中,并删除Kaspersky Internet Security 2017目录,此时相关文件应该已经成功从启动菜单的startup文件夹中删除了。
已知病毒哈希
5b983981d565e0606c12b2e94231ac4226fd3b36dcd0ed40dee69d85d2c43b03
6fa2437f224d22127efc81da99f178c6c83408bc6316acae892d76f64879bbb1
3b88c248c18f6180a707cd4b8b5ad33a3482f1cc0405f9d2ff7b976de90c9889
d0dd1ac2b543f408382c138fe27e6192f2f5265426fb3260b16e2273c7fe0dbd
b93bb18f600a637d4d7ffe493e693335065418ea5b07f21dfe4faa78d1bbb418
3872d58bf4aa14680b9f58bfd1efae14fc31fa6605a9ae5ef85a3755309a4173
2acb8d091c2b362bab4f8167378b32c8e05db9b6ba0198fa7fe9abf31d2be16a