FIN7组织复盘分析 PART2-木马与工具

关于伏影实验室

伏影实验室专注于安全威胁研究与监测技术,包括但不限于威胁识别技术,威胁跟踪技术,威胁捕获技术,威胁主体识别技术。研究目标包括:僵尸网络威胁,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文件导入表如图:

图 恶意DLL导入表信息

       攻击者在开发该恶意软件时添加了大量的注释,通过OutputDebugString进行输出,这为理解恶意软件功能提供了相当多的帮助。

       BOOSTWRITE具体攻击流程如下:

       1、加载原始Dwrite.dll文件到内存,获取其导出函数DwriteCreateFactory的地址;

图 获取真实的入口函数地址

       2、读取自身内存,获取一个长度为32字节的XOR密钥,该密钥用于解密其内存中加密数据;

图 读取自身内存

图 输出的xor密钥

       3、解密后的数据包括一组硬编码的IP地址及端口:

图 硬编码的IP地址和端口

连接C2下载后,将得到长度为32字节的key和8字节的IV,使用key和IV来解密下载其他数据。此处引用了Crypto++开源加解密类库,加解密算法为ChaCha20。

图 连接C2并下载

       在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早已失效。

Spread the word. Share this post!

Meet The Author

伏影实验室专注于安全威胁与监测技术研究。研究目标包括僵尸网络威胁,DDoS对抗,WEB对抗,流行服务系统脆弱利用威胁、身份认证威胁,数字资产威胁,黑色产业威胁及新兴威胁。通过掌控现网威胁来识别风险,缓解威胁伤害,为威胁对抗提供决策支撑。

Leave Comment