20232309 2025-2026-1 《网络与系统攻防技术》实验四实验报告
1.实验内容
1.1学习内容
1.恶意代码分析方法(静态分析、动态分析等)
2.PEiD、IDA Pro、ProcessExplorer等分析工具的使用方法
1.2实验任务
- 恶意代码文件类型标识、脱壳与字符串提取
- 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息
- 分析一个自制恶意代码样本rada,并撰写报告,回答问题
- 取证分析实践
2.实验过程
2.1恶意代码文件类型标识、脱壳与字符串提取
对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者
2.1.1文件类型识别
使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具
1.首先从学习通下载代码样本

2.在Linux虚拟机中可以使用file识别文件格式,结果如下

- PE32 executable
PE:Windows操作系统上标准的可执行文件
32:32位程序
executable:可执行的- for MS Windows
为微软Windows操作系统设计- (GUI)
带有图形用户界面的应用程序- Intel i386
CPU 架构,代表与x86 32位架构兼容,这个程序是为Intel/AMD的32位CPU家族编译的- 3 sections
表明文件内部有3个“节”(“节”即PE文件中用于存储不同类型数据的基本单元,如.text ,.data等)
3.使用PEiD工具识别文件,结果如下

- 使用了UPX加壳工具
- 入口点:整个程序执行的起点地址。当操作系统加载完一个PE文件后,会将CPU的控制权交给“入口点”处的指令,从这里开始运行程序。
- EP段:入口点所在的区段,即前面那个“入口点”地址位于文件的哪个区段。此处的JDR1是一个自定义的、非标准的区段名称,强烈表明这个文件已经被加壳、混淆或加密了。
- 文件偏移:入口点代码在磁盘文件中的具体位置(物理地址而非虚拟地址)
- 首字节:入口点处最开始的几个(通常是20个)机器码字节,不同的编译器或加壳工具,其入口点的起始指令序列有独特的模式(称为“签名”或“特征码”)。
- 连接器:生成此PE文件所使用的编译器/链接器的版本。
- 子系统:文件为图形界面程序还是控制台程序。此处GUI表示图形界面,Win32表示Windows 32位系统。
2.1.2使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
1.使用脱壳软件对加壳保护的文件进行脱壳处理

2.得到脱壳后的文件

2.1.3使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
1.将脱壳后的文件复制到kali中,执行strings RaDa_unpacked.exe 提取字符串,结果如下

2.下拉寻找可能是编写作者的字段

或许是这个?
2.2使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
2.2.1分析crackme1.exe
1.在Windows命令行中输入不同个数参数测试crackme1.exe

可以看到不同参数输出结果不同
2.在IDA中打开程序进行分析
因为程序会对输入做出输出回应,因此在字符串界面寻找可疑字符串

双击可进入引用字符串代码位置

由于在刚开始尝试时只出现了上图中第一、三的字符串,因此猜测正确输入可能和第二、四个字符串有关,根据旁边的XREF信息可知,这几个字符串都在程序段sub_401280中被调用,同时打开View > Graphs > Function calls查看函数调用结构图

可以看到sub_401280后关联的函数中有strcmp(字符串比对)、printf(打印输出)等可能和正确输入有关的内容,可知sub_401280应该为关键函数
因此在functions界面找到该程序段sub_401280并双击进入查看具体汇编信息

进入后下滑找到刚刚的关键字符串部分,通过红框的信息大致可以猜测出如果想要输出“You know how to...”信息需要将输入信息与“I know the secret”进行strcmp比对,也就是说我们应该输入“I know the secret”作为正确答案
查了一下jz代表Jump if Zero 即条件跳转,只有当strcmp返回0(字符串相等)时才跳转到成功分支

3.试了一下的确如此,不过要注意加上双引号

2.2.2分析crackme2.exe
1.同样先在命令行中测试参数个数和输出

2.打开IDA,和前面的分析思路差不多,需要找到关键函数



在这里稍有不同,出现了多层验证
经过查询得知,[ebp+arg_4]代表获取argv(命令行参数数组),参数数组第一个值应为程序名称,即此处在进行程序名称的比对

第二层验证时首先也是获取参数数组argv,但不同的是eax获取后+4,即eax中现为第一个命令行的参数,和“I know the secret”比对

3.由上面的分析可知,应先将程序改名为crackmeplease.exe 再输入参数“I know the secret”即可,验证如下

2.3分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
1.提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息
md5sum RaDa.exe选择md5算法获取摘要值

sha1算法摘要值如下,file显示出文件基本信息

2.找出并解释这个二进制文件的目的
使用process explorer运行,字符串界面显示如下

