“幽灵电子书”病毒详细分析
2016-03-03
2016年2月26日,一个网络安全相关的QQ群内,一名用户分享了一份名为“网络安全宝典.chm”的电子书供大家下载,瑞星网络安全工程师Bfish自然地下载了这本电子书,打算简单翻阅后决定是否收藏。
一、事件经过
2016年2月26日,一个网络安全相关的QQ群内,一名用户分享了一份名为“网络安全宝典.chm”的电子书供大家下载,瑞星网络安全工程师Bfish自然地下载了这本电子书,打算简单翻阅后决定是否收藏。当Bfish打开这个才12K大小的电子书时,感知到了计算机的异常行为,这让他意识到:这本电子书有问题。
在解开这份CHM文档后,瑞星网络安全工程师在一个html页面中找到了原因:这个电子书中的某个HTML页面内,嵌入了一段恶意代码,它可以下载一个PowerShell脚本并执行。顺藤摸瓜,Bfish最终确认了这是一个针对特定人群,以盗取用户帐号密码、文档资料为目的恶意攻击事件。这段CHM恶意代码如同幽灵一样被执行并作恶,故将此称之为幽灵电子书(ChmGhost)。
二、主要危害
通过电子书散播,攻击受众有很强的群体性,对特定人群发起攻击简直易如反掌,而且电子书“诱饵”更容易迷惑大众。
目前看到的攻击代码,主要的危害为窃取用户隐私:Windows账户信息和密码、各类应用程序的密码、计算机基本信息、屏幕截图、网络配置和Wi-Fi信息、各类文档,造成用户敏感信息和资料泄漏。这些资料的泄漏伴随着商业机密泄漏的风险,后续或造成更大的损失。
另外,攻击时所用的恶意代码,无论是二进制还是脚本,几乎都来自网络下载,攻击可以随时开启和关闭,攻击手法、攻击目的也都可以变化,这个“后门”的潜在危害也相当之大。
2月26日发现的CHM的标题是网络安全相关的,并且在网络安全相关的QQ群内散播,表明攻击者的目标是网络安全从业和对网络安全感兴趣的、有一定计算机安全基础的群体,但就算如此,仅一天时间就已经有多名受害者,如果攻击者转到其他领域,受众群体应该会更没有感知能力,危害也将更大。
三、攻击实施纵览
四、详细技术分析
首先,CHM中使用了一种古老的方法 — 利用Internet.HHCtrl对象来运行任意命令行。doc1.html中定义了一个Internet.HHCtrl对象,再通过后续脚本触发其Click事件,调用Internet.HHCtrl.Item2定义的命令行。
完整命令行如下:
命令行以隐藏方式启动PowerShell,并执行下载攻击者托管于Github上的攻击脚本——start.ps1。
start.ps1首先向106.80.36.165发起一个HTTP请求,下载的内容为一段PowerShell脚本字符串,通过Invoke-Expression直接调用,脚本内容如下:
根据脚本中指明的方法,对其中的BASE64编码串进行解码、解压缩,又获得一段PowerShell脚本,内容如下:
按照脚本中指明的方法对BASE64串解码,获得一段二进制数据,为32位x86指令的shellcode。脚本在解码这段shellcode后,将其拷贝到通过VirtualAlloc分配的一块RWX(Protect为0x40)的内存中,并通过CreateThread创建一个线程来执行,如下:
这段shellcode并没有经过任何加密处理,功能也非常简单:连接到指定的IP地址,获取一段新的shellcode,再次执行。虽然简单,但是这中动态执行来自网络代码的功能,危害却是相当之大,因为攻击者随时可以下发新的代码,完成新的攻击,并且没有痕迹可循。
主流程如下表所示:
接下来是 Mimikatz 2.0的实现部分,这部分代码占据了整个start.ps1文件的绝大多数内容。Mimikatz是一个抓取本机登录账户密码的神器,更多信息可以从项目主页https://github.com/gentilkiwi/mimikatz了解。
接着便是调用 Mimikatz 的 Dumpcreds 来获取当前登陆用户的密码,如图所示:
完成后生成的DumpPass.txt中的内容如下,截图来自真实受害者的数据:
接着,收集当前用户桌面上的几类文档,根据扩展名判断,扩展名分别为:txt,doc,docx,xls,xlsx,早期版本中还有sql。非常明显,攻击者收集目标是重要的文档资料,这对受害者可能造成很大的损失。从2月26号抓取的上报邮箱中的资料来看,扩展名还不限于此(攻击者持续更新代码中)。
接着,下载并执行一个名为GetPass.ps1的PS脚本,如下图所示:
顾名思义,该脚本的目的,依然是收集密码。脚本执行后,下载两个文件,分别为Get.exe和Command.bat,然后执行Command.bat调用Get.exe,将获取的密码保存到用户目录下的D:\GetPass.txt中。
其中,Get.exe为跨平台密码检索利器 —— LaZagne,可以去项目主页https://github.com/AlessandroZ/LaZagne 获取更多信息。LaZagne支持Windows和Linux平台下多种类型软件保存的密码获取,功能可谓相当之强大,具体支持列表如下:
Command.bat则是多次启动Get.exe获取密码,并将结果保存至GetPass.txt,代码如下:
可以看出,攻击者意图收集包括数据库、浏览器、电子邮件、源代码管理、WI-FI等在内的5大类账户密码。下图为来自真实受害者的GetPass.txt文件,其中包含了Chrome浏览器保存密码的站点和相应用户名、密码,第一条便是淘宝的用户名和密码,由此可以看出,后果是相当严重的。
接下来,GetPass.ps1将GetPass.txt作为电子邮件附件,采用STMP协议发送至电子邮箱 xxxxxxxxxx@email.ctbu.edu.cn。该收件箱为某高校校园邮箱,登陆后跳转至QQ企业邮箱。
最后,GetPass.ps1清理痕迹,至此执行完毕。
start.ps1继续收集受害者计算机的各类基本信息。主要手法为通过调用WMI对象对系统的基本信息,硬件信息、用户信息、已安装的程序、用户文档以及网络信息进行收集,并将这些信息保存到一个名为ComputerInfo.html的 HTML文件中,代码如下:
以下为一份来自真实受害者的ComputerInfo.html内容截图:
在信息收集完毕后,该脚本会对当前计算机现实屏幕进行截屏。
从真实受害者上报的数据来看,该功能是无效的,因为截屏的图片全部为黑色。
然后再将之前产生的DumpPass.txt,收集的用户桌面上的文档文件、产生的计算机信息文件、屏幕截图等,打包成名为Report.zip的压缩包,并通过电子邮件发送至指定的邮箱。
使用代码中留下的账号和密码登录邮箱后,我们发现有一定数量的受害者发送的邮件(登录于2016/2/27,15:29),邮箱内的邮件一段时间之后会被删除,27号登录时,26号晚的邮件已经被彻底删除。
打开邮件并下载附件Report.zip,解压后可以看到以下文件和目录,这些文件和之前描述的脚本行为相吻合,例如,打开Doc目录后,可以看到收集自受害者桌面的几类文档,在25号抓取的多封邮件中,还不乏各类工作报告,甚至个人工资单。
最后,start.ps1清理痕迹,主要功能执行完毕。
通过分析可知,整个攻击中的核心功能,均为开源项目。攻击者编写了简单的整合脚本,将这些开源软件整合在一起,在云端部署了这些攻击代码,最终构建了这个攻击方案。
五、写在最后
首先希望攻击者尽快停止此次攻击,停止在社交圈内散播携带攻击代码的电子书,在云端移除相关的恶意软件,避免造成更大的危害。
攻击者选择了特定兴趣/行业的社交圈和相关主题的电子书进行搭配,这无疑是一个非常具有诱骗性的“钓鱼”手段,被攻击人群很容易被感染。分析此次事件时,攻击人群定位于网络安全从业人士,虽然有一定的网络安全基础,但仍然有一定被感染数量。如果换成其他行业,情况可能会更加糟糕。
另外,这次攻击事件中使用的恶意代码,全部来自于网络安全社区,制作成本非常低。整体方案和恶意代码实现,均来自于白帽子HackPanda公开的一篇《BadUsb——结合实例谈此类外设的风险》的文章中,可见安全社区为“脚本小子”们提供了大量的素材,大大降低了实施此类攻击的门槛。
再者,攻击者不仅收集了用户的账户和密码,还收集了大量的文档资料,这造成的危害,已经不是单纯的个人隐私数据的泄漏了,更可能涉及到受害者所在公司的商业信息的泄漏。
最后,对于潜在的受害者,还是希望能安装必要的安全防护软件,建立良好的信息安全意识。在全面信息化的今天,信息安全知识应当如同养生一般,多多少少都懂点才好。
作者:Bfish、Chris
[责任编辑:瑞瑞]