事件来源
近日,山石网科安全应急响应中心(HSCERT)对海莲花APT组织进行了跟踪分析,海莲花又名APT32,他们正在使用一套名为“Ratsnif”的远程木马来进行新的网络攻击。我们对Ratsnif木马进行了分析,并分析了一些技术和战术。自2016年以来海莲花就在积极开发Ratsnif木马程序,并且结合数据包嗅探、ARP毒化、DNS欺骗、HTTP重定向、Mac欺骗、远程shell等技术进行攻击下面是四个不同的Ratsnif样本,其中三个在2016年开发,第四个在2018年下半年开发的,我们将详细分析样本的攻击技术。
样本分析
样本1
MD5
516ad28f8fa161f086be7ca122351edf
SHA256
b4e3b2a1f1e343d14af8d812d4a29440940b99aaf145b5699dfe277b5bfb8405
Filename
javaw.exe, Client.exe
Path
X:\Project\BotFrame\Debug\Client.exe
Size
1.32 MB (1,387,520 bytes)
File Type
PE32 executable for MS Windows (console) Intel 80386 32-bit
Alias
OceanLotus APT32 Ratsnif
Compile Time
2016-08-05 07:57:13
这是最早发现的Ratsnif样本,是在C2服务器被首次激活的时候编译的,这个好像是一个debug版本,这和2016年9月的后续版本非常相似。
样本2
MD5
b2f8c9ce955d4155d466fbbb7836e08b
SHA256
b214c7a127cb669a523791806353da5c5c04832f123a0a6df118642eee1632a3
Filename
javaw.exe, Client.exe
Path
X:\Project\BotFrame\Debug\Client.exe
Size
1.32 MB (1,387,520 bytes)
File type
PE32 executable for MS Windows (console) Intel 80386 32-bit
Alias
OceanLotus APT32 Ratsnif
Compile Time
2016-08-06 04:30:06
这个样本是在上一个样本编译24小时候编译的,此版本在功能上只有一些细微差别,在重新编译之前已删除了对pcap_dump_flush()的调用:
b4e3b2a1f1e343d14af8d812d4a29440940b99aaf145b5699dfe277b5bfb8405中调用pcap_dump_flush
b214c7a127cb669a523791806353da5c5c04832f123a0a6df118642eee1632a3中缺少对pcap_dump_flush的调用
CodeView调试信息已更改,重新编译后样本的新"age":
b4e3b2a1f1e343d14af8d812d4a29440940b99aaf145b5699dfe277b5bfb8405中的年龄0x14
b214c7a127cb669a523791806353da5c5c04832f123a0a6df118642eee1632a3中的年龄0x15
两个样本在编译后提交给了VirusTotal,并包含与PDB信息相同的路径。该样本可能是由开发人员提交给VirusTotal的:
VirusTotal提交显示日期/时间和路径
样本3
MD5
7f0ac1b4e169edc62856731953dad126
SHA256
b20327c03703ebad191c0ba025a3f26494ff12c5908749e33e71589ae1e1f6b3
Filename
javaw.exe, adobe.exe
Path
N/A
Size
432 KB (442,880 bytes)
File Type
PE32 executable (DLL) (GUI) Intel 80386, for MS Windows
Alias
OceanLotus APT32 Ratsnif
Compile Time
2016-09-13 09:26:42
与2016年8月的前几个样本相比,这个样本是一个release版本,可能是海莲花在野攻击部署的早期Ratsnifs木马之一。
威胁特征
C2通过HTTP发包
数据包嗅探
ARP中毒
DNS欺骗
HTTP重定向
远程shell
样本执行后,Ratsnif创建一个名为“onceinstance”的互斥锁,初始化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进行解密。
三个Ratsnif样本都用了一个或多个C2结构域进行了硬编码,无论它们是否会被使用。
此示例包含2个硬编码域,但只有一个似乎曾经处于活跃状态:
search[.]webstie[.]net
dns[.]domain-resolve[.]org (inactive)
C2服务器公开了一个直观命名的Web API,支持以下端点:
网址 描述
/cl_client_online.php
POST包含收集的系统信息
/cl_client_cmd.php
GET C2命令
/ cl_client_cmd_res.php
C2命令的POST结果
/cl_client_logs.php
POST日志消息
Ratsnif恶意软件包含对通过cl_client_cmd.php HTTP响应发出的以下命令的支持:
样本4
MD5
88eae0d31a6c38cfb615dd75918b47b1
SHA256
7fd526e1a190c10c060bac21de17d2c90eb2985633c9ab74020a2b78acd8a4c8
Filename
N/A
Path
N/A
Size
745 KB (762,880 bytes)
File Type
PE32 executable (DLL) (GUI) Intel 80386, for MS Windows
Alias
OceanLotus APT32 Ratsnif
Compile Time
Wed, 08 Aug 2018 02:52:52 UTC
在2018年下半年在野出现了这个样本,并用定制的海莲花 shellcode加载器来加载,这个样本最先是在Macnica Networks的博客中报道。与2016版本相比,此样本引入了配置文件,并且不依赖于C2进行操作,它还以HTTP注入,协议解析和SSL劫持的形式添加了新功能。
威胁特征
由海莲花(OceanLotus)加载器部署
使用为受害者的网络环境量身定制的单独提供的配置文件
使用单独提供的SSL证书执行SSL劫持
使用WolfSSL库解密SSL流量
使用http_parser.c解析HTTP流量
数据包嗅探可以通过协议解析提取登录凭据和其他敏感数据
ARP中毒
DNS欺骗
HTTP重定向
HTTP注入
这个样本的可执行文件是在加载器DLL中编码的Base64,并包含在两层shellcode中。加载器DLL解码payload,它被加载到内存并执行第一阶段的shellcode,这将解压缩二进制文件和执行2 次在单线程的shellcode。
第二阶段的shellcode将注入的嗅探器加载到内存,返回处理命令行的(GetCommandLineA,GetCommandLineW,_acmdln,_wcmdln)几个API函数,所以它们会被返回的硬编码字符串代替。该字符串包含指定配置文件路径的参数,以及可执行文件的原始路径:
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需要指向字符串的指针。
执行后,嗅探器将从指定文件中读取配置,使用Base64对其进行解码并将其解析为内存中的结构。如果在配置中指定了“-sniff”参数,则恶意软件将自己从防火墙规则表删除:
netsh advfirewall firewall add rule name=\"Core Networking -Router Solicitation\" dir=in action=allow program={self_path} enable=yes
用于添加Windows防火墙规则的命令行
wmic path win32_networkadapter where index=%d call disable
用于在禁用LSO之前禁用网络适配器的命令行
从wpcap.dll导入相同的API后,样本会创建负责ARP投毒和DNS欺骗的线程。
为了能够解密SSL流量,恶意软件使用名为WolfSSL的开源库和单独提供的证书和私钥文件执行SSL劫持。为此,它创建了一个内部WolfSSL服务器,侦听65000 - 65535范围内的第一个可用端口:
使用WolfSSL
与将所有数据包存储到PCAP文件的2016年Ratsnif变体不同,2018变体使用多个嗅探器类来从数据包中收集敏感信息。这将减少攻击者必须收集,泄露和处理的数据量,并显示攻击者感兴趣的信息。
恶意软件可以嗅探以下协议/端口的流量:
接口
端口
头文件
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
CSniffImap
143, 993
CAPABILITY LOGOUT STARTTLS AUTHENTICATE LOGIN SELECT EXAMINE CREATE RENAME LSUB STATUS APPEND CHECK CLOSE EXPUNGE FETCH STORE UID
CSniffLdap
389, 636, 10389, 10636
Various
CSniffNntp
119
AUTHINFO USER AUTHINFO PASS ANONYMOUS 281
CSniffPop
110, 995
RCEV RCVD RSET +OK USER PASS RETR QUIT
CSniffSmb
445
Various
CSniffSmtp
25, 465
HELO MAIL RCPT SEND SOML SAML VRFY EXPN TURN FROM
CSniffTds
1433
SELECT name, password_hash FROM master.sys.sql_logins where is_disabled = 0; -- priv
CSniffTelnet
23
Login Failed login: password:
SniffHttp2
80, 443
Various
每个嗅探器类接口包含两种方法,分别用于从传入和传出数据包中提取敏感信息。这些通常依赖于搜索明文标题字符串以进行凭据窃取:
在Telnet协议中搜索登录名和密码命令
此外,HTTP嗅探器接口还能够执行注入以将任意攻击者提供的内容插入HTML,虽然此样本包含在.rdata部分中硬编码的Base64编码的C2 URL与2016版本中的地址相同,但恶意软件似乎从未使用它; 相反,它将捕获的信息记录到文本文件中,以供另一个模块进一步渗透。
要重新创建样本运行的条件,在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):
ARP广播
一旦它拥有子网上所有机器的MAC地址,Ratsnif就会向这些地址发送未经请求的ARP数据包,更新每个受害者的默认网关的MAC地址:
ARP中毒
下图显示了对受害计算机的影响,攻击者IP地址和默认网关IP地址(192.168.8.135)现在共享相同的物理地址:
arp -a结果显示受害计算机上的中毒ARP表
一旦ARP表中毒,所有发往默认网关的流量将通过Ratsnif路由,并且可以在重传之前进行存储和操作。
最后显示了针对www.google.com的中毒DNS响应,其中DNS查询被Ratsnif截获,修改为指向攻击者控制的IP地址以及发送给原始请求者的虚假响应:
Ratsnif日志文件输出,显示动作
C2中的 ARP投毒和DNS欺骗
search.webstie.net
Attribute
Value
Server
whois.web4africa.net
Registrar
WEB4AFRICA INC
Email
contact@privacyprotect.org
Name
Domain Admin, C/O ID#10760
Organization
Privacy Protection Service INC d/b/a PrivacyProtect.org
Street
PO Box 16
City
Nobby Beach
State
Queensland
Postal
QLD 4218
Country
AUSTRALIA
Phone
4536946676
NameServers
ns21.cloudns.net
ns22.cloudns.net
ns23.cloudns.net
ns24.cloudns.net
"海莲花"(又名APT32、OceanLotus),被认为是来自越南的APT攻击组织,自2012年活跃以来,一直针对中国的敏感目标进行攻击活动,是近几年来针对中国大陆进行攻击活动的最活跃的APT攻击组织之一。
该组织一直在不断的更新他们的攻击武器库,无论是钓鱼的诱饵形式、payload的加载、横向移动等。
Ratsnif木马就是一个很好的例子,它的开发更新使我们能够监测如何根据他们的攻击目定制合适工具。样本大量使用了开源代码,整体开发质量其实挺差的,Ratsnif并不符合OceanLotus恶意软件中常见的高标准。
IOCs
Ratsnif
b4e3b2a1f1e343d14af8d812d4a29440940b99aaf145b5699dfe277b5bfb8405
b214c7a127cb669a523791806353da5c5c04832f123a0a6df118642eee1632a3
b20327c03703ebad191c0ba025a3f26494ff12c5908749e33e71589ae1e1f6b3
7fd526e1a190c10c060bac21de17d2c90eb2985633c9ab74020a2b78acd8a4c8
Mutex name
search[.]webstie[.]net
C2
66.85.185.126
IP
search[.]webstie[.]net
dns[.]domain-resolve[.]org
PDB Path
X:\Project\BotFrame\Debug\Client.pdb
Packet capture output
ntdata.tmp
Windows Firewall Rule
Core Networking - Router Solicitation
参考信息
http://blog.macnica.net/blog/2019/04/oceanlotus-218a.html
https://elixir.bootlin.com/zephyr/v1.13.0/source/subsys/net/lib/http/http_parser.c
https://threatvector.cylance.com/en_us/home/report-the-spyrats-of-oceanlotus.html
https://threatvector.cylance.com/en_us/home/report-oceanlotus-apt-group-leveraging-steganography.html
https://threatvector.cylance.com/en_us/home/threat-spotlight-ratsnif-new-network-vermin-from-oceanlotus.html
https://github.com/wolfSSL/wolfssl
如需帮助请咨询 hscert@hillstonenet.com