20242419 2026-2027-1 《网络与系统攻防技术》实验4实验报告

20242419 2026-2027-1 《网络与系统攻防技术》实验4实验报告

姓名:陈贻富
学号:20242419
班级:2424


1. 基础知识

本次实验主要涉及以下几方面基础内容:

  • PE 文件结构:PE(Portable Executable)是 Windows 平台下的可执行文件格式,包含 .text、.data、.rsrc 等节区。通过分析 PE 头可以判断文件类型、运行平台等信息。
  • 加壳与脱壳:加壳是利用 UPX 等工具对原始代码进行压缩或加密,以隐藏真实逻辑、增加逆向难度。脱壳则是还原原始代码的过程,常见方法包括使用专用脱壳工具或手动修复被篡改的壳头。
  • IDA Pro 静态分析:IDA Pro 是一款交互式反汇编工具,支持 Graph View 查看程序控制流,常用于分析程序分支、字符串比较等关键逻辑。
  • 字符串提取:通过 strings 等工具从二进制中提取可打印字符,可快速获取程序中的 URL、注册表路径、作者信息等关键线索。
  • IRC 协议与僵尸网络:IRC(Internet Relay Chat)是一种基于 TCP 的即时聊天协议,常被用于控制僵尸网络。僵尸网络(Botnet)是被恶意程序感染并由攻击者集中控制的主机集群。
  • 网络流量取证:使用 Wireshark、tcpflow、tcpdump 等工具对网络数据包进行过滤、重组和统计,从中发现攻击行为与通信特征。

2. 实验内容

本次实验共包括四个部分:

  1. 对 RaDa.exe 恶意代码样本进行文件类型识别、脱壳与字符串提取,找出作者信息。
  2. 使用 IDA Pro 对 crackme1.exe 与 crackme2.exe 进行静态分析,寻找正确输入使其输出成功信息。
  3. 分析自制恶意代码样本 RaDa,回答关于样本摘要、目的、特性、反分析技术、分类、相似工具、作者追溯及检测方法等问题。
  4. 基于 Snort 收集的蜜罐 5 天网络流量,进行僵尸网络相关取证分析。

3. 实验过程

3.1 恶意代码文件类型识别、脱壳与字符串提取

(1)文件类型与加壳识别

在 Kali 终端中使用 file 命令查看样本:

file RaDa.exe

输出显示该文件为 PE32 executable (GUI) Intel 80386,运行平台为 Windows。随后将样本传入 Windows 靶机,使用 PEiD 进行查壳,结果显示该样本使用了 UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo 加壳。

贴图01_PEiD查壳

(2)脱壳处理

尝试使用命令行 upx -d RaDa.exe 进行脱壳时失败,提示文件头被修改(file is modified/hacked/protected)。因此改用 Windows 下的专用脱壳工具对样本进行处理,最终得到脱壳后的文件 rada_dump_.exe(见下图)。

贴图02_脱壳生成文件

(3)字符串提取与作者信息

在 Kali 中对脱壳后的样本使用 strings 命令提取字符串,并过滤关键信息:

strings rada_dump_.exe | grep -i "Raul"

输出结果中明确出现:

(c) Raul Siles && David Perez
Authors: Raul Siles & David Perez, 2004
Copyright (C) 2004 Raul Siles & David Perez

由此可以确定,RaDa 恶意代码的编写作者为 Raul Siles 和 David Perez。

贴图03_strings提作者


3.2 使用 IDA Pro 分析 crackme

(1)crackme1.exe 分析

将 crackme1.exe 拖入 IDA Pro,切换到 Graph View 查看主函数逻辑。发现程序将输入参数与字符串 "I know the secret" 进行比较,调用 _strcmp 后根据结果跳转。若比较成功,则输出成功信息。

在 CMD 中运行:

crackme1.exe "I know the secret"

程序输出:

You know how to speak to programs, Mr. Reverse-Engineer

下面第一张为 IDA Pro 中 strcmp 比较与成功分支的汇编逻辑,第二张为 CMD 中的运行结果:

贴图04a_crackme1_IDA

贴图04b_crackme1_CMD

(2)crackme2.exe 分析

crackme2.exe 的逻辑比第一个复杂一些。除了比较输入字符串是否为 "I know the secret" 之外,程序还会检测自身文件名是否为 crackmeplease.exe。因此需要先将程序复制并重命名:

copy crackme2.exe crackmeplease.exe
crackmeplease.exe "I know the secret"

程序输出:

We have a little secret: Chocolate

