20222320 2024-2025-1 《网络与系统攻防技术》实验四实验报告
目录
1.实验目标
- 1、恶意代码文件类型标识、脱壳与字符串提取
- 2、使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
- 3、分析一个自制恶意代码样本rada,并撰写报告,回答问题
- 4、取证分析实践
Windows 2000系统被攻破并加入僵尸网络
2.实验工具
2.1.IDA
IDA Pro(Interactive DisAssembler Professional)是一款功能强大的反汇编工具,广泛用于逆向工程和恶意软件分析。它能够将机器代码转换为可读的汇编语言,并提供多种分析功能,支持多种处理器架构。
命令 | 说明 |
---|---|
Ctrl + N |
导航到指定地址。 |
Ctrl + M |
在当前地址插入数据。 |
Shift + F5 |
反汇编选定的代码区域。 |
F5 |
启动分析过程。 |
F9 |
启动调试。 |
F8 |
单步执行(步进)。 |
F2 |
重命名标识符。 |
Ctrl + C |
复制当前选择的内容。 |
Ctrl + L |
查看当前函数的图形视图。 |
Alt + F7 |
运行 Python 脚本。 |
2.2.tcpflow
tcpflow 是一个用于捕获和分析 TCP 流量的网络分析工具。它可以将经过网络的 TCP 数据流分离并以可读的格式保存,方便用户分析应用层协议(如 HTTP、SMTP 等)的数据内容
命令 | 说明 |
---|---|
tcpflow -i <interface> |
捕获指定网络接口上的流量。 |
tcpflow -i <interface> -o <output_directory> |
将捕获的数据流保存到指定目录。 |
tcpflow -i <interface> port <port_number> |
只捕获指定端口的流量。 |
tcpflow -r <file.pcap> |
从已有的 pcap 文件中读取数据流。 |
tcpflow -i <interface> -v |
启用详细模式,显示更多捕获信息。 |
2.3.tcpdump
tcpdump 是一个命令行网络数据包分析工具,用于捕获和显示经过网络接口的网络流量。它被广泛用于网络故障排查、性能分析以及安全监测等。
以下是 tcpdump 的一些常用参数:
参数 | 说明 |
---|---|
-i <interface> |
指定捕获数据包的网络接口,如 eth0 或 wlan0 。 |
-r <file> |
从指定的 pcap 文件中读取数据包,例如 capture.pcap 。 |
-nn |
不解析主机名和端口号,直接显示数字形式,以提高输出速度。 |
-s <snaplen> |
设置捕获数据包的快照长度,默认是 68 字节,最大可设置为 65535。 |
-w <file> |
将捕获的数据包写入指定文件,例如 output.pcap 。 |
-c <count> |
指定捕获的数据包数量,例如 -c 10 捕获 10 个数据包。 |
-v , -vv , -vvv |
启用详细模式,增加输出的详细程度,-v 、-vv 、-vvv 依次更详细。 |
-A |
以 ASCII 格式输出数据包内容,适合查看文本数据。 |
-X |
以十六进制和 ASCII 格式输出数据包内容,适合查看二进制数据。 |
本次实验用命令解释:
参数 | 说明 |
---|---|
-r botnet_pcap_file.dat |
从 botnet_pcap_file.dat 文件中读取数据包。 |
-nn |
不解析主机名和端口号。 |
'dst host 172.16.134.191' |
过滤出目标主机为 172.16.134.191 的数据包。 |
and tcp[tcpflags]== 0x2 |
进一步过滤出 TCP SYN 包。 |
cut -d ' ' -f 5 |
提取输出的第五列,即源或目的 IP 地址。 |
more |
分页显示结果。 |
cut -d '.' -f 5 |
从提取的 IP 地址中获取特定字段(如第5段)。 |
cut -d ':' -f 1 |
进一步处理,以获取特定格式。 |
sort uniq |
对结果排序并去重。 |
3.实验过程
3.1.对提供的rada恶意代码样本进行处理
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具:
用kali的file指令,扫描得到rada文件格式:PE32 executable (GUI) Intel 80386,windows
PEID扫一下,得出软件使用UPX加壳
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理
脱壳完成后显示_unpacked后缀
(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者
kali里面用strings工具分析字符串;字符串是4个或更多可打印字符的任意序列,以换行符或空字符结束
strings XXX.exe
这里找到两个疑似人名的东西,应该就是作者
3.2.使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
(1)IDA分析crackme1.exe
(2)“View”→“Graphs”→“Function calls”查看函数调用图
好乱,但我们主要注意输出函数就行,放大看一下:
printf被sub_401280函数调用,但就关注一下这个函数
“Jump”→“Jump to function”→“sub_401280”查看sub_401280函数
放大看一下:
注意流程逻辑,要么就是错误,要么有个“i konw the secret”,这个函数又下面有两个分支,那就重点关注这个流程
可以看出,在miss前这里调用了loc_4012D2这里的函数
注意看这里strcmp函数,这个是比较字符串的,那可以猜测是不是要比较这个字符串呢?打开程序试一下
直接就显示错误了,没给输入字符串机会;那可以就是main(argc,argv[])这样的设置了,附加一下这段字符串试一下
完成
(3)IDA分析crackme2.exe
先试试能不能直接完成
不行,有个新提示了,还是得分析函数:
任然是sub_401280这个函数
继续进去:
看到missing这个东西了,但没有提示我们missing这个,可能这个是通过了的,那就注意loc_4012D5这里
这里有一个crackmeplease.exe,可能是个字符串,接着往下看,有个比较函数,应该是要比较这个的;继续看下面的loc_401313
“i know the secret”在这里,说明是第二个检测到的,那明白了,先检测第一个,再检测第二个字符串;那就直接输入
missing在最前面,说明第一个检测就有问题,那第一个应该是“crackmeplease.exe”,为什么出问题呢?只能怀疑是argv[]将exe本身名字作为输入了,那就再试一下
完成
3.3.分析一个自制恶意代码样本rada,并撰写报告,回答以下问题
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息
用windows自带的Certutil来计算RaDa.exe的摘要
certutil -hashfile RaDa.exe
certutil -hashfile RaDa.exe SHA256
(2)找出并解释这个二进制文件的目的
用脱壳工具脱壳后,打开IDA查看具体信息,重点查找字符串
这里找到一个http的网址,一个html页面;一个C盘地址,目测是软件创建的;还有2个注册表信息;但主要看到这个:“starting DDOS Smurf remove attack”,这里推测是进行Smurf攻击的
接着把这个RADA放到虚拟机里面用process explorer运行,可以看到字符串里面有regwrite和regread,可以看出会修改注册表
根据运行情况看出:
http:\10.10.10.10\RaDa\RaDa_commands.html。
创建c:\RaDa\tmp和bin文件夹,其中将RaDa.exe复制在bin子文件夹中。
读写2个注册表项HKLMHKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\和HKLM\Software\VMware\Inc.\VMware Tools\InstallPath。
(3)识别并说明这个二进制文件所具有的不同特性
添加注册表,使其可以自启动;创建文件夹并复制exe;用网页读取指令
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
UPX加壳:UPX 使用多种压缩算法(如LZ77、LZMA等),通过查找和消除文件中的冗余数据,将数据块压缩成更小的形式;压缩后的可执行文件在运行时会被解压。UPX 在文件头部嵌入了一个解压程序,这个解压程序会在程序启动时自动运行,先将内容解压到内存中,然后执行
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
后门,这个程序可以自主执行,隐蔽性好,接收指令执行操作;但没有网络传播和感染能力,也没有依附于宿主程序
(6)给出过去已有的具有相似功能的其他工具
Webacoo,weevely,PHP Meterprete
(7)可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
windows环境下,命令行运行这个软件,带参数“ --authors”
(8)给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。
①. 基于特征码的检测
通过扫描文件中的特定字节序列(特征码)来识别已知的恶意软件。特征码是从已知恶意软件样本中提取的独特字节模式。
②. 行为分析
在受控环境(如沙箱)中运行可疑文件,监控其行为以检测恶意活动。
③. 静态分析
不执行文件,通过分析文件的代码和结构来检测恶意软件,反编译等。
④. 内存分析
通过分析文件在内存中的行为和特征来检测恶意软件在受控环境中运行文件,使用内存分析工具(如Volatility)提取内存镜像,分析内存镜像中的可疑行为和特征
⑤. 机器学习
收集大量已知恶意软件和正常软件样本,使用机器学习算法训练模型,提取样本的特征,如字节序列、系统调用模式等,通过分析文件的特征来检测恶意软件。
3.3.取证分析实践:Windows 2000系统被攻破并加入僵尸网络
(1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
IRC(Internet Relay Chat,因特网中继聊天)是一种应用层协议,主要用于群体聊天,但也可以用于个人对个人的聊天。它采用客户端-服务器架构,用户通过IRC客户端连接到IRC服务器进行通信。
当IRC客户端申请加入一个IRC网络时,会发送一个NICK消息来设置用户的昵称,然后发送一个USER消息来提供用户的详细信息。
通常使用2个TCP端口:
6667:用于明文传输
6697:用于SSL加密传输
(2)僵尸网络是什么?僵尸网络通常用于什么?
僵尸网络是由被恶意软件感染的计算机组成的网络,这些计算机在攻击者的控制下,通过控制协议接收指令。这些被感染的计算机被称为“僵尸主机”,可以在远程操控下执行各种恶意任务。通常用于以下几种活动:
- DDoS攻击:通过大量僵尸主机同时向目标系统发送请求,导致目标系统过载并无法正常服务。
- 发送垃圾邮件:利用僵尸主机发送大量垃圾邮件,隐藏攻击者的真实IP地址。
- 窃取个人信息:从僵尸主机中窃取用户的敏感信息,如账号密码、机密数据等。
- 分发恶意软件:通过僵尸网络传播其他恶意软件,进一步感染更多计算机。
(3)蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
wireshark打开包,过滤得到:
太多了,查看tcp流看看:
这样就能看出有209.126.161.29,66.33.65.58,63.241.174.144,217.199.175.10这4个
(4)在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
数据太多,wireshark分析不现实,这里就要用tcpflow来分析了;首先先获取所有该地址的irc数据报
tcpflow -r botnet_pcap_file.dat 'host 209.196.44.172 and port 6667'
得到三个文件;再用IRC的特性,过滤昵称(一个昵称对应一个主机),这样统计个数
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 | w
命令 | 参数 | 解释 |
---|---|---|
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 |
对结果进行排序并去重 |
w |
显示当前登录用户的信息 |
共3461个主机
(5)哪些IP地址被用于攻击蜜罐主机?
这里用tcpflow用处不大了,改用tcpdump
这个题目就是要找出所有连接蜜罐的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> 4_4.txt;wc -l 4_4.txt
命令 | 参数 | 解释 |
---|---|---|
tcpdump |
-n -nn -r botnet_pcap_file.dat 'dst host 172.16.134.191' |
读取PCAP文件并过滤目标IP |
awk |
-F " " '{print $3}' |
提取第三列(源IP地址) |
cut |
-d '.' -f 1-4 |
提取完整的IP地址 |
sort |
对IP地址进行排序 | |
uniq |
去除重复的IP地址 | |
more |
> 4_4.txt |
分页显示并重定向输出到文件 |
wc |
-l 4_4.txt |
统计文件中的行数 |
输出在4_4.txt文件里面,这里的165表示共165个地址连接蜜罐
(6)攻击者尝试攻击了那些安全漏洞?那些攻击成功了?是如何成功的?
尝试前还是得先看一下攻击流量,攻击一般也是围绕端口展开的
主要还是TCP流量,少量UDP流量;
#攻击了哪些端口
tcpdump -r botnet_pcap_file.dat -nn 'dst host 172.16.134.191' and tcp[tcpflags]== 0x2 | cut -d ' ' -f 5 | more | cut -d '.' -f 5 | cut -d ':' -f 1 | sort | uniq
#哪些端口开放
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
命令 | 参数 | 解释 |
---|---|---|
tcpdump |
-r botnet_pcap_file.dat -nn 'dst host 172.16.134.191' and tcp[tcpflags]== 0x2' |
读取文件并过滤目标IP和TCP标志 |
cut |
-d ' ' -f 5 |
提取第五列(目标IP地址和端口) |
more |
分页显示结果 | |
cut |
-d '.' -f 5 |
提取第五个字段(端口号) |
cut |
-d ':' -f 1 |
提取第一个字段(纯端口号) |
sort |
对端口号进行排序 | |
uniq |
去除重复的端口号 |
给了一长串端口,直接看活跃端口
一个一个看吧
135:
一个全开扫描,没后续了,只是简单测试是否开放
139:
139端口主要用于Windows网络中的文件和打印机共享服务。它是NetBIOS over TCP/IP(NBT)协议的一部分,允许计算机在局域网中共享文件和打印机
这里面大部分无意义连接,没有攻击内容
25:
端口25主要用于SMTP,这是电子邮件传输的标准协议,用于在邮件服务器之间传输电子邮件
和135差不多,一直是全开扫描,可能也只是简单测试
445:
端口445主要用于SMB(Server Message Block)协议,这是Windows网络中的一个关键组件,用于共享文件、打印机和串行端口
既然这是用共享文件,那就注意有没有传送文件操作。但这里可以看出来,共享了PSEXESVC.EXE给蜜罐,执行后远程主机将收到蜜罐的shell
后续数据包都比较正常,推测攻击成功
4899:
端口4899主要用于Radmin远程控制软件,也就是默认监听的端口;
这里不是全开扫描,而是传输大量数据包,说明上面的攻击成功了
80:
这里面有网络通信,这个包可以一眼看出有问题,放大看一下
大量的无用字符串,后面又有cmd的相关指令,推测是缓冲区溢出攻击;但后续又进行了几次,蜜罐没给出什么相应,推测攻击失败
接下来看udp部分:
# 扫描的UDP端口
tcpdump -r botnet_pcap_file.dat -nn 'dst host 172.16.134.191' and udp | cut -d ' ' -f 5 | more | cut -d '.' -f 5 | cut -d ':' -f 1 | sort | uniq
#开放的UDP端口
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 | more
一共3个端口
开放137和1434
137:
主要用于NetBIOS名称服务(NetBIOS Name Service, NBNS),这是NetBIOS协议套件中的一个关键组件,主要用于Windows网络,进行计算机名称到IP解析
感觉什么也没有
1434:
主要用于SQL Server Browser服务。这个服务用于SQL Server的命名实例,帮助客户端找到正确的SQL Server实例并连接到它。
这里对于SQL的攻击,主机并没有返回数据;没形成通信,推测攻击失败
4.问题及解决方案
-
问题1:打开crackme1.exe有问题
-
问题1解决方案:按照他说的用.\打开程序才行
-
问题2:按照说的用.\也会作为参数传入
-
问题2解决方案:用管理员模式的命令指示符才能直接打开程序
5.学习感悟、思考等
这次的实验比之前的任务都要重,特别是涉及到的工具很多,需要提前在学习通上看才行。主要难点还是在于用IDA分析程序,我下的是学习通的版本不能反编译,所以只能用肉眼看汇编代码来分析。但完成这次实验的收获也是很大的,学会了分析常用的攻击端口和相应的流量特征,也掌握了对简单的样本的脱壳分析。对于大量数据的分析还是要依靠工具才能完成,人工还是太繁重了一点啊。