一、事件经过 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