第一张为 IDA 中检测自身文件名是否为 crackmeplease.exe 以及比较密码的流程图,第二张为改名后运行的输出结果:

贴图05a_crackme2_IDA

贴图05b_crackme2_CMD


3.3 分析自制恶意代码样本 RaDa

(1)二进制文件摘要

  • 样本名称:RaDa.exe
  • MD5 哈希值:caaa6985a43225a0b3add54f44a0d4c7
  • 文件格式:PE32 可执行文件(GUI)
  • 运行平台:Windows
  • 加壳工具:UPX(文件头被篡改)
  • 开发语言:Visual Basic 6.0(样本中大量引用 MSVBVM60.DLL 与 __vba* 函数)
  • 公司名:Malware
  • 作者信息:Raul Siles & David Perez

使用 certutil 计算样本 MD5 的结果如下:

贴图06_MD5

(2)文件目的

通过对脱壳后样本的字符串提取以及运行时的行为监控,可以判断该程序的主要目的包括:

  • 连接远程控制服务器 http://10.10.10.10/RaDa,通过 cgi-bin/download.cgi 和 upload.cgi 实现文件下载与上传。
  • 修改注册表启动项 HKLM\Software\Microsoft\Windows\CurrentVersion\Run\,将自身加入开机启动,实现持久化驻留。
  • 将程序文件释放到 C:\RaDa\bin\RaDa.exe 并运行。
  • 具备 DDoS 攻击能力,字符串中出现 Starting DDoS Smurf remote attack...。

贴图07_ProcessExplorer
image
说明:太长了,截不完。

(3)不同特性

  • 远程控制:可连接 C2 服务器接收指令。
  • 文件上传/下载:通过 HTTP POST 和 multipart/form-data 实现。
  • 注册表持久化:写入系统启动项,开机自动运行。
  • 进程/窗口隐藏:包含 Visible、Top、Left、Width、Height 等 GUI 属性,可能用于隐藏界面。
  • DDoS 攻击:支持 Smurf 攻击。
  • 屏幕截图:包含 screenshot 字符串,可能具备截屏功能。
  • 网络适配器信息收集:通过 WMI 查询 Win32_NetworkAdapterConfiguration 获取 MAC 地址等信息。

(4)防分析或逆向工程技术

  • UPX 加壳:对原始代码进行压缩,增加静态分析难度。
  • 文件头篡改:修改 UPX 标志,使标准 upx -d 脱壳失败。
  • 字符串混淆:部分字符串以 VB 运行时调用方式组织,直接查看不易理解。
  • 使用 VB6 编写:依赖 MSVBVM60.DLL,反汇编后代码较为冗长,增加阅读成本。

(5)分类及理由

将该样本归类为 后门木马(Backdoor / Trojan)。理由如下:

  • 程序具有远程控制、文件上传下载、注册表持久化等典型后门行为。
  • 未发现自我复制或感染其他文件的代码,不符合病毒(Virus)特征。
  • 未通过网络主动扫描和传播其他主机,不符合蠕虫(Worm)特征。
  • 虽具备 DDoS 功能,但其核心定位是受控端木马,因此归为后门木马更合适。

(6)相似功能的其他工具

  • Metasploit Framework:可生成各类后门 payload,如 msfvenom。
  • Cobalt Strike:商业红队工具,具备 C2 控制、持久化、横向移动等功能。
  • Gh0st RAT:国产远程控制木马,具备文件管理、屏幕监控、键盘记录等功能。
  • Poison Ivy:经典远程访问木马,支持插件扩展。
  • DarkComet:具有远程桌面、摄像头监控、键盘记录等功能的 RAT。

(7)开发作者调查

可以调查出开发作者。前提是样本必须经过脱壳处理,且其中的字符串未被二次加密。在本实验中,脱壳后使用 strings 工具即可直接提取到明文信息:

Copyright (C) 2004 Raul Siles & David Perez
Authors: Raul Siles & David Perez, 2004

因此,在以下条件下可以确定作者:

  • 获取到原始样本或脱壳后的样本;
  • 样本中未对字符串进行额外加密或混淆;
  • 使用字符串提取工具即可直接读取。

