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

说明:根据要求,本次实验所有操作截图的主机名均已设置为本人姓名拼音首字母(主要是做完实验后才发现有些截图里面没体现学号姓名T—T 😦 )。

Kali虚拟机主机名:Wxy-kali-attacker

Windows虚拟机主机名:Wxy-win10

图0-1 Kali主机名与whoami命令截图

图0-2 Win10主机名与whoami命令截图

1. 基础知识

本次实验主要涉及以下基础知识:

  1. PE文件与加壳技术:PE(Portable Executable)是Windows下的可执行文件格式。恶意代码常通过加壳(如UPX)压缩或加密自身,改变入口点(EP),以逃避杀毒软件的特征码查杀和逆向分析。脱壳是逆向的第一步。
  2. 逆向工程基础:利用IDA Pro等工具,将二进制机器码转换为汇编代码或流程图(Graph View),通过分析字符串(Strings)和关键API函数(如strcmp比较函数、URLDownloadToFile网络下载函数),推断程序逻辑。
  3. 恶意代码特征与分类:了解后门程序(Backdoor)、僵尸网络客户端(Bot)的区别。僵尸网络通常通过IRC协议或HTTP协议与C2(命令与控制)服务器通信。
  4. 取证分析基础:IRC协议(Internet Relay Chat)是早期的即时通讯协议,常用TCP 6667端口,僵尸网络常利用其进行指令下发。掌握Wireshark过滤语法(如 tcp.port == 6667)、tcpdump 及 tcpflow 等流量提取工具的使用。

2. 实验内容

本次实验包含四个主要任务:

  1. 对rada恶意代码样本进行文件类型识别、脱壳与字符串提取,寻找编写作者。
  2. 使用IDA Pro静态分析crackme1.exe与crackme2.exe,寻找正确的特定输入以输出成功信息。
  3. 分析rada恶意代码样本,回答关于其基本信息、目的、特性、反分析技术、分类及检测方法等8个问题。
  4. 对Snort收集的蜜罐主机(172.16.134.191)网络数据源进行取证分析,找出IRC通信地址、僵尸网络主机数量、攻击IP及利用的安全漏洞。

3. 实验过程

3.1 任务一:rada文件类型标识、脱壳与字符串提取

(1)文件格式与加壳识别

在Kali中执行 file RaDa.exe 命令,识别出该文件为 PE32 executable for MS Windows 4.00 (GUI), Intel i386, 3 sections。

在Windows虚拟机中使用PEiD工具打开原文件,识别出加壳工具为 UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo。

图1-1 file命令识别结果

图1-2 PEiD识别加壳结果

(2)脱壳处理 在Windows虚拟机中使用“超级巡警之虚拟机自动脱壳器 V1.3”对 RaDa.exe 进行脱壳,成功输出脱壳文件。再次使用PEiD检查脱壳后的文件,显示无壳。

图1-3 超级巡警脱壳成功

图1-3(补充)PEiD检查脱壳后的文件,识别为Microsoft Visual Basic 5.0 / 6.0

(3)字符串提取与作者定位 在Kali中先用 strings 提取原始 RaDa.exe,发现大量乱码,证明加壳状态下关键字符串被隐藏。随后对脱壳文件执行 strings RaDa_unpacked.exe | grep -i -E "author|siles|perez|raul|david" 命令,成功提取出作者信息:(c) Raul Siles && David Perez。

图1-4 strings提取加壳文件(乱码)

图1-5 strings提取脱壳文件得到作者信息

3.2 任务二:crackme逆向分析

(1)crackme1.exe分析

首先进行黑盒测试:无参数或两个参数运行时提示 I think you are missing something.;带一个参数运行时提示 Pardon? What did you say?。说明程序需要1个参数。

在IDA中查看函数调用图,进入核心函数 sub_401280,查看流程图发现代码先比较参数个数,随后调用 strcmp 与字符串 I know the secret 进行比较。相等则输出成功提示。

图2-1 crackme1黑盒测试结果

图2-2 IDA函数调用图

图2-3 IDA流程图显示strcmp逻辑

图2-4 crackme1验证输入成功截图

(2)crackme2.exe分析 在IDA的Strings窗口中发现了 crackmeplease.exe 和 I know the secret。查看流程图发现程序有两次 strcmp:第一次比较 argv[0](程序名)是否为 crackmeplease.exe,第二次比较输入参数是否为 I know the secret。因此,将程序重命名为 crackmeplease_你的学号.exe(注:为匹配程序内部判断,实际复制时命名为 crackmeplease.exe 放在桌面临时测试),并执行验证,成功输出隐藏信息。

图2-5 crackme2的Strings窗口

图2-6 crackme2的IDA双重判断逻辑

图2-7 crackme2验证成功截图

3.3 任务三:rada恶意代码深度分析

(1)基本信息摘要

  • MD5值:caaa6985a43225a0b3add54f44a04c7E(可能因计算工具不同有细微差异,以实际为准)
  • SHA256值:13c2379e9d9f679396e21a3391804cc834892f25691381b6d078d07b56d38f90
  • 文件类型:PE32 可执行文件 (GUI)

图3-1 md5sum与sha256sum计算截图

(2)目的与行为特性 通过IDA逆向脱壳后的文件,在代码中发现大量VB6特有函数(如vbaStrCopy)及相关字符串。程序试图访问 http://10.10.10.10/RaDa 以及 download.cgi、upload.cgi 等路径,说明其具备网络通信、下载更新指令、上传文件的功能。同时,代码中对 HKLM\Software\Microsoft\Windows\CurrentVersion\Run 注册表项进行写入操作,指向 C:\RaDa\bin 目录下的 RaDa.exe,目的是实现开机自启动。

