20242802 2024-2025-2 《网络攻防实践》实践第八周报告
20242802 2024-2025-2 《网络攻防实践》实践第八周报告
1.实践内容
本周实践内容主要有:
- 恶意代码样本分析与Crackme程序逆向工程分析。恶意代码样本分析部分,通过文件格式识别工具确定样本的文件格式、运行平台及加壳工具,并利用超级巡警脱壳机进行脱壳处理。借助字符串提取工具分析脱壳后的文件,获取恶意代码编写作者信息。之后再使用IDA Pro等工具进行反汇编分析,研究恶意代码的行为特征、目的及其防止被分析或逆向工程的技术。
- Crackme程序分析部分,使用IDA Pro对crackme1.exe和crackme2.exe进行静态和动态分析,寻找特定输入以使程序输出成功信息。
- 使用Wireshark和tcpflow等工具对基于Windows 2000系统被攻破并加入僵尸网络的网络数据源进行分析,并且回答相关问题
2.实践过程
一、动手实践任务一
在学习通中下载rada.rar压缩包到本地,关闭本地防火墙后能够解压,将解压后的rada文件夹复制到WinXPattacker虚拟机桌面。在cmd中使用file命令,快速了解恶意代码样本的基本属性.
cd 桌面\rada
file RaDa.exe
使用strings
命令对RaDa.exe
文件进行字符串提取,结果显示输出的字符串为乱码,推测是因为文件经过加壳处理。
strings RaDa.exe
使用命令 --authors
,查看作者信息。
结果显示作者都为Raul Siles和David Perez
rada --authors
RaDa.exe --authors
通过PEiD工具查看RaDa.exe
的加壳信息,结果显示加壳工具为UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo
使用超级巡警脱壳工具(在开始->所有程序->脱壳和加壳工具中可以找到)对RaDa.exe
进行脱壳处理,生成了一个脱壳后的unpacked
文件在桌面
使用strings
命令对脱壳后的RaDa_unpacked.exe
文件进行字符串分析,结果显示大量函数调用信息。
strings RaDa_unpacked.exe
进一步详细地使用反汇编分析,使用IDA Pro Free对脱壳后的RaDa_unpacked.exe
进行反汇编分析。
发现字符串界面与之前提取的字符串一致。
通过修改编码模式为Unicode,能够看到更清晰的字符串信息,最终确认作者为Raul Siles和David Perez。
二、动手实践任务二:分析Crackme程序
1.分析crackme1.exe
通过命令行尝试不同的指令进行试探
crackme1.exe
crackme1.exe 1
crackme1.exe 1 2
crackme1.exe open
crackme1.exe yyj
通过file
命令查看文件类型。表明这两个文件都是32位Windows下的PE文件,是命令行程序。
使用IDA Pro对crackme1.exe
进行反汇编分析,查看字符串窗口,发现程序的输出字符串有4条,但通过命令行测试只能发现两条。
在IDA Pro的IDA View窗口中,通过菜单栏选择view—graphs—function calls
,查看程序的流程图,找到printf
函数所在的代码块sub_401280
,发现sub_401280
代码块中包含strcmp
函数调用,推测这是用于验证用户输入的模块。
通过IDA Pro的流程图功能,可以直观地了解程序的逻辑结构。strcmp
函数的出现表明程序可能在比较用户输入与某个预设的字符串,发现程序将用户输入与字符串"I know the secret"
进行比较,如果匹配,则输出"You know how to speak to programs"
strcmp
函数的使用表明程序在检查用户输入是否为"I know the secret"
。这就是需要的输入格式。
在命令行中输入crackme1.exe “I know the secret”
,程序输出"You know how to speak to programs"
,验证成功
2.分析crackme2.exe
与刚刚一样,先通过命令行尝试不同的指令进行试探:
crackme2.exe
crackme2.exe 1
crackme2.exe 1 2
crackme2.exe skz
crackme2.exe yyj
使用IDA Pro对crackme2.exe
进行反汇编分析,查看字符串窗口,发现程序有5条输出字符串
在IDA Pro中查看sub_401280
代码块的反汇编代码,重点关注分支语句部分。
发现程序首先检查第一个参数是否为"crackmeplease.exe"
,然后检查第二个参数是否为"I know the secret"
。
将crackme2.exe
重命名为crackmeplease.exe
,然后输入第二个参数"I know the secret"
。
rename crackme2.exe crackmeplease.exe
crackmeplease.exe "I know the secre"
程序输出成功信息,验证成功。
三、分析实践任务一
分析一个自制恶意代码样本rada:
MD5摘要值是恶意代码样本的唯一标识,可以用于快速识别和比对样本。使用命令md5sum RaDa.exe
,计算恶意代码样本RaDa.exe
的MD5摘要值,结果显示为caaa6985a43225a0b3add54f44a0d4c7
- 回答问题1.提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
- 摘要:caaa6985a43225a0b3add54f44a0d4c7
md5sum RaDa.exe
使用Process Explorer软件监听脱壳后的RaDa_unpacked.exe
文件。
发现恶意代码访问了http://10.10.10.10/RaDa
网站,下载了RaDa_commands.html
文件到C:\RaDa\tmp
目录。
发现恶意代码尝试连接到内网网段192.168、172.16、10,发送恶意软件或进行DDoS攻击。还尝试使用RegWrite、RegRead、RegDelete三个方法修改注册表实现开机自启。
通过Process Explorer的监听结果,发现恶意代码在运行时输出了作者信息:Raul Siles和David Perez。
- 回答问题2、找出并解释这个二进制文件的目的
- 访问了
http://10.10.10.10/RaDa
网站,下载了RaDa_commands.html
文件到C:\RaDa\tmp
目录 - 修改注册表,设置RaDa开机自启动
- 发现恶意代码尝试连接到内网网段192.168、172.16、10
- DDos攻击
- 访问了
-
回答问题3、识别并说明这个二进制文件所具有的不同特性
- 下载文件,从指定网站下载恶意文件
- 修改注册表,设置开机自启项,确保恶意代码在系统重启后自动运行。
- DDoS攻击,通过消耗资源使目标主机瘫痪
- 内网传播,攻击内网网段,尝试感染其他主机。
-
回答问题4、识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
- 使用UPX加壳工具对代码进行压缩和加密。
-
回答问题5、对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
- 后门程序:恶意代码通过修改注册表、下载文件和通信功能,为攻击者提供了远程访问和控制的能力。虽然它具有攻击内网网段的能力,但其主要目的不是自我复制(如病毒或蠕虫),而是提供持久化访问,所以应该是后门程序。
-
回答问题6、给出过去已有的具有相似功能的其他工具;
- 这个问题使用了网络搜索和大模型的帮助 有以下工具:
- Setiri及其前辈Gatslag:这些工具也具有类似的功能,通过网络通信接收指令并执行恶意操作。
- Bobax:2004年发现的木马,通过HTTP协议从指定服务器下载命令文件并执行。
-
回答问题7、可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
- 可以调查出开发作者,在本次的实验中已经使用命令行工具(如
RaDa.exe --authors
)直接获取作者信息。反汇编工具(如IDA Pro)分析脱壳后的代码,找到嵌入的作者信息。运行监听工具(如Process Explorer)观察恶意代码运行时输出的作者信息。这几种方法都可行。
- 可以调查出开发作者,在本次的实验中已经使用命令行工具(如
四、分析实践任务二
在Kali虚拟机上使用Wireshark对botnet_pcap_file.dat检测日志文件进行分析
- 回答问题1、IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
- IRC是一种实时通信协议,用于在线聊天和信息交流。
- 当IRC客户端申请加入一个IRC网络时,通常会发送以下消息:NICK命令:设置客户端的昵称。USER命令:设置客户端的用户名和真实姓名。JOIN命令:加入一个频道。
- IRC常用的TCP端口:6665 - 6669:常规IRC通信端口 、6697:用于SSL/TLS加密连接的备用端口、7000:另一个备用端口
设置过滤条件为tcp.port == 6667
,以筛选出与IRC通信相关的数据包。
ip.addr == 172.16.134.191 && tcp.dstport ==6667
- 回答3、蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
- 使用Wireshark过滤条件
ip.src == 172.16.134.191 && tcp.port == 6667
可以看到蜜罐主机与以下IRC服务器进行了通信:209.126.161.29、66.33.65.58、217.199.175.10、63.241.174.144
- 使用Wireshark过滤条件
安装TCPflow工具
sudo apt-get install tcpflow
使用命令sudo tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667"
提取与209.196.44.172服务器的IRC通信数据生成report.xml报告文件
sudo tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667"
使用cat
命令查看生成的文件209.196.044.172.06667-172.016.134.191.01152
,使用grep
命令提取特定的IRC消息,得到主机数量为3461
sudo 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
- 回答4、在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
- 使用命令
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
统计访问主机数量。看到共有3461台不同的主机访问了以209.196.44.172为服务器的僵尸网络。
- 使用命令
- 回答2、僵尸网络是什么?僵尸网络通常用于什么?
- 僵尸网络是由感染恶意软件的计算机组成的网络,计算机可以被攻击者远程控制,而无需用户知情。
- 通常用于分布式拒绝服务(DDoS)攻击,垃圾邮件和钓鱼邮件等
运行命令tcpdump -n -nn -r botnet_pcap_file.dat 'dst host 172.16.134.191'
提取目标主机的流量。将生成一个名为IP.txt的文件里面是被用于攻击蜜罐主机的所有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 > IP.txt;wc -l IP.txt
点击IP.txt文件可以看到总共165个IP被用于攻击蜜罐主机
- 回答5、那些IP地址被用于攻击蜜罐主机?
- 使用
tcpdump
工具分析网络日志文件,提取攻击蜜罐主机的IP地址。可以在IP.txt文件找到这165个IP地址被用于攻击蜜罐主机
- 使用
利用tcpflow工具分析网络日志文件,提取攻击蜜罐主机的流量。使用命令tcpdump -r ...and tcp...
提取TCP端口信息,使用命令tcpdump -r... and udp...
提取UDP端口信息。
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 'src host 172.16.134.191' and udp | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq
-
回答6、攻击者尝试攻击了那些安全漏洞?
-
TCP端口:135、139、25、445、4899、80
-
UDP端口:137
-
-
回答7、哪些攻击成功了?是如何成功的?
需要逐个来分析判断每个攻击是否成功
- 135端口
只有与IP地址 195.36.247.77
在端口 135
上的TCP通信,没有明显的攻击迹象
ip.addr == 172.16.134.191 && tcp.port ==135
- 139端口
数据包显示了SYN, ACK和FIN, ACK标志,表明连接尝试和终止,没有明显的攻击迹象
- 25端口
显示了SYN和ACK标志,表明正在进行TCP三次握手,没有明显的攻击迹象
ip.addr == 172.16.134.191 && tcp.port ==25
- 445端口
ACK标志,表明连接已经建立,并且查看到了PSEXESVC.EXE这一可疑的exe可执行文件,是一个恶意远控程序
ip.addr == 172.16.134.191 && tcp.port ==445
进一步分析可以看到攻击者逐步获取了admin
和administrator
的管理员权限,实现了远程控制。
攻击者利用了SMB服务的漏洞,成功植入了恶意软件并获取了系统权限。
- 4899端口
显示了SYN和ACK标志,表明正在进行TCP三次握手,没有明显的攻击迹象
- 80端口
发现了一个http包
ip.addr == 172.16.134.191 && tcp.port ==80
跟踪数据包发现很多填充数据,但缓冲区溢出失败
- 137端口
显示了NetBIOS名称服务请求和响应,没有明显的攻击迹象
ip.addr == 172.16.134.191 && udp.port ==137
3.学习中遇到的问题及解决
-
问题1:提取与209.196.44.172服务器的IRC通信数据生成report.xml报告文件失败
-
问题1解决方案:cd 到botnet_pcap_file.dat所在路径即桌面
-
问题2:尝试输入
crackme2.exe “crackmeplease.exe” “I know the secret”
,程序提示错误 -
问题2解决方案:发现需要将
crackme2.exe
重命名为crackmeplease.exe
,然后输入第二个参数"I know the secret"
。
4.实践总结
在本周的实验中,我首先对恶意代码样本进行了文件类型识别、脱壳和字符串提取。在实验之前,我对加壳、脱壳等知识点几乎一无所知,在使用PEiD工具时经过搜索我才了解到“加壳”这一概念是一种通过压缩和加密代码来隐藏恶意软件真实功能的技术,而使用超级巡警脱壳工具对样本进行脱壳处理时才理解其目的是恢复软件的原始代码,便于进行分析。本次实践中有很多需要进行分析的内容,我也搜索了大量的相关知识比如PSEXESVC.EXE是一个恶意远控程序等等知识点,最终才能正确地分析。