探寻木马进化趋势:APT32多版本远控木马Ratsnif的横向分析

41yf1sh 逆向破解 2019年7月8日发布
Favorite收藏

导语:OceanLotus恶意组织(又名APT32、CobaltKitty)正在使用一系列名为“Ratsnif”的远程访问木马来实现新的网络攻击功能。

一、概述

OceanLotus恶意组织(又名APT32、CobaltKitty)正在使用一系列名为“Ratsnif”的远程访问木马来实现新的网络攻击功能。Blackberry Cylance的威胁研究人员对Ratsnif木马进行了分析,发现该木马使用了一种名副其实的瑞士军刀网络攻击技术。该恶意木马自2016年以来就不断更新,目前已经结合了数据包嗅探、网关和设备ARP投毒、DNS毒化、HTTP注入和MAC欺骗等功能。

我们总共深入研究了四个不同的Ratsnif样本,其中前三个在2016年开发完成,第四个在2018年下半年创建。

二、恶意样本1

2.1 基本信息

MD5:516ad28f8fa161f086be7ca122351edf

SHA-256:b4e3b2a1f1e343d14af8d812d4a29440940b99aaf145b5699dfe277b5bfb8405

文件名:javaw.exe、Client.exe

路径:X:\Project\BotFrame\Debug\Client.exe

大小:1.32MB(1387520字节)

文件类型:Windows系统PE32可执行文件(控制台)Intel 80386 32位

代号:OceanLotus APT32 Ratsnif

编译时间:2016年8月5日 07:57:13

2.2 分析

截至目前,我们最早发现的Ratsnif样本是在其C2域名被首次激活的同一天编译的:

1.jpg

这一木马似乎是一个调试版本,与2016年9月的后续版本非常相似,我们将以此版本的恶意软件作为基础,探究后续三个新版本的进化趋势。

三、恶意样本2

3.1 基本信息

MD5:b2f8c9ce955d4155d466fbbb7836e08b

SHA-256:b214c7a127cb669a523791806353da5c5c04832f123a0a6df118642eee1632a3

文件名:javaw.exe、Client.exe

路径:X:\Project\BotFrame\Debug\Client.exe

大小:1.32MB(1387520字节)

文件类型:Windows系统PE32可执行文件(控制台)Intel 80386 32位

代号:OceanLotus APT32 Ratsnif

编译时间:2016年8月6日 04:30:06

3.2 分析

该版本在上一个版本编译后的24小时之内编译完成,在功能上,与上一个版本仅有一处细微的差别,即在重新编译之前,已经删除对pcap_dump_flush()的调用。

在恶意样本1中,调用了pcap_dump_flush:

2.jpg

在恶意样本2中,缺少对pcap_dump_flush的调用:

3.jpg

此外,CodeView调试信息已经更改,反映了重新编译后样本的新“年龄”(Age)。

在恶意样本1中,“Age”为0x14:

4.jpg

在恶意样本2中,“Age”为0x15:

5.jpg

两个样本均在编译后的一分钟之内被提交至VirusTotal,并包含与PDB信息相同的路径。我们认为,该样本似乎是由开发人员自动提交到在线扫描服务的。

VirusTotal上展现的提交日期、时间和路径:

6.jpg

四、恶意样本3

4.1 基本信息

MD5:7f0ac1b4e169edc62856731953dad126

SHA-256:b20327c03703ebad191c0ba025a3f26494ff12c5908749e33e71589ae1e1f6b3

文件名:javaw.exe、adobe.exe

路径:N/A

大小:432KB(442880字节)

文件类型:Windows系统PE32可执行文件(DLl)(GUI)Intel 80386

代号:OceanLotus APT32 Ratsnif

编译时间:2016年9月13日 09:26:42

与2016年8月编译的前两个样本相比,这个样本的功能与此前样本非常相似,该样本是一个发布的版本,可能是OceanLotus在野外部署的早期Ratsnifs之一。

4.2 威胁特征

1. 通过HTTP协议连接C2;

2. 数据包嗅探;

3. ARP投毒;