-
http://10.10.10.10/RaDa程序试图连接到一个C&C(命令与控制)服务器 -
RaDa commands.html可能存在Web界面的命令控制 -
cgi-bin, download.cgi, upload.cgi典型的Web后门功能,有支持文件上传下载的脚本名称 -
HKLM\Software\Microsoft\Windows\CurrentVersion\Run\RaDa在注册表Run键中创建自启动项 -
C:\RaDa\tmp创建临时目录,可能用于存储收集的数据 -
RegWrite, RegRead, RegDelete完整的注册表操作能力(读、写、删)
可以打开IDA Pro找到字符串对应的函数进行进一步验证,以http://10.10.10.10/RaDa为例
找到该字符串所在函数sub_404FB0,sub_4052C0

进入sub_404FB0函数区段,可以看到进行了复制字符串到全局变量的程序初始化

选中该全局变量,X跳转到交叉引用

可以在列出的条目中查看应用此变量的函数

进入函数sub_4052C0进一步查看,这段代码在检查dword_40C02C(C&C服务器URL)属于哪个私有IP地址段

以此类推可以查看其他字符串
总体来说,这个文件的目的是安装并试图自启动后门,通过Web连接控制命令服务器,同时还有搜集系统信息,修改注册表等功能
3.识别并说明这个二进制文件所具有的不同特性
cgi-bin, download.cgi, upload.cgi支持文件上传下载Starting DDoS Smurf remote attackhttp://192.168.具有分布式拒绝服务攻击能力和内网扫描功能Scripting.FileSystemObject文件系统操作HKLM\Software\Microsoft\Windows\CurrentVersion\Run\RaDa修改注册表,实现开机自启动
4.识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
(1)加UPX壳
(2)HKLM\Software\VMware, Inc.\VMware Tools\InstallPath检测是否在VMware虚拟机环境下(如果是就不执行恶意代码)
5.对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
后门,它主要提供远程访问功能,且不刻意伪装成正常软件,通过开机自启动等方法维持对系统的持久控制,通过网络接收和执行命令
6.给出过去已有的具有相似功能的其他工具
- Back Orifice:1998年发布,是一个针对Windows系统的远程管理工具,具有强大的远程控制能力,常被用作后门
- Boinet(或称为Beast):一个国产后门,具有强大的功能,包括文件管理、注册表编辑、远程命令行等
- Metasploit Meterpreter:本身是渗透测试框架的一部分,其Payload(Meterpreter)常被用作后门,提供内存注入和扩展功能
7.可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
- 静态分析:在process explorer或者IDA Pro中查看脱壳后的程序的字符串,可以找到作者相关信息

- 动态运行:可以在参数列表中看到
--authors的选项,猜测在运行程序时输入该参数可以找到作者,最好在隔离的虚拟机环境下运行程序以确保安全,此处不做展示
![image]()
8.给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。
- 基于特征码的检测:特征码检测是基于恶意软件静态特征(如文件哈希、字符串特征等)的识别方法,通过比对已知恶意软件的独特标识来发现威胁。如RaDa中的特征性字符串中cgi脚本、C&C服务器地址等。
- 基于行为的检测:通过监控程序执行时行为模式来识别恶意软件,不依赖静态特征。行为检测包括操作系统行为、进程行为、注册表操作行为、API调用行为等等。如RaDa中在C盘建立目录、调用API等。
- 基于网络流量的检测:通过分析网络通信模式、协议特征和数据内容来识别恶意活动。如RaDa中定期HTTP心跳通信的网络特征。
- 基于内存分析的检测:通过分析运行时的内存状态来发现隐藏的恶意代码和活动。具体手段有进程内存扫描、运行时行为重建等。
- 基于端点检测与响应的检测:通过持续监控端点活动并关联多源数据来检测复杂威胁。从多个数据源收集端点活动信息、将孤立的安全事件关联成攻击链等。
2.4取证分析实践
Windows 2000系统被攻破并加入僵尸网络
数据源是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。回答下列问题:
1.IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用哪些TCP端口?
- IRC(Internet Relay Chat) 是一种基于文本的实时互联网聊天协议,诞生于1988年。它是早期互联网最流行的即时通讯方式之一。
-
- PASS消息(可选):如果服务器设置了连接密码,首先发送密码
- NICK消息(必需):设置用户在IRC中的昵称
- USER消息(必需):注册用户信息
- 一般使用标准端口:6667(传统的IRC默认端口),6660-6669为IRC常用端口范围;6697为标准的IRC通过SSL加密传输端口
2.僵尸网络是什么?僵尸网络通常用于什么?
- 僵尸网络是指攻击者通过恶意手段感染大量联网设备(如计算机、智能手机、路由器等),并将这些设备远程控制形成的网络。
- 通常被用于需要海量虚假源的攻击和其他恶意目的,如分布式拒绝服务攻击、发送垃圾邮件、作为代理转发恶意流量等。
3.蜜罐主机(IP地址:172.16.134.191)与哪些IRC服务器进行了通信?
打开wireshark,使用ip.addr == 172.16.134.191 && tcp.dstport == 6667 && tcp.flags.syn == 1对流量进行过滤
ip.addr == 172.16.134.191:确定该流量是该ip主机的通信
tcp.dstport == 6667:用端口号锁定目的主机IRC服务
tcp.flags.syn == 1:一个TCP流中,有且仅有一个SYN包(握手开始),使用这个命令过滤同一个tcp通信流的数据包,避免大量与同一IRC服务器通信的数据包重复

