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

1.实验内容


基本实验内容如下:

  • 恶意代码文件类型标识、脱壳与字符串提取
  • 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息
  • 分析一个自制恶意代码样本rada,并撰写报告,回答问题
  • 进行取证分析实践

实验要求回答问题及解答:
具体问题以及回答见后文。


2.实验过程

总共4个任务,每个任务下分数个小问,如下:
(1)恶意代码文件类型标识、脱壳与字符串提取
(2)使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息
(3)分析一个自制恶意代码样本rada,并撰写报告,回答问题
(4)进行取证分析实践

我们一个一个来看。

(1)恶意代码文件类型标识、脱壳与字符串提取

对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者。
00cbd6bd2699bca049af34772cec23c0
实验开始前,在windows主机上准备好工具,在kali机上准备好RaDa.exe文件。

(1.1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具

输入file RaDa.exe查看文件格式和运行平台,如下:
fd0a94d34873fbd373f6dfe8d6aedd5d
结果表明RaDa.exe是一个32位Windows GUI可执行文件,是一个带有图形用户界面的应用程序。它是针对Intel x86处理器设计的,内部包含3个段。
接着在在Windows下使用PEiD对RaDa.exe分析,如下:
265cfedbe30cc9104ffb4b8dc45d7872
可以看到,该文件使用了UPX加壳,Markus & Laszlo是该UPX的开发者。

(1.2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;

结果如下:
76c3e1efbd88b633644fda3bf175ac07
我们得到了一个脱壳后的exe文件,如下:
37ab289ef75bcd3722d3df179944ab70

(1.3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁

由于我的电脑无法正常使用IDA Pro,本次实验我使用Win7虚拟机运行IDA Pro。
使用IDA Pro分析我们脱壳后的RaDa_unpacked.exe,查看IDA View-A,在JDR0:00403F7A处可以知道RaDa文件的作者信息,为Raul Siles&&David Perez:
7bbd1315058193bb545402b1dbea18b1
在地址为00403FD4处可以看到RaDa文件的创作时间,为2004年9月。
050c1ec46b156fa893a6618e7793685e

(2)使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。

(2.1)分析crackme1.exe

先尝试运行试试,简单输入几个参数。
24440e3354eeabe978e880de6093c4f1
可以看到发现当输入额外的参数不唯一时,文件给出提示“I think you are missing something.”,当输入1个参数时,文件提示“Pardon? What did you say?”。
可以推测,该文件需要我们输入一个正确的参数。
在IDA Pro中打开文件crackme1.exe,选择View→Graphs→Function calls,打开该文件的函数调用图:
在函数调用图中,我们可以看到函数sub_401280会调用strcmp用于字符串比较的库函数以及fprintf、printf等涉及IO的库函数,
说明sub_401280函数可能会对接收的参数进行比较判断,并输出相应语句。
efeeb90284cc6c916a69cf7d0fa249d8
我们在IDA Pro中找到函数管理窗口,双击需分析的函数sub_401280查看详细情况:
0a28a16e48a16bbb18943fb029c7663d
可以知道当程序得到输入时,如果输入参数为“I know the secret”,则程序给出输出“You know how to speak to programs, Mr. Reverse-Engineer”
c5d6e49f9846e7c6925810759bd7fb66
3bffffb49136af0ba2e2d105d60748e1
输入的参数不对时,该程序将给出输出“I think you are missing something.”
所以我们需要输入的参数为字符串“I know the secret”,即可得到成功信息:
2e7401861cdc6602e02b24a05582bd72

(2.2)分析crakeme2.exe

同样的,先尝试运行试试,简单输入几个参数。
25f8b58edc14853794994106c5a2dadf
回情况大体与crackme1.exe相似.但输入额外参数为“I know the secret”时,仍然无法验证通过,说明还需寻找适合文件二的正确参数。
我们查看函数调用图,发现函数sub_401280会调用strcmp、fprintf、puts、putchar等可疑的库函数,说明sub_401280函数可能仍是对接收的参数进行比较判断的函数。:
ba880e454b01f94a6192f1e9287cde60
同样的,在IDA Pro中找到函数管理窗口,双击需分析的函数sub_401280查看详细情况:
62fc2caae7c0473c5ad6b2165361dd3a
可以看到,除crackme1所具有的比较内容外,crackme2还对输入的第一个参数进行了比较,要求其为“crackmeplease.exe”。
所以我们需要将该文件的文件名修改为crackmeplease.exe再运行即可。
a41ae3b290b489b0860be41cc310052a

(3)分析一个自制恶意代码样本rada,并回答问题

(3.1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;

输入以下命令获取基本信息,包括运行平台、md5校验和以及时间戳。

file RaDa.exe
md5sum RaDa.exe
exiftool RaDa.exe | grep "Time Stamp"

f4574fee4666fc7d5df979d60b1c51b5

(3.2)找出并解释这个二进制文件的目的

查看函数调用图,发现函数sub_404FB0下有很多的子函数,可以分析该函数的流程图以获取更多信息。
c3cd98a81c1e8ba6d94eb475d897a20f
我们去查看sub_404FB0的流程图来获取信息,如下:
22ec17b7154c9c7f6eea471f4bf7fb9c
这里的mov edx, offset aHttp10_10_10_1;"http://10.10.10.10/RaDa"
指的是将地址http://10.10.10.10/RaDa加载到edx寄存器。
后续所有的下载指令、上传数据都会与这个服务器通信。
8ab49a2239f47a98ed0a1aeb6f807cc0
对于这四条命令

mov edx, offset aRada_commands_ ; "RaDa_commands.html" 
mov edx, offset aCgiBin ; "cgi-bin"
mov edx, offset aDownload_cgi ; "download.cgi"
mov edx, offset aUpload_cgi ; "upload.cgi"

它们连续调用了字符串拼接函数并将四个字符串复制到内存中。
其中RaDa_commands.html可能是攻击者用来下发指令的网页文件。cgi-bin可能是Web服务器上存放脚本的通用目录。
download.cgi可能是用于下载新指令或恶意模块的脚本。upload.cgi可能是用于上传窃取数据的脚本。
这四条使得这个恶意文件具备了双向通信能力。
42ca107c855b9e9f5e7deefa840c4457
对于命令mov edx, offset aCRadaTmp ; "C:\\RaDa\\tmp",
表示恶意软件在C盘根目录下创建一个名为RaDa的文件夹,并在其中创建一个名为tmp的子文件夹,存放下载的临时文件或窃取的数据。
46b98d2e97453977212013dd109e51fb
对于命令offset aSoftwareMicros ; "Software\\Microsoft\\Windows\\CurrentVersion"
表示该文件通过HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run修改注册表路径,将自身添加为开机自启动项,确保每次开机自动运行。
db484c805e78290f1f4f9e2b68a9bc1f
对于命令mov edx, offset aCRadaBin ; "C:\\RaDa\\bin"
表示"C:\RaDa\bin"复制到内存。随后连续调用两次字符串拼接函数,得到完整的可执行文件路径“C:\RaDa\bin\RaDa.exe”。这个路径将被用于保存自身的文件并完成开机自启动配置。

(3.3)问题回答

  1. 找出并解释这个二进制文件的目的
    从上面的分析不难看出,这个程序是一个为了维持远程持久控制而制作的后门程序。它会开机自启动,同时有窃取数据、下载新的恶意指令等功能。
  2. 识别并说明这个二进制文件所具有的不同特性
  • 具有UPX压缩壳;
  • 具备长期远程控制能力,通过开机自启动,动态动态创建工作目录等方式维持控制;
  • 能够与服务器进行通信,下载后续恶意代码。
  1. 识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
    该文件采用了UPX加壳技术,它通过压缩原始代码和劫持入口点隐藏程序逻辑。

  2. 对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
    计算机病毒需要依附于其他程序才能传播,主要目标是传播和破坏;
    蠕虫则是独立运行的恶意程序,无需用户干预即可通过网络自动传播;
    这个代码不属于上面两者,是一个远程控制软件,目标是长期潜伏并窃取控制权。

  3. 给出过去已有的具有相似功能的其他工具
    灰鸽子。

  4. 可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下
    该二进制文件的开发者是Raul Siles && David Perez。
    需要作者在创作时留下此类信息,同时该文件还需要以明文的形式展示。

  5. 给出至少5种检测该恶意软件的方法,例如基于特征码的方法,详细介绍每种方法

  • 特征码检测
    特征码检测是传统的恶意软件检测方法,通过将文件中的特定代码片段(如二进制序列、函数调用)与已知恶意软件的特征数据库进行比对来识别威胁。
    这种方法依赖定期更新的病毒库,能高效准确地检测已知恶意软件,但无法应对零日攻击或变种病毒,因为只要恶意代码稍作修改(如加壳、混淆),特征码就会失效。
  • 启发式分析
    启发式分析不依赖固定特征码,而是通过分析程序的行为模式(如频繁修改注册表、尝试提权)或代码结构(如异常跳转指令、加密字符串)来评估其恶意可能性。
    这种方法能检测新型或未知威胁,但可能产生误报,因为某些合法软件(如系统优化工具)也可能表现出类似行为。
  • 行为监控(动态分析)
    行为监控在受控环境(如沙箱)中运行可疑程序,实时记录其行为(如文件操作、网络请求、进程注入)。如果程序表现出恶意行为(如勒索软件加密文件、远控木马外连C2服务器),则判定为恶意。
    这种方法能有效检测高级威胁,但可能被恶意软件的反沙箱技术规避(如检测虚拟环境后停止运行)。
  • 机器学习检测
    机器学习通过训练模型(如决策树、神经网络)学习海量样本的特征(如API调用序列、代码熵值、PE头信息),自动分类文件是否为恶意。
    它能适应新型攻击且减少人工干预,但依赖高质量训练数据,且可能被对抗样本欺骗(如轻微修改恶意代码绕过检测)。
  • 网络流量分析
    通过监控程序的网络通信(如域名解析、流量包内容、连接频率),识别与恶意服务器(如僵尸网络C2、钓鱼网站)的交互。例如,检测到程序频繁连接一个已知恶意IP或使用异常协议(如DNS隧道)即可判定为恶意。
    这种方法对远控木马和间谍软件有效,但无法检测无网络行为的恶意软件(如本地文件破坏型病毒)。

(4)取证分析实践

(4.1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?

IRC(Internet Relay Chat)是一种基于文本的实时聊天协议,允许多人在不同频道(聊天室)中交流。
当客户端申请加入IRC网络时,会发送PASS、NICK和 USER消息。
IRC通常使用6667(默认明文端口)、6697(SSL/TLS加密端口)。

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

僵尸网络是被黑客远程控制的一群感染了恶意软件的计算机(“肉鸡”),它们能执行攻击者的指令。
通常用于发动DDoS攻击、发送垃圾邮件、窃取数据或挖矿。

(4.3)蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?

我们在Wireshark中打开botnet_pcap_file.dat文件,通过命令ip.src==172.16.134.191 and tcp.dstport==6667,筛选源IP为172.16.134.191,目的端口为6667的数据包:
4a5c12100ad0718b5c4794925f6f9a20
可以看到蜜罐主机与IP地址为209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10的IRC服务器进行了通信。

(4.4)在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?

把botnet_pcap_file.dat传输到我们的kali界面中,输入botnet_pcap_file.dat "host 209.196.44.172 and port 6667"
筛选出与IP为209.196.44.172且端口为6667的主机相关的所有TCP流量数据,如下:
70aa3fd4e6b69fea625a38a2d403a1ac
在僵尸网络场景中,受感染的主机会主动连接C&C服务器。因此,要识别这些受感染主机,
应该在网络流量日志中查找目标IP为C&C服务器IP(209.196.44.172)的连接记录,并从这些记录中提取源IP,这些就是受感染主机的IP地址。
对提取的源IP进行去重计数,即可统计出僵尸网络的规模。
输入cat 209.196.044.172.06667-172.016.134.191.01152 | 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
精确统计访问僵尸网络服务器的不同客户端数量,结果如下:
d611906d1ac0ee51a76c12b3a6469b49
从返回数据可知,共有3461台不同的主机访问了以209.196.44.172为服务器的僵尸网络。

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

输入tcpdump -n -nn -r botnet_pcap_file.dat 'dst host 172.16.134.191' | awk -F " " '{print $3}' | cut -d '.' -f 1-4 | sort | uniq | more > 20232313.txt;wc -l 20232313.txt
查看输出的20232313.txt文件,即可查看详细数据,可以看到共有165个IP地址被用于攻击蜜罐主机。
837fa5e95a8489494df0a3d56165924f

(4.6)攻击者尝试攻击了那些安全漏洞?

不带wireshark过滤条件,在Wireshark上选择统计-->协议分级统计,分析网络流量中各种协议的分布情况和层次结构:
cbb89527762e278385290938ae051efa
可以看到攻击者大部分使用了TCP数据包(占比约99.7%),也有使用少量的UDP数据包(占比约0.3%)。
输入tcpdump -r botnet_pcap_file.dat -nn 'src host 172.16.134.191' and tcp[tcpflags]== 0x12 | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq
筛选主机172.16.134.191发起的所有TCP连接的源端口号如下:
f2e5ac6d85cf5fb6fe1625e0ba0ae43e
输入tcpdump -r botnet_pcap_file.dat -nn 'src host 172.16.134.191' and udp | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq
筛选主机172.16.134.191发送的所有UDP数据包的源端口号如下:
6f2218066f1e25e054f79c36f9ba03d9
对于TCP的分析结果可知,使用的端口有135(RPC,Windows远程过程调用)、139/445(SMB,Windows文件共享)、25(SMTP,简单邮件传输协议)、4899(Remote Administrator,远程控制软件)、80(HTTP,网页服务)。
对于UDP的分析结果可知,使用的端口为137(NetBIOS,Windows网络邻居功能)。

(4.7)那些攻击成功了?是如何成功的?

TCP连接的445端口、4899端口、80端口成功了。我们下面来分析原因。
(1)TCP连接135端口
输入ip.addr==172.16.134.191 and tcp.port==135
5059264dbbe5d9c4a2d319d202bced12
135端口只发现了三次握手的包,并且建立连接后客户端很快发送FIN请求断开连接。所以可以判断135端口未被利用。
(2)TCP连接139端口
输入ip.addr==172.16.134.191 and tcp.port==139
f30cfc0e85309c21c5fd53a7548dbf49
139端口建立了完整的三次握手,且攻击者尝试访问共享目录\PC0191\c,但服务器返回RST拒绝。
通过观察发现后续也没有恶意数据包的传输。所以可以判断139端口未被利用。
(3)TCP连接25端口
输入ip.addr==172.16.134.191 and tcp.port==25
9e4ce306ddc839b63d43636331a886d6
25端口建立了完整的三次握手,但接建立后服务器很快发送FIN,ACK请求断开连接。所以可以判断25端口未被利用。
(4)TCP连接445端口
输入ip.addr==172.16.134.191 and tcp.port==445
20c09118432779ae3a2157173a428512
外部主机195.36.247.77向172.16.134.191:445发起TCP三次握手,进行了NTLMSSP认证协商且通过认证,发起Tree Connect请求以访问共享资源。
此外,多个源IP向目标172.16.134.191:445发起大量SMB请求,其中包含了重复的NTLMSSP认证、Tree Connect到不同路径以及大量的SAMR/DCE/RPC操作,这可能是横向移动或扫描行为。
91e4444011dd1d1e7513c603064ba108
最后,攻击者通过445端口的SMB协议,成功删除了目标主机172.16.134.191上路径为C:\System32\PSEXESVC.EXE的文件。
而PSEXESVC.EXE是Windows系统中PsExec工具用于远程执行命令的服务端组件,删除该文件会导致PsExec无法正常工作,可能是攻击者为清除痕迹或阻止后续检测而采取的行动。
说明TCP连接的445端口,已被攻击者成功利用。
(5)TCP连接4899端口
输入ip.addr==172.16.134.191 and tcp.port==4899
eae0773b760cc9f5754abaf6be031773
外部主机向172.16.134.191:4899发起TCP三次握手,PSH表示“紧急需要立即处理的数据”,说明攻击者已建立稳定的通信通道。
9704f187820dd47d970b023d75cdd404
最后,攻击者通过HTTP请求,发送目录遍历攻击HEAD /cgi/../../../../../winnt/system32/cmd.exe?/c+dir
说明TCP连接的4899端口,已被攻击者成功利用。
(6)TCP连接80端口
输入ip.addr==172.16.134.191 and tcp.port==80
e1caa67df3cbbcaf94ce17822564dc58
636f90e625a7e6203cf3fb432e33da8e
经分析可知,在正常的TCP三次握手后,攻击者向80端口发送了由大量字符“c”组成的数据包,这是一个缓冲区溢出的攻击载荷。且在攻击包发送后,服务器没有返回任何RST或ICMP错误信息,说明服务器接收并处理了这个恶意请求。
在攻击之后,客户端和服务器之间还有正常的HTTP通信,此次攻击没有导致服务崩溃。但攻击者可能已在服务器中植入后门或维持了访问权限,使得服务器被控制。
说明对于TCP连接的80端口,已被攻击者成功利用。
(7)UDP连接137端口
输入ip.addr==172.16.134.191 and udp.port==137
3e15f3b71b0de51819a58765ec19eec6
经分析可知,对于UDP连接的137端口,虽然具有大量的NetBIOS服务扫描活动,但数据包内容均为正常的名称查询与响应,未包含任何攻击载荷,应当未被攻击者成功利用。

3.问题及解决方案

  • 问题1:我的主机电脑(Win11)无法下载学习通提供的IDA Pro, 报错。
  • 问题1解决方案:在虚拟机Win7上使用IDA Pro.

4.学习感悟、思考等

站在巨人的肩膀上干活事半功倍。

参考资料

posted @ 2025-11-03 17:21  20232313-吴至远  阅读(17)  评论(0)    收藏  举报