4. DNS欺骗;

5. HTTP重定向;

6. 远程Shell。

4.3 分析

在其执行后,Ratsnif将创建一个名为“onceinstance”的互斥锁,初始化2.2版本的Winsock,并收集系统信息,包括用户名、计算机名称、工作站配置(通过NetWkstaGetInfo API)、Windows系统目录、网络适配器信息。然后,借助HTTP协议以POST的方式将上述信息发送到攻击者的C2服务器,具体而言,是发送到/cl_client_online.php API端点。接下来,创建一个日志记录线程,通过对/cl_client_logs.php发出HTTP POST请求,从而将日志消息路由到C2.。随后,恶意软件继续加载wpcap.dll,然后引入以下函数:

pcap_sendqueue_transmit
pcap_findalldevs
pcap_freealldevs
pcap_open_live
pcap_sendqueue_alloc
pcap_next_ex
pcap_sendqueue_queue
pcap_sendpacket
pcap_close
pcap_sendqueue_destroy
pcap_dump_open
pcap_dump_ftell
pcap_dump_flush
pcap_dump_close
pcap_dump

在成功加载WinPcap之后,将会对/cl_client_cmd.php发出进一步的HTTP POST请求,该请求用于从攻击者那里获取命令代码。该代码将每隔10秒检查一次命令。在由简单的命令处理器调度之前,C2命令通过Windows API的方式,使用带有硬编码的、使用AES算法的静态密钥进行解密。

4.4 C2

我们分析的所有Ratsnif样本,都对其中的一个或多个C2域名进行硬编码,无论这些域名是否实际使用。在我们目前所分析的样本中,包含两个硬编码后的域名,但似乎只有一个域名曾经处于活跃状态:

search[.]webstie[.]net

dns[.]domain-resolve[.]org(非活动域名)

URL及实际作用如下:

/cl_client_online.php  以POST方式提交收集到的系统信息

/cl_client_cmd.php  以GET方式获取C2的命令

/cl_client_cmd_res.php  以POST方式提交C2命令的执行结果

/cl_client_logs.php  以POST消息获得日志消息

该恶意软件支持借助cl_client_cmd.php的HTTP响应发出以下命令:

(1)命令:dump

参数:N/A

描述:将内部“dump”(转储)标志设置为1,从而在发出“devIp”命令时,将截获的数据包写入文件(ntdata.tmp)。如果转储文件超过10MB,那么该文件将会被删除并重新创建。

(2)命令:devIp

参数:IP地址

描述:加载WinPcap,对指定的IP执行ARP投毒,并可以选择进行数据包嗅探,或将数据包转储到ntdata.tmp。

(3)命令:gatewapIp

参数:IP地址

描述:如果没有网关IP中毒,那么需要使用SendArp()中的毒化后ARP表。

(4)命令:tarDns

参数:域名、IP地址

