关于伏影实验室
伏影实验室专注于安全威胁研究与监测技术,包括但不限于威胁识别技术,威胁跟踪技术,威胁捕获技术,威胁主体识别技术。研究目标包括:僵尸网络威胁,DDOS对抗,WEB对抗,流行服务系统脆弱利用威胁、身份认证威胁,数字资产威胁,黑色产业威胁 及 新兴威胁。通过掌控现网威胁来识别风险,缓解威胁伤害,为威胁对抗提供决策支撑。
历久弥新的RAT载荷
作为高技术力的APT组织之一,FIN7开发或改进了多种远控木马(RAT)程序用来控制目标系统。在不同时间节点,FIN7先后使用了CARBANAK、TINIMET、DRIFTPIN等可执行文件格式木马,这些木马具有高度对抗性,并使用加密通信连接C&C服务器。
FIN7组织传统载荷分析
CARBANAK
木马简述
CARBANAK是FIN7使用的带有大量模块的全功能后门木马,最早由卡巴斯基披露。
CARBANAK又名Anunak,早期是一个主要针对银行的威胁组织,因其开发的恶意软件功能强大而被FIN7屡加修改并利用,故而后期当CARBANAK被提起,往往被当作FIN7的代名词。在FIN7的活动历程中,CARBANAK作为核心工具一直发挥着重要作用。在FIN7入侵的后期,CARBANAK能够进一步巩固了其在网络中的立足点,该组织经常使用video命令监视用户并了解受害网络,并使用tunnel命令代理连接进入受害者的内网隔离环境,并采取进一步措施。在FIN7的活动中,一直使用合法购买的代码签名证书来签名其CARBANAK有效载荷。
作为主要攻击载荷之一,FIN7对CARBANAK的使用和维护十分频繁,木马本身具有多个版本,并且多次出现在从2014至2018年间FIN7发起的攻击事件中。
2018年,CARBANAK源码被泄露,研究人员发现该木马是一个由755个文件、超过10万行代码组成的巨大工程编译而成的。该工程使用的注释语言为俄语,证实了FIN7的俄罗斯背景。
对抗行为
CARBANAK使用一套成熟的机制对二进制代码进行混淆,使得字符串与大部分导入函数不可见。
PJW
CARBANAK使用一种叫做PJW的字符串哈希加密方式,该技术将程序使用的api函数地址替换为一份hash列表,程序运行时将不断遍历hash列表来获取对应的api函数。
该技术的核心函数在程序中显示为以下形式:
该函数被CARBANAK大量调用,使得除LoadLibrary和GetProcAddress以外的所有Api函数都被隐藏。
外壳
后期的CARBANAK程序带有自制外壳,该外壳将原始代码加密隐藏,填充花指令代码,并随机调用windows api作为伪装,用以干扰检测和分析:
注入
大部分CARBANAK程序会将自身注入到svchost.exe中执行
通信行为
CARBANAK在通信协议方面存在许多变种,使用的通信协议、端口与加密方式各不相同。
早期版本的CARBANAK与C&C尝试建立通信后,使用加密的http get请求获取指令,其加密方式为RC2加密后再用Base64转码,且包含一些伪装操作使密文整体更像正常的http get请求。
加密前的请求信息内容可用以下格式表示:
[random_string]|hash(hostname+macaddr)|[random_string]
C&C会用以下格式响应受控主机的请求同时下发指令:
[random_string]|hash(hostname+macaddr)|data=[cmd]|process=svchost.exe|idprocess=[procid]|[random_string]
其中[cmd]部分即为C&C指令。
通过替换Base64中的”+”和”/”为”.”和”-“、插入随机”/”与文件扩展名的操作,CARBANAK将通信密文伪装成了如下所示的效果:
后期的CARBANAK变种程序使用head+body模式的tcp通信,并通过RSA+AES256进行通信加密,使得通信无法被直接解密。
使用tcp head+body模式的CARBANAK通信流量:
CARBANAK程序会将获取到的服务器指令存放在%COMMON_APPDATA%\Mozilla目录下的一个bin后缀文件里,文件名硬编码在程序中。
执行行为
CARBANAK读取存放在%COMMON_APPDATA%\Mozilla下的bin文件中保存的命令并执行:
这些命令的解析方式与程序调用API的方式类似,首先计算命令的hash值,再通过hash值匹配到对应的命令执行函数。
CARBANAK可以执行以下命令:
hash | cmd | cmdfunc |
0x0aa37987 | loadconfig | ExecCmd_LoadConfig |
0x007aa8a5 | state | ExecCmd_State |
0x007cfabf | video | ExecCmd_Video |
0x06e533c4 | download | ExecCmd_Download |
0x00684509 | ammyy | ExecCmd_Ammyy |
0x07c6a8a5 | update | ExecCmd_Update |
0x0b22a5a7 | updklgcfg | ExecCmd_UpdKlgCfg |
0x006fd593 | ifobs | ExecCmd_IFobs |
0x0b77f949 | httpproxy | ExecCmd_HttpProxy |
0x07203363 | killos | ExecCmd_KillOs |
0x078b9664 | reboot | ExecCmd_Reboot |
0x07bc54bc | tunnel | ExecCmd_Tunnel |
0x07b40571 | adminka | ExecCmd_Adminka |
0x079c9cc2 | server | ExecCmd_Server |
0x0007c9c2 | user | ExecCmd_User |
0x000078b0 | rdp | ExecCmd_RDP |
0x079bac85 | secure | ExecCmd_Secure |
0x00006abc | del | ExecCmd_Del |
0x0a89af94 | startcmd | ExecCmd_StartCmd |
0x079c53bd | runmem | ExecCmd_RunMem |
0x0f4c3903 | logonpasswords | ExecCmd_LogonPasswords |
0x0bc205e4 | screenshot | ExecCmd_Screenshot |
0x007a2bc0 | sleep | ExecCmd_Sleep |
0x0006bc6c | dupl | ExecCmd_Dupl |
0x04acafc3 | findfiles | ExecCmd_FindFiles |
0x00007d43 | vnc | ExecCmd_VNC |
0x09c4d055 | runfile | ExecCmd_RunFile |
0x02032914 | killbot | ExecCmd_KillBot |
0x08069613 | listprocess | ExecCmd_ListProcess |
0x073be023 | plugins | ExecCmd_Plugins |
0x0b0603b4 | tinymet | ExecCmd_TinyMet |
0x08079f93 | killprocess | ExecCmd_KillProcess |
0x00006a34 | cmd | ExecCmd_Cmd |
0x09c573c7 | runplug | ExecCmd_RunPlug |
0x08cb69de | autorun | ExecCmd_Autorun |
TINIMET
木马简述
TiniMet,又名TinyMet,一种基于Meterpreter的代码注入器,可用来执行Shellcode。如前文所述,该工具可见于FIN7的HALFBAKED后门、BATELEUR、GRIFFON几种攻击链中,也被CARBANAK组件使用。Metasploit传输的payloads包括 single、stager和stage三种类型,而Tinimet属于stager,目的是作为下载器,将stage部分传至肉鸡进行后续活动。
对抗行为
检测杀软
遍历当前进程,检查是否有趋势科技组件在运行。
各组件具体归属如下:
uiSeAgnt.exe | 趋势科技Worry-Free Business Security的组件 |
PtSessionAgent.exe | 趋势科技Internet Security的组件 |
PwmSvc.exe | 趋势科技DirectPass的组件 |
coreServiceShell.exe | 趋势科技Titanium Maximum Security的组件 |
根据不同的检测结果,后面会启动不同目标进程用于的映射自身内存镜像。若未检测到趋势科技组件,则启动svchost,否则启动wuauclt。
注入
根据杀软检测情况创建svchost进程或wuauclt进程,若创建成功则将自身内存镜像映射至其中并执行特定代码。若创建上述进程失败则注入到explorer进程中。
通信行为
被注入到svchost/wuauclt或explorer进程后,先结束之前的父进程,删除源程序,然后与C&C通信,接收二进制Shellcode并执行。
Tinimet一开始接收4个参数,包括C&C域名和端口。
参数1 | 自身路径。 |
参数2 | 通信方式(主动连接C&C或监听C&C连接);若为”—help”则退出程序。 |
参数3 | C&C域名。 |
参数4 | C&C端口。 |
根据参数2选择通信传输模式。
如上图,参数2第1个字符取值影响如下:
字符 | 行为 |
‘0’ | 主动连接C&C,接收的内容无加密 |
‘1‘ | 退出 |
‘2’ | 退出 |
‘3’ | 监听C&C连接,接收的内容无加密 |
‘4’ | 主动连接C&C,接收的内容有加密 |
‘5’ | 退出 |
执行行为
若出在加密模式,则接收后Shellcode会经过经过简单的异或解密,密钥为0x50。Shellcode的开头会增加5字节内容,包括1字节的0xBF和4字节的套接字句柄,其中0xBF刚好是MOV EDI XXX的机器码,即Shellcode的第一条指令是将套接字句柄赋给EDI寄存器,足见Shellcode本身亦存在网络行为。
最终会执行Shellcode。
DRIFTPIN
木马简述
DRIFTPIN又名Toshliph,通过注入其他进程来实现远控功能,主要用于获取用户屏幕截图、进程信息和系统信息等。早在2015年,ESET披露的CARBANAK后门相关事件就包含DRIFTPIN 。2016年,FireEye在分析一起由FIN7组织发起的钓鱼攻击也发现了DRIFTPIN的身影。
对抗行为
名称检查
执行Shellcode时,若发现当前进程的可执行路径为C:\t.exe、C:\myapp.exe、C:\self.exe、C:\file.exe或C:\sample.exe,则不加载后续模块。研究人员可能会将样本命名为以上名称。
驻留情况检查
远控模块第一次执行时并不会直接连接C&C,而是检查自身的持久驻留情况。
- 首先判断自身可执行文件是否位于自启动目录下,是则创建并注入进程与C&C通信。,否则转到步骤2。
- 判断自身可执行文件已被注册为服务,是则启动该服务以创建并注入进程,否则转到步骤3。注册表HKLM: SYSTEM\CurrentControlSet\Services下各项的Image字段保存了服务对应的可执行文件路径和参数,如下图所示。
- 加载CVE漏洞利用组件实现提权,再执行上述创建并注入进程的操作,最后退出。
杀软检测及注入
在创建进程并注入代码之前,会检测杀软进程,包括趋势科技与AVG的组件。
若检测到两者的组件,则创建IE进程,否则创建svchost进程。注入自身镜像后,设置新入口点函数用于与C&C通信,而非自身原始入口,如果不使用这种方式,该样本将永远无法和C&C通信。有的样本一开始连接C&C,但只连一次,无法达到循环接收指令的效果。
提权
由上文所述,若样本检测到自身未驻留系统,则先进行提权再创建进程并注入。
样本会加载内嵌的Dll来执行提权操作。该Dll附带一段Shellcode,样本通过该Shellcode来加载Dll。
该Dll包含子Dll,根据当前进程与系统情况执行下一步操作。
对于第三种情况,会再次进行杀软检测,查看是否存在趋势科技以下组件:
uiSeAgnt.exe、PtSessionAgent.exe、PwmSvc.exe和coreServiceShell.exe。
第三种情况的代码框架与BABYMETAL组件的对应代码非常相像,侧面说明两者是同一组织所为。
子Dll是最终的漏洞利用模块。通过利用CVE-2017-0263,在内核中运行代码,将当前进程Token设置为系统的Token,实现提权。
有些样本的提权代码直接位于远控模块中,没有单独做成组件,使用的漏洞也不一样但为了替换Token。
文档 | CVE |
63241a3580cd1135170b044a84005e92 | CVE-2017-0263 |
70345aa0b970e1198a9267ae4532a11b | CVE-2015-2387 |
4dc99280459292ef60d6d01ed8ece312 | CVE-2015-2387 |
de50d41d70b8879cdc73e684ad4ebe9f | CVE-2015-2387 |
CVE-2015-2387(Adobe Font Driver atmfd.dll漏洞)的触发和利用。
持久化
新入口会将自身复制到C:\ProgramData\Intel目录下(名称随机),设置属性为系统隐藏,然后创建服务(根据已有服务的名称和描述来随机创建);若服务创建失败,则复制到自启动目录下。最后设置系统重启时删除源程序。
通信行为
样本向C&C发送带有随机Url的HTTP请求以获得指令。
执行行为
通信返回的内容经Base解码和AES解密,第一个字节代表执行类型:
指令 | 操作 |
2 | 获取系统信息并加密回传 |
3 | 获取进程信息并加密回传 |
4 | 执行下载的可执行文件 |
5 | 更新可执行文件 |
6 | 卸载服务,删除可执行文件 |
7 | 获取屏幕图像并加密回传 |
8 | 加载可执行文件并执行 |
9 | 执行指定的可执行程序 |
其中涉及回传的操作会将数据放在HTTP可选数据中。
FIN7组织19年新研载荷分析
2019年10月,FIN7组织的新工具被披露,其名称分别为BOOSTWRITE和RDFSNIFFER,这两款工具互相关联,组成了一条新的攻击链。
BOOSTWRITE
木马简述
BOOSTWRITE是一个加载程序,通过滥用Windows的DLL加载机制由正常应用程序加载至内存。在捕获的事件中,BOOSTWRITE伪装为Dwrite.dll文件,利用Microsoft Direct X排版服务进行加载。
执行行为
Microsoft Direct X服务调用Dwrite.dll的流程为:加载GDI库,利用该库加载gdiplus库,最终调用Dwrite.dll完成排版的渲染工作,调用Dwrite.dll库的入口函数为DwriteCreateFactory,因此,BOOSTWRITE伪造的DLL文件导入表如图:
攻击者在开发该恶意软件时添加了大量的注释,通过OutputDebugString进行输出,这为理解恶意软件功能提供了相当多的帮助。
BOOSTWRITE具体攻击流程如下:
1、加载原始Dwrite.dll文件到内存,获取其导出函数DwriteCreateFactory的地址;
2、读取自身内存,获取一个长度为32字节的XOR密钥,该密钥用于解密其内存中加密数据;
3、解密后的数据包括一组硬编码的IP地址及端口:
连接C2下载后,将得到长度为32字节的key和8字节的IV,使用key和IV来解密下载其他数据。此处引用了Crypto++开源加解密类库,加解密算法为ChaCha20。
在BOOSTWRITE解密完下载的内容之后,会直接执行下载的内容。而完成这些动作后,BOOSTWRITE将调用Dwrite.dll的导出函数DwriteCreateFactory,使排版服务能正常执行,在用户侧则无法感知恶意软件的执行。
通信行为
BOOSTWRITE运行时会连接一个硬编码IP:109.230.199[.]227,端口:31337,主要目的为下载数据。目前,这个端口已经无法连接。但这个IP地址目前仍然可以连接,且开放了22端口,经过测试,该端口可以访问。
BOOSTWRITE从该C&C下载的内容包括2类,其一是已知的CARBANAK远控木马,而另外一款是全新的RAT工具,fireeye将其命名为RDFSNIFFER。
非常遗憾的是,我们并没有找到RDFSNIFFER文件,该样本连接的C&C早已失效。