可得通信的IRC服务器如下:
209.126.161.29
209.196.44.172
217.199.175.10
63.241.174.144
66.33.65.58
4.在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
首先需要apt-get install tcpflow下载tcpflow
tcpflow是一个用于捕获TCP流量的工具,它能够将TCP流按照对话的方式重组并保存为文件
tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667"读取流量文件,只保留目标ip和端口相关的流量

可以考虑分别过滤出产生JOIN和QUIT的流量主机,进行去重后统一统计
使用命令cat 209.196.044.172.06667-172.016.134.191.01152 | grep -a JOIN | cut -d '@' -f 2 | cut -d ' ' -f 1 | sort | uniq > join_hosts
考虑到在IRC协议中,服务器会广播其他客户端的状态信息给已连接的客户端,因此只需要在上一步tcpflow生成的文件
209.196.044.172.06667-172.016.134.191.01152这一会话中查找各主机
grep -a JOIN查找包含"JOIN"的行(用于加入频道)
IRC格式::nick!user@host JOIN #channel
cut -d '@' -f 2按@分隔取第二部分
cut -d ' ' -f 1按空格分隔取第一部分
根据IRC格式可知这两步最终就只会保留host也就是主机部分
sort排序uniq去重
最后将结果重定向到join_hosts
一套连招过滤出了加入频道的不同主机
同样的方式用cat 209.196.044.172.06667-172.016.134.191.01152 | grep -a QUIT | cut -d '@' -f 2 | cut -d ' ' -f 1 | sort | uniq >quit_hosts 过滤出退出频道的不同主机
最后cat join_hosts > all_hosts; cat quit_hosts >> all_hosts; cat all_hosts | sort | uniq | wc -l两者合并去重,用wc -l统计行数

可以看到有5581条记录
5.哪些IP地址被用于攻击蜜罐主机?
使用tcpdump -n -nn -r botnet_pcap_file.dat 'dst host 172.16.134.191'
tcpdump也是一种网络数据包分析工具,用于捕获和分析网络流量
-n:不解析主机名,显示IP地址而不是域名
-nn:不解析主机名和端口服务名,显示原始端口号而不是服务名
-r botnet_pcap_file.dat:从文件读取
'dst host 172.16.134.191':只显示目标地址为 172.16.134.191 的数据包
tcpflow和tcpdump区别
大致就是前者主要用于分析详细对话内容,后者则关注整个时段中流量来源和目的
可以看到输出格式大致如下

| awk -F " " '{print $3}' | cut -d '.' -f 1-4 | sort | uniq 提取所有向目标主机172.16.134.191发送流量的源IP地址
awk -F " " '{print $3}':-F " "指定空格作为字段分隔符(默认就是空格);'{print $3}'打印每行的第3个字段(由格式可知是源ip+端口号字段)
cut -d '.' -f 1-4:以点号分割,取1-4的字段,即过滤出ip
排序去重后可以得到165条ip信息(这里截取尾部)

6.攻击者尝试攻击了那些安全漏洞?
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
分析思路原理:利用了TCP协议的三次握手原理来识别攻击行为,tcp[tcpflags]== 0x12是TCP标志位的十六进制值,在TCP头部中,0x12=SYN(0x02)+ACK(0x10)=SYN-ACK,代表服务器的响应(第二次握手),而蜜罐主机发送这个响应代表有外部主机尝试连接这个端口(由于是蜜罐,这种无关端口的连接通常为恶意攻击),这个命令可以筛选出哪些TCP端口被尝试连接
输出到文档结果如下