(8)检测该恶意软件的至少 5 种方法

  1. 基于特征码的检测
    提取样本中的标志性字符串(如 Raul Siles、10.10.10.10/RaDa、Starting DDoS Smurf remote attack、HKLM\Software\Microsoft\Windows\CurrentVersion\Run\RaDa)或特定字节序列,作为杀毒软件或 IDS 的特征规则。当文件或流量中出现匹配内容时即告警。

  2. 基于行为的检测
    通过终端安全软件监控程序运行行为。若发现程序尝试写入 C:\RaDa\ 目录、修改注册表启动项、连接可疑 IP 的 80 端口、创建 WMI 查询等异常操作,则判定为恶意行为。

  3. 沙箱动态分析
    在隔离虚拟机中运行样本,观察其文件操作、注册表修改、网络连接和进程行为。若样本释放可疑文件并尝试外联 C2 服务器,即可确认其恶意性。

  4. 网络流量检测(NIDS)
    在网关或关键节点部署 Snort/Suricata,监控是否存在主机频繁访问 10.10.10.10、HTTP 请求中包含 RaDa_commands.html 或 upload.cgi 等特征 URI。一旦命中规则,立即阻断并告警。

  5. 哈希/白名单校验
    计算样本的 MD5/SHA256 哈希值,与威胁情报库或企业内部白名单进行比对。若哈希命中已知恶意样本,或样本不在白名单中且出现在敏感目录,则触发告警。

  6. 内存取证检测
    对运行中主机进行内存转储,使用 Volatility 等工具查找是否存在 RaDa.exe 进程、异常的 VB6 运行时调用,以及与 10.10.10.10 相关的网络连接结构。


3.4 取证分析实践(Windows 2000 系统被攻破并加入僵尸网络)

(1)IRC 是什么?加入 IRC 网络时发送什么消息?常用哪些 TCP 端口?

IRC(Internet Relay Chat)是一种基于 TCP 的互联网中继聊天协议,支持多用户实时群聊和私聊。IRC 客户端加入网络时通常会发送 NICK(设置昵称)和 USER(注册用户信息)消息,随后发送 JOIN #频道名 加入指定频道。

常用 TCP 端口包括:

  • 6667:标准明文端口;
  • 6660 - 6669:部分服务器使用的备用端口;
  • 6697:SSL/TLS 加密端口。

(2)僵尸网络是什么?通常用于什么?

僵尸网络(Botnet)是指被恶意程序感染并被攻击者集中控制的大量主机所组成的网络。攻击者通过 C2 服务器向这些主机下达指令。

常见用途包括:

  • 发起 DDoS 攻击;
  • 发送垃圾邮件;
  • 挖矿(Cryptojacking);
  • 窃取敏感信息;
  • 传播其他恶意软件;
  • 作为跳板进行横向渗透。

(3)蜜罐主机与哪些 IRC 服务器进行了通信?

在 Wireshark 中使用过滤条件:

ip.addr==172.16.134.191 and (tcp.port==6667 or tcp.port==6697)

通过分析流量,发现蜜罐主机 172.16.134.191 与以下 IRC 服务器进行了通信:

  • 63.241.174.144
  • 217.199.175.10
  • 209.196.44.172

贴图08_Wireshark_IRC

(4)多少不同的主机访问了以 209.196.44.172 为服务器的僵尸网络?

在 Kali 中使用 tcpflow 提取 6667 端口流量,然后对服务器 209.196.44.172 的响应进行统计:

sudo apt install tcpflow-nox -y
tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667"
cat *06667* | grep -a "^:irc5.aol.com 353" | sed "s/^:irc5.aol.com 353 rgdiuggac @ #x[^x]*x : //g" | tr ' ' '\n' | tr -d "\15" | grep -v "^$" | sort -u | wc -l

其中 353 是 IRC 的 NAMES 响应,其后跟随频道内全部在线昵称;sed 用于剥掉服务器与频道前缀,tr 将空格拆分为一行一个昵称,最后去重计数。

统计结果为 3461 个不同的主机。

贴图09_tcpflow_3461

(5)哪些 IP 地址被用于攻击蜜罐主机?

使用 tcpdump 过滤目的 IP 为 172.16.134.191 的源 IP,并将结果保存到 20242419_attackers.txt 中:

tcpdump -r botnet_pcap_file.dat -nn 'dst host 172.16.134.191' | awk '{print $3}' | cut -d. -f1-4 | sort -u > 20242419_attackers.txt
wc -l 20242419_attackers.txt