描述:执行ARP和SMB端口扫描。使用以下SMB数据包标头,该数据包标头似乎来源于nmap脚本(https://svn.nmap.org/nmap/nselib/smb.lua):

7.png

(5)命令:vicIp

参数:IP地址

描述:在中毒的设备或网关上,该命令将创建多个线程,以执行其他ARP毒化、数据包嗅探和数据包重新传输。

(6)命令:exIp

参数:IP列表、端口

描述:从要监视的主机范围中排除的IP地址和端口列表。

(7)命令:logtm

该命令未实现。

(8)命令:runtm

参数:整数

描述:使用atoi()将提供的参数从ASCII字符串转换并存储为整数。

(9)命令:httprd

参数:主机名

描述:使用两种方法中的一种,重定向HTTP请求。方法为:直接更新请求中的主机名,或使用HTTP 301响应代码。

(10)命令:httpExt

参数:扩展名清单

描述:指定要执行HTTP重定向的文件扩展名列表。

(11)命令:shell

参数:命令行

描述:带有stdout重定向的CreateProcessA。

(12)命令:stop

描述:停止毒化

(13)命令:exit

参数:退出代码

描述:停止毒化,并使用退出代码终止程序。

五、恶意样本4

5.1 基本信息

MD5:88eae0d31a6c38cfb615dd75918b47b1

SHA-256:7fd526e1a190c10c060bac21de17d2c90eb2985633c9ab74020a2b78acd8a4c8

文件名:N/A

路径:N/A

大小:745KB(762880字节)

文件类型:Windows系统PE32可执行文件(控制台)Intel 80386 32位

代号:OceanLotus APT32 Ratsnif

编译时间:2018年8月8日(星期三)UTC时间02:52:52

5.2 简述

在2018年下半年编译的恶意软件,使用了OceanLotus组织定制的Shellcode加载工具进行包装,针对该样本的分析成果首先在Macnica Networks的一篇文章中发表。与2016年编译的版本相比,新的样本中引入了配置文件,不再依赖于C2进行操作。除此之外,它还加入了HTTP注入、协议解析和SSL劫持的新功能。

5.3 威胁特征

1. 使用OceanLotus装载工具部署;

2. 使用为受害者的网络环境量身定制的配置文件,该配置文件单独提供(与先前版本中的后门命令相对);

3. 使用单独提供的SSL证书执行SSL劫持;

4. 使用WolfSSL库(3.11版本)解密SSL流量;

5. 使用http_parser.c解析HTTP流量;

6. 数据包嗅探过程专注于通过协议解析来提取登录凭据和其他敏感数据;

7. ARP投毒;

8. DNS欺骗;

9. HTTP重定向;

10. HTTP注入。

5.4 分析

针对这一特定的样本,实际的嗅探器可执行文件在加载工具DLL中进行Base64编码,并包含在两层Shellcode之中。加载工具DLL解码Payload,将其复制到内存,并执行第一阶段Shellcode。该阶段会解压缩二进制文件,并在单独的线程中执行第二阶段Shellcode。第二阶段Shellcode将嗅探可执行文件注入到内存中,并对负责返回进程命令行的一些API函数进行挂钩(例如:GetCommandLineA、GetCommandLineW、_acmdln、_wcmdln),因此它们取而代之返回的是一个硬编码的字符串。该字符串包含指定配置文件路径的参数,以及可执行文件的原始路径:

C:\Users\Administrator\Desktop\api\temp\royal\HkYh9CvH7.exe -p
C:\ProgramData\setting.cfg

攻击者为什么要使用这种复杂的方法将配置路径传递给恶意软件,我们还不得而知。

配置文件是一个简单的文本文件,使用Base64编码,其中的第一行会被忽略,后续的每一行都指定一个参数,例如:

  [unused_line]
  -ip [ATTACKER IP ADDRESS]
  -ga [DEFAULT GATEWAY]
  -subnet [SUBNET MASK]
  -sniff -ssl_ip [IP ADDRESS]
  -html_inject [BROWSER PROCESS NAME]
  -dlog_ip [IP ADDRESS]
  -mac [ATTACKER MAC ADDRESS] "true"|"false"
  -name [DOMAIN NAME] [REDIRECTION IP]
  -all
  -dnsttl [INT VALUE]
  -log [LOGFILE PATH]
  -pass [CREDENTIALS DUMP PATH]
  -dwn_ip [IP ADDRESS]

但是,解析dwn_ip参数值的代码存在一个漏洞,如果配置中存在该值,则会导致内存违规读取。

代码中存在漏洞,“dwn_ip”的值作为字符串传递,而print_debug_msg需要指向字符串的指针:

8.jpg

在执行后,嗅探器将从指定文件中读取配置,使用Base64对其进行解码,并将其解析为内存中的结构。,如果在配置中指定了“-sniff”参数,那么恶意软件将会添加防火墙例外,并禁用注册表中每个网络适配器的大量发送卸载(Large Send Offload)。

添加Windows防火墙规则:

netsh advfirewall firewall add rule name=\"Core Networking - Router Solicitation\" dir=in action=allow program={self_path} enable=yes

在禁用LSO之前禁用网络适配器:

wmic path win32_networkadapter where index=%d call disable

新版本恶意软件在从wpcap.dll导入相同的API(添加了pcap_geterr)之后,恶意软件将创建负责ARP投毒和DNS欺骗的线程。

为了能够解密SSL流量,恶意软件使用名为WolfSSL的开源库和单独提供的证书和私钥文件执行SSL劫持。为此,它创建了一个内部WolfSSL服务器,监听65000-65535范围内的第一个可用端口:

9.jpg

与2016年的Ratsnif变种不同,2018年的变种没有将所有数据包存储到PCAP文件中,而是使用多个嗅探器类从数据包中收集敏感信息。这样可以最大限度地减少攻击者必须收集、泄露和处理的数据量,并显示出攻击者感兴趣的信息。

恶意软件可以嗅探以下协议或端口的流量:

(1)接口:CSniffFtp

端口:21、990

标头:ABOR ACCT ADAT ALLO APPE AUTH CCC CDUP CONF CWD DELE ENC EPRT EPSV FEAT HELP HOST LANG LIST LPRT LPSV MDTM MIC MKD MLSD MLST MODE NLST OPTS PASS PASV PBSZ PORT PROT PWD QUIT REIN REST RETR RMD RNFR RNTO SITE SIZE SMNT STAT STOR STOU STRU SYST TYPE USER XCUP XMKD XPWD XRCP XRMD XRSQ XSEM XSEN 230

(2)接口:CSniffImap

端口:143、993

标头:CAPABILITY LOGOUT STARTTLS AUTHENTICATE LOGIN SELECT EXAMINE CREATE RENAME LSUB STATUS APPEND CHECK CLOSE EXPUNGE FETCH STORE UID

(3)接口:CSniffLdap

端口:389、636、10389、01636

标头:多种标头

(4)接口:CSniffNntp

端口:119

标头:AUTHINFO USER AUTHINFO PASS ANONYMOUS 281

(5)接口:CSniffPop

端口:110、995

标头:RCEV RCVD RSET +OK USER PASS RETR QUIT

(6)接口:CSniffSmb

端口:445

标头:多种标头

(7)接口:CSniffSmtp

端口:25、465

标头:HELO MAIL RCPT SEND SOML SAML VRFY EXPN TURN FROM

(8)接口:CSniffTds

端口:1433

标头:SELECT name, password_hash FROM master.sys.sql_logins where is_disabled = 0; — priv

(9)接口:CSniffTelnet

端口:23

标头:Login Failed login: password:

(10)接口:SniffHttp2

端口:80、443

标头:多种标头

每个嗅探器类接口包含两种方法,分别用于从传入和传出的数据包中提取敏感信息。通常是依赖于搜索明文标头字符串以实现凭据窃取,例如在Telnet协议中搜搜用户名和密码的命令:

10.jpg

此外,HTTP嗅探器接口还能够执行注入操作,可以将攻击者提供的任意内容插入到HTML中。

5.5 C2

尽管在此样本的.rdata中,包含一个硬编码的、使用Base64进行编码的C2 URL,但恶意软件似乎从未使用过它。相反,恶意软件将捕获的信息记录到文本文件中,以供另一个模块进一步渗透。

5.6 实际测试

为了重新创建恶意样本运行的条件,我们在192.168.8.135上配置了默认网关,并运行iNetSim作为DNS和HTTP服务器。攻击者的主机位于192.168.8.134,受害者的主机位于192.168.8.138。Ratsnif被配置为进行如下操作:

  TEST CONFIG
  -ip "192.168.8.134"
  -ga "192.168.8.135"
  -subnet "255.255.255.0"
  -sniff
  -ssl_ip "192.168.8.254"
  -html_inject "iexplore.exe"
  -dlog_ip "192.168.8.254"
  -mac "00:0C:29:59:62:46" "true"
  -name "www.google.com" "192.168.8.135"
  -dnsttl "100"
  -log "C:\ratsnif.log"
  -pass "C:\ratsnif.pcap"
  -dwn_ip

下面展示了恶意软件发送的ARP数据包,将询问配置文件中指定的子网上所有计算机的MAC地址,同时忽略其自身(192.168.8.134)和默认网关(192.168.8.135):

11.jpg

下图展现了恶意软件发送的ARP数据包,将询问配置文件中指定的子网上所有计算机的MAC地址,同时忽略自身(192.168.8.134)和默认网关(192.168.8.135)。

一旦恶意软件拥有子网上所有主机的MAC地址,Ratsnif就会向这些地址发送未经请求的ARP数据包,更新每个受害者的默认网关的MAC地址:

12.jpg

下图展示了对受害计算机的影响,攻击者的IP地址和默认网关的IP地址(192.168.8.135)现在共享相同的物理地址。通过运行arp –a命令,可以显示出受害计算机上被毒化后的ARP表:

13.jpg

一旦ARP表被毒化,所有发往默认网关的流量将会通过Ratsnif路由,并且可以在重传之前进行存储和操作。

最后,下图展现了针对www.google.com的毒化DNS响应,其中DNS查询被Ratsnif截获,修改为指向攻击者控制的IP地址以及发送给原始请求者的虚假响应:

14.jpg

六、C2信息

域名:search[.]webstie[.]net

服务器:whois.web4africa.net

注册:WEB4AFRICA INC

邮箱:[email protected]

名称:Domain Admin, C/O ID#10760

组织:Privacy Protection Service INC d/b/a PrivacyProtect.org

接到:PO Box 16

城市:Nobby Beach

洲:Queensland

邮编:QLD 4218

国家:澳大利亚

电话:4536946676

域名服务器:ns21.cloudns.net、ns22.cloudns.net、ns23.cloudns.net、ns24.cloudns.net

历史记录:

我们通过Shodan查找到C2服务器以前开放的各种端口,包括HTTP、SMB和RDP,这些端口用来控制Ratsnif和其他OceanLotus发布的恶意软件。

search[.]webstie[.]net的Shodan历史记录:

15.jpg

七、总结

Ratsnif是我们的一个有趣发现,可能是由于部署的数量较少,在大约两年的时间内我们没有能够发现这一恶意软件。与此同时,恶意软件体现出了两年多之间的功能变化,使我们能够亲眼见证攻击者是如何根据他们的恶意目的来定制工具。尽管所有样本都大量借鉴了开源的代码或代码片段,但从整体来看,这些代码的开发质量仍然非常差。简而言之,我们认为Ratsnif不符合OceanLotus恶意组织对恶意软件的高标准要求。

八、附录

8.1 威胁指标

SHA-256:

b4e3b2a1f1e343d14af8d812d4a29440940b99aaf145b5699dfe277b5bfb8405(Ratsnif)

b214c7a127cb669a523791806353da5c5c04832f123a0a6df118642eee1632a3(Ratsnif)

b20327c03703ebad191c0ba025a3f26494ff12c5908749e33e71589ae1e1f6b3(Ratsnif)

7fd526e1a190c10c060bac21de17d2c90eb2985633c9ab74020a2b78acd8a4c8(Ratsnif)

互斥体:

onceinstance

域名:

search[.]webstie[.]net(C2)

dns[.]domain-resolve[.]org

IP地址:

66[.]85.185[.]126

PDB路径:

X:\Project\BotFrame\Debug\Client.pdb

数据包抓包输出:

ntdata.tmp

Window防火墙规则:

Core Networking – Router Solicitation

8.2 MITRE

侦查:

网络嗅探(T1040):嗅探数据包,并保存到文件

网络服务扫描(T1046):ARP和SMB

系统服务侦查(T1082):用户/计算机名称、系统目录、工作站信息

命令和控制:

常用端口(T1043):HTTP或HTTPS

不常用的端口(T1065):65000-65536

数据混淆(T1001):使用RSA/AES C2加密

影响:

操纵传输数据(T1493):执行数据包的拦截、修改和重传 

本文翻译自:https://threatvector.cylance.com/en_us/home/threat-spotlight-ratsnif-new-network-vermin-from-oceanlotus.html如若转载,请注明原文地址: https://www.4hou.com/reverse/18994.html
点赞 0
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论