看我如何还原黑客真实通信
2024-6-3 10:8:19 Author: www.freebuf.com(查看原文) 阅读量:1 收藏

freeBuf

主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

1. 前言

互联网环境通信流量千千万,当我们安全研究人员在做流量分析时无法避免遇到非明文数据,对于自己数据的流量特征可以一眼分析出来通信内容,但是恶意流量通信非常之多,当你看到这样的流量,你是否能够分析出该流量数据传输的是什么内容?

1717379533_665d21cdb90f137175e1c.png!small?1717379536628

通信流量整体内容可读性较差,完全看不出来恶意流量要传输的内容是什么。

且针对于这种内容如果提取对应的检测规则,仅通过流量层的分析是无法提取的。

接下来我们来从逆向的层面来还原数据传输的意义。

2. 行为分析

2.1 整体流程图

样本的整体执行流程如下:

1717379545_665d21d9b5e570ec8f775.png!small?1717379548097

2.2 释放诱饵文档

首先运行样本,样本释放并运行诱饵文档用来迷惑受害者。

1717379553_665d21e144d5e2d0a3ede.png!small?1717379557282

随后,通过二次文件释放以及dll调用来加载最终的恶意DLL实现服务启动达到恶意通信目的。

2.3 定位最终载荷

木马行为如下,发现可疑行为

1717379561_665d21e9280c110ed8086.png!small?1717379562757

并通过该文件在服务列表中定位到对应的服务

1717379564_665d21ec439310b3fc02f.png!small?1717379565859

3. 逆向分析

3.1 关键函数定位

定位目标dll使用IDA进行逆向分析,对应的导出函数如下:

1717379574_665d21f60e044ef11cd27.png!small?1717379575898

进入Servicemain函数进行分析,定位恶意代码主函数。

3.2 注册服务启动

首先创建服务名,名字如下:Net1Service,和火绒剑定位到的服务名如出一辙

1717379581_665d21fd4d1daee8db952.png!small?1717379583428

1717379584_665d2200c9acda0b75ee0.png!small?1717379586090

3.3 创建线程

1717379591_665d22072b20324afab72.png!small?1717379596069

恶意代码主函数创建线程,所有的操作均在线程回调函数中。

1717379613_665d221d773a7e9afe343.png!small?1717379617339

3.4 回溯函数调用

线程回调函数整体均使用内存地址寻址调用的方式来实现目标函数的加载,可读性较差加强逆向分析难度。

1717379618_665d222291c059e9e0622.png!small?1717379623105

交叉引用回溯到函数赋值位置

1717379628_665d222ca0932d2612177.png!small?1717379633192

3.5 互斥体创建

运行恶意代码前判断目标互斥体是否存在,如果存在则不再继续感染当前主机,否则创建互斥体执行后续恶意代码

1717379636_665d223477842f7e426f3.png!small?1717379641416

经过动态调试分析,确认“v3+16”函数为上线包处理函数

1717379642_665d223a150bc04fdb6e9.png!small?1717379645691

3.6 C2解析

1717379648_665d2240d8edcd2b716c1.png!small?1717379657304

进入函数内部,该函数首先对目标c2进行DNS解析,解析成功后获取到目标ip。

3.7 上线包数据获取

地址随后进行上线包数据信息获取操作。

首先获取受害者主机的mac地址,随后按照02x%进行格式化。

1717379653_665d22453c9b7521d88f7.png!small?1717379663040

随后将格式化后的mac地址信息拼接到上线包数据指定偏移0x04。

1717379658_665d224a33635e2e7a988.png!small?1717379665956

随后GetUserInfo函数负责包含剩余其他所有上线包数据的获取。

1717379663_665d224f1a3ee4c38b5dc.png!small?1717379670122

获取后的数据拼接如下图所示:

1717379667_665d225315c5c5d2973d8.png!small?1717379672509

其中包含被害者主机的mac地址、cpu主频、cpu核数、物理内存大小、国家语言地区、计算机名、系统版本等。其中需要注意的是,此木马在获取受害者所处的国家语言地区时使用的通过编码页数来间接判断语言地区。

1717379670_665d2256ae27eaefabf43.png!small?1717379672509

3.8 加密函数分析

获取完数据后使用加密函数对所有明文上线包信息进行加密,这里使用的异或加密,密钥为0xf7。

1717379673_665d225975913f42676bd.png!small?1717379679547

加密后的数据如下所示,和最初抓取的pcap中的通信流量数据相同。

1717379677_665d225d8f5bf02b7deb8.png!small?1717379679547

1717379683_665d226333bbd3d2a7941.png!small?1717379686027

加密完成后,开始发送上线信息,其中上线包大小为474字节。

1717379692_665d226c4197d134d27bb.png!small?1717379696731

这也刚好和wireshark中抓取的包大小一致。

1717379694_665d226e7c075277b4b86.png!small?1717379696731

4. 解密还原原始数据

通过以上的详细逆向操作,已经将通信流量的数据全部还原解密,下表为通信数据具体的数据结构以及对应的解释。

整体数据结构还原。

偏移

大小

含义

Buf[0]

4字节

固定硬编码

Buf[4]

/

受害者mac地址

Buf[17]

4字节

受害者CPU主频率

Buf[21]

4字节

受害者物理内存大小

Buf[29]

4字节

受害者国家所处地区

Buf[33]

4字节

受害者国家所处地区

Buf[41]

4字节

受害者操作系统版本

Buf[45]

4字节

受害者CPU核数

Buf[218]

/

受害者计算机名

本篇文章作者通过逆向的角度来还原恶意流量中的真实通信数据,其中关键思路在于如何定位出目标流量通信数据对应的PID以及逆向+调试定位还原数据结构。

已在FreeBuf发表 0 篇文章

本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022


文章来源: https://www.freebuf.com/articles/endpoint/402469.html
如有侵权请联系:admin#unsafe.sh