图3-2 IDA发现网络请求与路径

图3-3 IDA发现注册表修改与自启动

(3)反分析技术

该样本采用了UPX加壳以对抗静态分析,增加初步研判难度;并且部分字符串可能进行了混淆或加密。

(4)分类

属于后门木马 / 僵尸网络客户端(Bot)。理由:主要行为是驻留系统、通过HTTP协议接收C2服务器指令实现远程控制,并非自我复制传播的病毒。

(5)作者调查

可以调查出。在未去除元数据且静态字符串未强加密的情况下,通过脱壳提取硬编码信息(如 Raul Siles && David Perez)是最直接的条件。

(6)相似工具

具有类似后门与远控功能的工具包括:Back Orifice (BO2K)、NetBus、Sub7、灰鸽子等。

(7)检测方法(至少5种)

  1. 特征码检测:提取恶意代码的唯一URL特征(如download.cgi)或Hash值,加入杀软特征库。
  2. 注册表行为监控:使用Sysmon等工具监控对 ...CurrentVersion\Run 的异常写入。
  3. 网络流量检测:在网关处配置规则,拦截局域网主机对不明IP的 10.10.10.10/RaDa 特征请求。
  4. PE节区检测:检测.exe文件是否具有UPX壳特征(如节区名UPX0、UPX1,或熵值极高)。
  5. 沙箱动态分析:将样本丢入Cuckoo等沙箱运行,观察其是否有创建C:\RaDa目录、发起HTTP请求的行为。

3.4 任务四:取证分析实践

(1)IRC基础知识

IRC(Internet Relay Chat)是一种应用层协议。客户端申请加入网络时发送 NICK 消息设定昵称。一般使用 6667 等TCP端口。

(2)僵尸网络基础

僵尸网络是由攻击者通过恶意软件控制的一群联网计算机,常用于发起DDoS攻击、发送垃圾邮件、窃取信息等。

(3)蜜罐通信的IRC服务器

在Wireshark中过滤 ip.src == 172.16.134.191 && tcp.dstport == 6667 && tcp.flags.syn == 1,可看到蜜罐与 209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10、209.196.44.172 等服务器进行了通信。

图4-1 Wireshark过滤IRC服务器

(4)访问特定僵尸网络的主机数 使用 tcpflow 提取出与 209.196.44.172 通信的数据流,通过 grep 提取 353 消息(用户列表),结合 sed、sort、wc -l 统计,最终得到 3461 个不同的主机。

图4-2 tcpflow与统计命令结果3461

(5)攻击蜜罐的IP数量 使用 tcpdump 读取pcap包,过滤目的地址为 172.16.134.191 的流量,使用 awk 和 cut 提取源IP并去重统计,发现共有 165 个不同的主机访问了蜜罐。

图4-3 tcpdump统计攻击IP结果165

(6)与(7)攻击的安全漏洞及成功情况

通过 tcpdump 抓取蜜罐的响应包(SYN+ACK)及UDP响应,发现开放了 135、139、25、445、4899、80、137 等端口。

其中,445端口(SMB)的攻击很可能成功了。在Wireshark中过滤 tcp.port == 445,可以看到攻击者(195.36.247.77)与蜜罐进行了深度的SMB交互,包括 Negotiate Protocol、Session Setup 以及 NT Create AndX Request 等,这通常意味着攻击者通过445端口(可能是利用MS08-067漏洞或弱口令爆破)成功建立了会话,甚至可能上传了木马文件。

图4-4 Wireshark分析445端口深度交互

图4-5 tcpdump统计开放端口


4. 问题及解决方案

  • 问题:在IDA中尝试按空格键切换流程图失败,View -> Graphs 菜单呈灰色不可用状态。

    • 解决方案:经过检查左上角的标签页,发现此时处于 Hex View-A(十六进制视图)中。在该视图下无法呼出流程图。切换到 IDA View-A 标签页,光标点击反汇编代码区域后,再按空格键,成功打开流程图。

    问题截图:当前处于Hex View-A,View -> Graphs菜单中的流程图选项呈灰色

5. 学习感悟、思考等

通过本次实验,我将理论知识落地到了实际攻防对抗中。

首先,在恶意代码分析部分,我深刻体会到了“加壳”对于逆向分析的阻碍作用。面对原文件跑出来的满屏乱码,一旦通过超级巡警成功脱壳,关键信息(如作者、网络请求地址)就无处遁形。这让我明白,防守方在分析样本时,脱壳是必不可少的破局点。

其次,在crackme的逆向中,一开始我非常依赖动态调试,后来发现IDA的流程图功能极其强大。只要静下心来看懂 cmp 和 strcmp 前面的参数来源,逻辑其实很清晰。另外,像crackme2这种不仅校验参数还校验文件名的小把戏,非常考验逆向时的细心程度。

最后,僵尸网络的取证分析让我直观感受到海量数据中隐藏的安全威胁。仅仅5天的流量,就暴露了165个攻击IP和上千个被感染的肉鸡。使用 tcpdump、tcpflow 配合 awk、grep 这种命令行管道处理二进制流量包的方法,极大地提升了我的数据分析效率。网络安全不仅仅是写代码,更是海量日志下的抽丝剥茧。

😃

参考资料

  • 《恶意代码分析实战》 - Michael Sikorski / Andrew Honig
  • IDA Pro 反汇编与逆向分析 - 看雪论坛
  • Wireshark 数据包分析实战 - Chris Sanders