导语:研究人员发现一起利用Office CVE-2017-0199(WORD/RTF嵌入OLE调用远程文件执行漏洞)和CVE-2017-11882(Office远程代码执行漏洞)漏洞在受害者机器上释放和执行后门二进制文件的攻击活动。
攻击活动详情
2017年9月,FireEye的研究人员发现针对乌克兰的工具活动中使用FELIXROOT后门作为payload,该攻击活动中包括恶意的乌克兰银行文档,该文档中含有可以下载FELIXROOT的宏文件。近期,研究人员发现该后门被用于一起新的攻击活动中。这次,声称含有研讨会信息的武器化的诱饵文档利用了Office CVE-2017-0199(WORD/RTF嵌入OLE调用远程文件执行漏洞)和CVE-2017-11882(Office远程代码执行漏洞)两个漏洞在受害者机器上释放和执行后门二进制文件。
图1: 攻击概览
恶意软件通过用Office漏洞武器化的恶意文档进行传播,如图2所示。恶意文档名称是“Seminar.rtf”,攻击者利用CVE-2017-0199漏洞从193.23.181.151下载第二阶段payload;下载的文件通过CVE-2017-11882漏洞武器化。
图2: 诱饵文件
图3: Seminar.rtf中嵌入的URL的十六进制形式
图4是尝试下载二阶段Seminar.rtf的一阶段payload。
图4: 下载二阶段Seminar.rtf
下载的Seminar.rtf文件含有嵌入的二进制文件,嵌入文件是通过公式编辑器释放到%temp%文件夹中的。该文件会在%temp%目录释放可执行文件(MD5: 78734CD268E5C9AB4184E1BBE21A6EB9),可执行文件是用来执行FELIXROOT释放器组件(MD5: 92F63B1227A6B37335495F9BCB939EA2)的。
释放的可执行文件(MD5: 78734CD268E5C9AB4184E1BBE21A6EB9)在PE二进制覆盖区含有压缩的FELIXROOT释放器组建。一旦执行,就会创建两个文件,分别是指向%system32%\rundll32.exe的LNK文件和FELIXROOT加载器组件。然后,LNK文件会被移动到开始目录。图5是LNK文件中用于执行FELIXROOT加载器组件的LNK文件。
图5: LNK文件中的命令
嵌入的后门组件会用定制的加密方法加密,加密文件的解密和加载是在内存中进行的,不会在硬盘上留下痕迹。
技术细节
在成功利用漏洞之后,释放器组件会执行并释放加载器模块。加载器模块是通过RUNDLL32.EXE执行的。然后后门组件会在内存中加载,并有一个输出函数。
后门中的字符串是通过与4字节的key进行XOR运算进行加密的。对ASCII码字符串的解密逻辑如图6所示。
图6: ASCII解密路径
对Unicode字符串的解密逻辑如图7所示。
图7: Unicode解密路径
执行后,会创建一个线程,而后门本身会休眠10分钟。然后检查后门有没有通过RUNDLL32.exe和参数#1加载。如果恶意软件通过RUNDLL32.exe和参数#1加载,然后在与C2通信前进行初步系统分类。初步系统分类从通过ROOT\CIMV2命名空间连接Windows Management Instrumentation (WMI)开始。
图8: 后门组件的初始执行过程
表1“ROOT\CIMV2”和“Root\SecurityCenter2”命名空间引用的类。
表1: 引用的类
使用的WMI查询和注册表
1.SELECT Caption FROM Win32_TimeZone
2.SELECT CSNAME, Caption, CSDVersion, Locale, RegisteredUser FROM Win32_OperatingSystem
3.SELECT Manufacturer, Model, SystemType, DomainRole, Domain, UserName FROM Win32_ComputerSystem
注册表是从潜在的管理提权和代理信息中读取的。
1.查询注册表 “SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System ”是为了检查ConsentPromptBehaviorAdmin和PromptOnSecureDesktop的值。
2.查询注册表“Software\Microsoft\Windows\CurrentVersion\Internet Settings\” 是为了收集含有ProxyEnable, Proxy: (NO), Proxy, ProxyServer值的代理信息。
表2是FELIXROOT后门的一些功能,每个命令都是以单独线程执行的。
表2: FELIXROOT后门命令
图9: 命令执行后的日志
网络连接
FELIXROOT通过HTTP和HTTPS POST协议与C2进行通信。网络上发送的数据会通过特殊的结构进行排列和加密。所有的数据都通过AES进行加密,然后进行Base 64编码,再发送给C2服务器。
图10:发送给C2服务器的POST请求
其他包括User-Agents, Content-Type, Accept-Encoding在内的其他request/response header域都进行XOR加密了。恶意软件会查询Windows API来获取计算机名、用户名、硬盘序列号、Windows版本、处理器架构和两个其它值,这两个值是1.3和KdfrJKN。KdfrJKN应该是用来识别该攻击活动,可以在文件的JSON对象中看到,如图11。
图11: 通信中的主机信息
FELIXROOT后门再进行C2通信时有三个参数,每个参数都提供目标机器上任务的信息。
表3: FELIXROOT后门的参数
加密方法
所有传输给C2服务器的数据都使用AES加密,传输给lbindCtx COM接口的数据使用HTTP或HTTPS协议。每个通信使用不同的AES key,并使用两个RSA公钥之一进行加密。
图12: RSA公钥1
图13: RSA公钥2
图14: AES加密参数
加密后,发送给C2的明文通过Base 64编码。图15是发送给服务器的数据结构,图16是用于C2通信的数据结构化表示。
图15: 用于发送数据给服务器的结构
图16: 用于发送数据给C2服务器的结构
该结构是用CryptBinaryToStringA函数转变为base 64编码的。
FELIXROOT后门对特定的任务含有很多命令。每个任务执行后,恶意软件在执行下一个任务时会休眠1分钟。一旦所有任务都执行完成,恶意软件就会打破循环,发回termination buffer(中止缓存),清除目标系统上的痕迹:
1.从开始目录删除LNK文件;
2.删除注册表HKCU\Software\Classes\Applications\rundll32.exe\shell\open
3.删除系统中的释放组件。