135:RPC服务端口 远程代码执行漏洞。
139:NetBIOS会话服务端口 空会话/信息泄露漏洞。
25:SMTP服务端口 邮件中继滥用。
445:SMB服务端口 永恒之蓝等漏洞。
4899:远程控制软件(如Remote Administrator)端口 远程控制功能漏洞。
80:HTTP服务端口 Web应用漏洞。
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同理查看udp服务端口的漏洞
只有137端口被尝试连接
137:NetBIOS端口,NetBIOS信息泄露漏洞。
7.哪些攻击成功了?是如何成功的?
根据前面找出的端口在wireshark依次尝试,命令为ip.addr==172.16.134.191 &&tcp.port==[端口号]
(只有tcp连接建立释放流程的端口连接内容下面的分析中就省略了)
①139端口NetBIOS会话服务漏洞
看似很多信息流,但可以观察到每次攻击ip发送Tree Connect AndX Request后,蜜罐主机都没有回复任何SMB协议层面的响应(如接受或拒绝连接),而是直接发送了一个TCP RST包切断了连接,会话终止,代表攻击失败

②445端口SMB服务
这个信息流似乎具有很大的信息量,可以重点分析一下

可以看到首先攻击者和蜜罐进行SMB连接成功,攻击者发送Session Setup AndX Request认证,服务器回应发送CHALLENGE,攻击者发送空用户名\进行认证,服务器居然通过了!蜜罐回复了Session Setup AndX Response并且没有报错。攻击者建立连接后,连接了\IPC$。通过IPC$管道,请求打开\samr并成功入侵了系统,后续可以在这个系统上进行更多攻击操作

这里也进行了攻击,可以看到483包试图进行用户列表查询
枚举域内所有用户(EnumDomainUsers)。这是攻击的终极目标之一。响应包(484)里包含了该域(即这台计算机)上所有本地用户账户的列表,通常包括管理员、普通用户、Guest等账户名。攻击者拿到这个列表,就可以针对性地进行密码爆破或利用其他漏洞。

这里则是一堆猜测命令的查点

查询用户别名、组名
后续还有上传恶意攻击文件等攻击内容,可以再深入挖掘分析,这里不多说了(还有个原因是有些看不太懂。。。)
③4899端口远程控制功能漏洞

可以看到很多PSH,ACK包
启用PSH标志时,发送方会立即将当前缓冲区中的所有数据发出,并要求接收方在收到后也立即上传给应用程序处理,不再等待,此处PSH, ACK 包意味着攻击者或蜜罐正在通过这个TCP连接传输需要被实时处理的应用层协议数据。

这里出现连续的、密集的1514字节包(满载数据),说明正在进行高效率的大数据量传输,且由于是远程管理工具(如Radmin、VNC等)端口,其屏幕图像、文件内容等都会在应用层被加密,然后由TCP层分割成若干个1460字节的块进行传输。虽然无法查看内容,但通过流量行为可以分析猜测发生了数据传输,可能有攻击行为
④80端口Web服务漏洞

可以看到向蜜罐发送了大量CCCCCC,很有可能是缓冲区溢出攻击的填充内容

多次发送此类填充包之后的流量中看到双方进行了数据传输和交互,反推出前面成功进行了连接,可能攻击成功
⑤UDP137:NetBIOS端口,NetBIOS信息泄露漏洞。

有大量不同的ip在向蜜罐主机发送NBSTAT查询,试图一次性获取网络中所有在线主机的NetBIOS信息。蜜罐回复了Name query response NBSTAT,就意味着攻击者的侦察请求在协议层面得到了有效应答。从信息收集的角度看,攻击者的这一步侦察目的达到了。
3.问题及解决方案
- 问题1:2.3中运行rada_dump.exe没有反应,process explorer检测不到
- 问题1解决方案:在process explorer过滤器中找到程序点击查看相关信息如下


说明有程序但被拒绝访问路径,且无法打开文件读取
最后发现是因为光顾着用管理员权限运行rada,忘记用管理员权限运行process explorer了...使用管理员权限运行即可解决问题
- 问题2:IDA Pro打开脱壳后的RaDa无法在字符串窗口找到有效字符串

- 问题2解决方案:这是由于当前默认显示的字符串进行了一定的过滤,当前窗口右键选择Setup更改为以下勾选项,点击OK

再查看字符串窗口即可

4.学习感悟、思考等
本次实验虽然本身难度不是很大,但在上手新的工具特别是IDA Pro中还是遇到了一些困难,花费了一些时间搞清楚主要窗口的用途和快捷键的使用。在最后一个任务实战分析僵尸网络时,最主要的问题是没有分析思路,不懂得从哪里切入进行分析,也不太能看懂数据包的含义,说明我的基础知识板块依旧薄弱,需要更多积累和沉淀。



浙公网安备 33010602011771号