多米诺行动(Operation Domino)-疑似CVE-2020-0968 jscript远程代码执行漏洞首次被发现在野利用
事件背景
在动荡局势之下,网络暗战从未缺席。在9月初,威胁情报中心猎影实验室捕获到了一个来自白俄罗斯的rtf样本,其被命名为“СВЕДЕНИЯ О ПОДСУДИМОМ.rtf”(大致意思为“被告人的相关信息”),伪装文件内容为刑事案件登记卡,内容中可以看出与最高法院司法部门的相关信息,文档里面的语言属于俄语,这份模板可以在俄罗斯的一个教育的网站上下载到。
显然攻击者利用了“白俄罗斯总统大选结束后,爆发大规模抗议游行,大量游行者被捕事件”发起的网络攻击。
攻击者使用了之前从未公开漏洞利用代码的JS引擎解析漏洞CVE-2020-0968进行的攻击,该漏洞曾被微软认定为未被利用。未知1day的利用,说明这次的攻击者具备非常高的技术实力或经济实力(花钱购买漏洞),其利用的木马使用一个命名为 “Domino”函数的特殊性,所以我们将此次活动命名为多米诺行动(Operation Domino)。
攻击概述
该文档利用未公开利用代码的CVE-2020-0968漏洞,实现加载远程恶意木马,其攻击手法专业,下载的木马具备合法数字签名,其除了传统的木马功能,还会修复存在漏洞利用的文档,一看就是专业团队。
武器详细分析
样本以内嵌URL Moniker 的rtf文档为载体,远程加载了位于http://94.156.174[.]7/up/a1a.htm 的网页文件,
远程加载的网页文件内嵌一个之首次被观察到在野利用的jscript漏洞,
猎影实验室对该漏洞进行了分析,发现这是一个IE浏览器jscript.dll模块中的UAF漏洞。jscript在处理两个对象(type=0x81)的相加操作时,CScriptRuntime::Run会连续两次调用VAR::GetValue获取对应的值,开发者没有将期间保存到栈上的variant变量加入GC追踪列表。如果对象实现了自定义toString方法,VAR::GetValue内部会进一步调用NameTbl::InvokeInternal函数,这个函数可以调用自定义的toString,在第二个VAR::GetValue导致的回调中,可以手动释放相关variant变量,回调函数返回时,CScriptRuntime::Run会再次使用被释放的variant变量,造成UAF。
通过补丁分析,可以确认该漏洞出现在双星漏洞(CVE-2020-0674)之后,且在2020年4月的补丁中被修复。值得注意的是,2020年4月微软确实修复了一个等级为“Critical”的IE漏洞,并在初始发布时将其标注为“Exploited: Yes”,但随后微软将其修改为“Exploited: No”,这件事当时还引起了安全研究人员的讨论:
结合修复时间和上述信息,我们合理推断本次攻击使用的漏洞为CVE-2020-0968 Jscript远程代码执行漏洞。此次攻击中的漏洞利用采用和之前出现过的Jscript UAF漏洞相同的利用方式,先借助漏洞泄露一个RegExp对象的地址,紧接着利用RegExp对象伪造一个超长BSTR,借助此BSTR数组实现越界读,在此基础上伪造一个假的RegExpObj对象,最终借助正则引擎实现任意地址读写,实现ShellCode执行。
ShellCode执行成功后,会从远程地址http://94.156.174[.]7/up/a1a.dll下载附加模块,并解密执行,解密方法为简单的异或,key为“weHnh”。解密得到dll文件中含有一个名为“Domino”的导出函数,经判断为主要功能函数。
Dll样本会找到自身rtf/doc文档,并找到“{\object\\objemb ……}”所在内容并进行删除,而这部分内容正是内嵌的URL Moniker数据。
删除URL Moniker后,dll会再次打开文档。此时原始文档已被修改为干净的文档。
随后,Dll会执行一个内嵌的EXE程序,
该EXE后门使用了打印机图标进行伪装,伪装为Microsoft Windows Fax and Scan程序,其包含有效的数字证书,签名人信息为“Sizg Solutions GmbH”。该EXE程序被VMP加壳,输入表被加密
该后门启动后会创建了一个窗口标题为“8Wsa1xVPfvJcrgRY”,类名为“frAQBc”的窗口。
接着进入消息循环机制,大部分恶意功能都是在窗口处理函数WindowProc里面实现,当窗口收到窗口创建消息WM_CREATE时,后门发送自定义消息触发其他关键恶意流程
大部分的消息码对应的函数功能统计如下表:
消息码 | 消息函数的功能 |
WM_CLOSE | 后门收到退出消息时,写入启动注册表 CurrentVersion\Explorer\StartupApproved\StartupFolder,针对win10系统,该路径只有win10才有。 |
WM_CREATE | 发送自定义消息码0x40a,0x401 |
自定义码0x400 | 回连服务器185.243.112[.]57,后门核心功能 |
自定义码0x401 | “增肥”拷贝自身到%appdata%\Local\WFS\WFS.exe,设置自启动计划任务。
增肥后的文件大小6MB左右,每次HASH都不一样,且其数字签名依然有效 |
自定义码0x402 | 弹一个alert框。用于测试? |
自定义码0x403 | 休眠sleep |
自定义码0x404 | 默认DefWindowProcW处理流程 |
自定义码0x405 | 和WM_CLOSE功能类似,写入启动注册表 |
自定义码0x464 | 线程同步、发送自定义消息 |
动态获取API地址后,通过wmi命令获取各类操作系统、硬件、用户信息等信息
大量不同密钥通过异或算法解密出HTTP通讯需要HTTP头信息,用于构造Post请求的数据包
通讯数据被AES加密,后门内置3组密钥,在不同功能模块使用不同密钥处理数据
由于后门被VMP保护以及内部混淆较严重,对分析造成了很大干扰,目前的分析发现的主要功能包括:
- 加密上传收集的用户信息
- 截图获取用户桌面以及更新自身
关联猜想
本次攻击中用到了一个之前未出现在公众视野的JScript漏洞,从漏洞利用手法来看,之前只有DarkHotel拥有此类原创的JScript新漏洞利用。不过,在对后续载荷进行分析的过程中,我们并未发现有DarkHotel的明显特征。考虑到此次漏洞使用时是一个1Day,不排除其他组织从相关渠道获取了这个漏洞利用并进行攻击。
总结
网络暗战在政治军事博弈中起到了关键性作用,在政治军事情报体系运营过程中,从收集信息到网络空间基础设施打击都能够起到意想不到的作用。正如此次活动中使用的dll的功能函数“Domino”(多米诺),推动第一步后,多米诺所带来的连锁反应导致一系列的引导式的变化。这里再畅想一点,上个世纪50年代,由美国总统艾森豪威尔首先提出的多米诺理论,是对当时针对东南亚形式的非常重要的一条理论,东南亚地区一个国家的政治倾向只要出现第一例,那么这个地区的其他国家就会像多米诺骨牌一样,一个接一个的倾向于一个方向。其用在当前局势下,也十分应景。
此次为首次发现在野利用的疑似CVE-2020-0968漏洞,说明攻击组织有一定的实力。针对“Domino”函数的特殊性,我们将此次活动命名为多米诺行动(Operation Domino)。
IOC
60981545a5007e5c28c8275d5f51d8f0
7fce761a343ceb15126e7d8f6314c4ed
67b5d793cf4b0a1ddecf756c42af47c8
ba1fa3cc9c79b550c2e09e8a6830e318
f927659fc6f97b3f6be2648aed4064e1
94.156.174[.]7
185.243.112[.]57