去重统计后共得到 165 个外部源 IP,主要结论如下:

  • 来源高度分散:地址覆盖 4.x、12.x、24.x、61.x、63.x、207.x、216.x、202.x–219.x 等数十个网段,符合僵尸网络多主机协同攻击的分布特征。
  • 与 IRC 服务器交叉印证:列表中同时出现 63.241.174.144、217.199.175.10、209.196.44.172,正是 3.4(3) 中识别出的 IRC 服务器,说明蜜罐与这些服务器存在双向通信,与前面的僵尸网络判断相互对应。
  • 统计口径说明:该命令统计的是"所有向蜜罐发送过数据包的主机",因此也包含 207.46.196.108、207.68.171.238 等微软地址,它们多为蜜罐正常访问后收到的回包,并非攻击者。

贴图10_攻击源IP

(6)攻击者尝试攻击了哪些安全漏洞?

通过 Wireshark 的端点统计功能,发现攻击流量主要集中在以下端口:

端口 服务 说明
80 HTTP Web 服务攻击或恶意下载
135 RPC 远程过程调用
139 NetBIOS SMB 会话服务
445 SMB 文件共享服务
4899 Radmin 远程管理软件

这些端口多对应 Windows 系统常见的高危服务,攻击者可能尝试利用相关漏洞进行入侵。

贴图11a_端点统计_80

贴图11b_端点统计_445等

📸 待补图(贴图11c_端点统计_4899.png):此处应插入端点统计中端口 4899(Radmin)的截图。本地图片位于 实验四截图\贴图11c_端点统计_4899.png,上传图床后请把本行替换为图片链接(当前这里重复用了贴图11a,已移除)。

(7)哪些攻击成功了?如何成功的?

通过追踪 445 端口的 TCP 流,发现 SMB 相关攻击成功。关键证据包括:

  • 存在 SMB Write AndX Request 和对应的 Write AndX Response;
  • 出现 NT Create AndX Request, Path: \svcctl;
  • 后续出现 DCERPC Bind_ack: ... Acceptance。

这说明攻击者不仅成功向蜜罐主机写入了文件,还通过 SMB 创建了服务控制管道(svcctl),并完成 RPC 绑定,最终获取了系统控制权,使主机加入了僵尸网络。

贴图12_SMB攻击成功


4. 问题及解决方案

  • 问题 1:在 Kali 中直接使用 upx -d RaDa.exe 脱壳失败,提示 file is modified/hacked/protected。

    • 解决方案:该样本的 UPX 文件头被作者恶意修改,导致标准命令无法识别。改用 Windows 下的专用脱壳工具处理后成功脱壳,生成了可分析的 rada_dump_.exe。
  • 问题 2:运行脱壳后的 RaDa 样本时出现 Error 70: Permission denied。

    • 解决方案:该程序需要较高权限才能修改注册表和系统目录。在 Windows 中右键选择"以管理员身份运行"后,程序成功执行,并可通过 Process Explorer 监控到其行为。
  • 问题 3:在 Kali 中执行 tcpflow 命令时提示 Command not found。

    • 解决方案:Kali 默认未安装该工具。执行 sudo apt install tcpflow-nox -y 完成安装后,重新提取流量并统计,成功得到 3461 个不同主机的结果。

5. 学习感悟、思考等

通过这次实验,我对恶意代码分析的全流程有了更具体的认识。从最开始用 file 和 PEiD 识别文件类型与加壳方式,到遇到 UPX 头被篡改后改用专用工具脱壳,再到用 strings 直接捞出作者信息,整个过程让我体会到逆向分析既需要工具积累,也需要根据报错灵活调整思路。

IDA Pro 分析两个 crackme 的过程相对顺利,但也让我意识到静态分析时要特别关注字符串比较和文件名检测这类"人为关卡"。crackme2.exe 对文件名的限制就是一个典型例子,说明有时候程序的判定条件不止输入内容本身。

在分析 RaDa 样本时,看到字符串里直接出现远程控制 URL、注册表路径、DDoS 功能描述甚至作者名字,让我感受到早期恶意代码的"粗糙"与"嚣张"。同时这也说明,脱壳和字符串提取在应急响应中是非常高效的初筛手段。

最后的 Wireshark 取证部分最有成就感。面对几天的蜜罐流量,一开始感觉无从下手,但通过逐步过滤 IRC 端口、追踪 SMB 流、定位 svcctl 创建过程,最终能够还原出攻击者成功入侵的证据链。这种从海量数据里抽丝剥茧的过程,让我对网络取证有了更深的理解。

总的来说,实验过程中遇到的报错和失败反而让我印象更深刻。网络安全这门课不能只停留在理论上,必须多动手、多查资料、多尝试不同的工具组合,才能真正形成分析能力。


参考资料

posted @ 2026-11-02 22:45  陈贻富  阅读(3)  评论(0)    收藏  举报