恶意代码逆向分析与僵尸网络流量取证技术研究
一、理论基础综述
RaDa 木马概述:作为经典的 Windows 平台远程控制程序,RaDa 通常以 UPX 压缩的 PE 格式交付,具备隐蔽性强的特点。其核心功能涵盖远程指令执行、文件管理、进程控制及屏幕捕获等,并可集成流量攻击模块用于构建 DDoS 僵尸网络。
加壳与脱壳原理:程序加壳是通过加密或压缩可执行文件的代码段来增加静态分析难度。脱壳旨在恢复原始内存映像,通过调试器在运行时提取解密后的纯净二进制数据,修复缺失的重定位表与导入表,从而还原完整逻辑。
IDAPRO 分析方法:
- 静态分析:无需运行目标程序,直接加载二进制文件进行反汇编和流图生成,适用于代码逻辑梳理和特征码扫描。
- 动态分析:配合内置调试器实时跟踪寄存器、栈堆变化,能够捕捉运行时生成的敏感密钥及绕过混淆算法时的内存状态。
二、恶意样本深度剖析(RaDa)
针对给定的 RaDa.exe 样本,需完成文件识别、去壳处理及作者指纹提取。
1. 文件格式与架构鉴定
首先将样本挂载至受控实验环境(如 Windows XP Guest),并确认文件系统路径:
C:\Documents and Settings\Administrator\RaDa.exe
使用命令行工具检测文件头信息:
file RaDa.exe # 输出显示该文件为 32 位 x86 架构 PE 可执行文件
进一步检查字符串内容,发现大量非可读字符,判定存在保护壳:
strings RaDa.exe
结合 PEiD 扫描结果,确认为 UPX 加壳(版本范围 0.89.6 - 2.90),原作者为 Markus & Laszlo。
![image]()
2. 自动化脱壳实施
利用专用脱壳辅助工具对样本进行处理。调用工具后生成未压缩的可执行文件 RaDa_unpacked.exe。此时再次运行字符串提取命令,观察到清晰的 ASCII 文本信息,证明脱壳成功。
![image]()
3. 源码痕迹追踪
加载解压后的二进制至 IDA Pro Free 中,开启 Unicode 字符串搜索窗口。在偏移地址 JDR0:00402D04 处截获版权标记 aCopyrightC2004,其对应内容为:
Copyright (c) 2004 Paul Silos & David Poros
由此确认该木马由 Paul Silos 和 David Poros 开发。相关截图见下图:
![image]()
4. 功能与分类判定
通过对二进制数据的语义分析,可归纳出以下安全情报:
- 样本哈希:MD5 值为
caaa6985a43225a0b3add54f44a0d4c7,用于唯一标识。 - 通信机制:预设 Web C&C 通道(IP:
10.10.10.10),支持 HTTP 协议接收远程指令及回传文件。 - 持久化策略:修改注册表键值
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run实现开机自启,文件落位于C:\RaDa\bin。 - 威胁行为:包括 SMURF DDoS 攻击发起、浏览器劫持、本地文件系统读写及桌面截图窃取。
- 分类结论:该样本属于 Backdoor(后门)与 Bot(僵尸客户端) 混合体。理由如下:
- 无自我复制传播特征,排除病毒;
- 无主动漏洞探测传播能力,排除蠕虫;
- 不伪装成系统合法组件,区别于传统间谍木马;
- 具备中心化管控能力与批量攻击潜力,符合僵尸网络节点定义。
![image]()
5. 对抗技术分析
样本主要采用 UPX 加壳技术阻碍逆向工作:
- 静态防御:代码段加密导致反汇编结果无效,无法直接获取逻辑。
- 动态防御:运行时优先执行 Shell 代码解密自身,掩盖真实入口点(OEP),增加调试断点追踪难度。
- 环境适配:依赖 VB6 虚拟机层与 COM 对象交互,增加了底层 API 调用的理解门槛。
![image]()
6. 相似家族工具对比
历史上功能类似的远控工具包括 Back Orifice、NetBus 以及 Poison Ivy、Gh0st RAT 等现代变种。它们在持久化驻留(注册表/服务)、HTTP/IRC 通信通道及文件操作权限上与 RaDa 高度一致。此外,Mirai 虽主要针对 IoT,但其中枢化 C&C 架构与此类 Windows 版 Bot 具有逻辑共性。
7. 开发者身份溯源条件
若要在无源代码环境下获取作者信息,需满足以下条件:
- 完成 UPX 解包操作。
- 使用命令行参数启动:运行
RaDa.exe --authors可直接响应作者列表。 - 静态检索:在 IDA 字符串视图中寻找硬编码的姓名字符串。
- 动态监控:利用过程监控工具(如 Process Explorer)捕获启动时的标准输出流。
三、CrackMe 逆向工程实战
在独立实验环境中解析两个逆向挑战程序(crackme1.exe, crackme2.exe)。
1. crackme1.exe 分析
静态加载后发现关键校验逻辑。程序接受命令行第一个参数,并与内部常量进行比较。成功触发分支的条件是输入字符串必须完全匹配:
I know the secret
执行验证命令:
crackme1.exe "I know the secret"
程序输出成功提示信息。
![image]()
2. crackme2.exe 分析
该程序逻辑更为复杂,涉及多重前置条件:
- 参数检查:若无命令行参数,提示
I think you are missing something. - 文件名校验:进程名必须重命名为
crackmeplease.exe,否则报错I have an identity problem. - 口令比对:若上述步骤通过,则比对参数是否等于
I know the secret。
最终成功验证的输出为:
We have a little secret: Chocolate
![image]()
四、僵尸网络流量取证分析
基于 Snort 采集的蜜罐日志(含 5 天数据),针对内网 IP 172.16.134.191 进行深度流量回溯。
1. IRC 协议基础
IRC(Internet Relay Chat)是应用层协议,主要用于即时通讯。连接服务器需建立 TCP 连接,典型端口为 194/TCP 或 6667/TCP(SSL 封装为 6697)。加入网络流程包含发送 NICK 指定昵称及 USER 注册身份信息,服务器返回 RPL_WELCOME 即完成握手。
![image]()
2. 蜜罐 C&C 服务器定位
设定筛选规则捕获来自受害主机的出站 IRC 流量:
ip.src == 172.16.134.191 && tcp.dstport == 6667
分析结果显示蜜罐连接了五个外部 IRC 节点,其中包括 209.196.44.172。
![image]()
3. 僵尸规模统计
为了计算特定服务器下的受控机器数量,使用 tcpflow 分离会话流量,并解析频道成员列表(353 RPL_NAMREPLY):
cat IRC_log.txt | grep "^:irc5.aol.com 353" | \ sed "s/^:irc5.aol.com 353 rgdiuggac @ #x[^x]*x ://g" | \ tr -d "\15\n" | sort -u | wc -l
经计算,该服务器下共识别出 3461 个活跃主机 ID。
![image]()
4. 攻击源 IP 识别
提取所有访问蜜罐的源 IP 并进行去重统计。使用 wc -l 计数后确认共有 165 个不同 IP 曾向 172.16.134.191 发起过尝试性连接或攻击载荷,例如 2.252.61.161 等。
![image]()
5. 漏洞利用排查
分析蜜罐对外发起的连接请求目标端口分布,发现主要集中在 TCP 的 135, 139, 25, 445, 4899 等高危端口。
![image]()
6. 入侵成败判定
深入审查各端口的数据包载荷:
- 端口 135/139/25:仅检测到连接握手或 FIN 包,未发现有效 Payload,属探测失败。
- 端口 445:数据包 33280 号载有
PSEXESVC.EXE,且存在 SMB Admin$ 路径认证成功的证据,判定入侵成功。 - 端口 4899:连接建立中断,未形成有效指令通道,失败。
- 端口 80:检测到长填充字符串与溢出攻击特征,但未明确是否获得控制权。
![image]()
五、环境配置备注
在进行流量分析时需注意实验环境的工具兼容性。若宿主机为旧版 Windows XP,通常未预装 Wireshark 抓包工具。建议将 PCAP 文件传输至 Kali Linux 环境进行可视化分析,以确保数据包解析功能的完整性。