20232320 2024-2025-1 《网络与系统攻防技术》实验四实验报告
1.实验内容
通过对以下内容的实践操作掌握恶意代码的静态分析(文件识别、字符串提取、反汇编)和动态分析(调试、行为监控)以及网络取证技能。
(1)对“rada”样本进行脱壳并找到作者。
(2)逆向分析“crackme”程序,破解其密码逻辑。
(3)完整分析“rada”样本并撰写综合性报告。
(4)分析网络数据,追踪僵尸网络的活动痕迹和攻击方法。
2.实验过程
一、恶意代码文件类型标识、脱壳与字符串提取
对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具
在kali虚拟机中使用命令file RaDa.exe查看其文件格式

a.PE32
Microsoft Portable Executable(PE)格式的32位可执行程序,是为Windows操作系统设计和运行的;
b.4.00 (GUI)
表示Windows NT 4.0 / Windows 95 的操作系统版本,指明了程序所需的Windows子系统版本;
c.Intel i386
表明该二进制文件编译的目标平台是Intel 80386或兼容的32位x86处理器架构,它可以在任何32位或64位的x86 Windows系统上运行;
d.3 sections
表示这个可执行文件内部被划分成了三个主要的节区。
使用PEid分析结果如下

我们可以得到:
a.文件已加壳
工具明确检测到该文件使用了UPX加壳器
b.加壳版本信息
工具识别出的版本范围是:0.89.6-1.02/1.05-2.90
作者是Markus&Laszlo
c.文件基础信息
入口点:0000FD20(这是程序执行开始时,操作系统会跳转到的地址)
连接器版本:6.0(通常是编译该程序时使用的链接器版本)
子系统:Win32 GUI(图形用户界面程序)
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理

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


可以看到作者是Raul Siles && David Perez
二、使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息
对crackme1.exe进行分析
在IDA Pro中打开文件crackme1.exe,依次点击View->Graphs->Function calls,打开该文件的函数调用图

为了得到正确的输出,我们要找正确的输入,重点关注fprintf和printf,在上方工具栏中打开Windows->Functions,打开函数管理工具,因为fprintf和printf在sub_401280函数下,所以查看sub_401280

观察函数流程图,输入参数数量不为2时,程序输出“I think you are missing something.”,输入参数数量为2时,如果第二个输入为“I know the secret”,程序输出“You know how to speak to programs, Mr. Reverse-Engineer”,否则输出“Pardon? What did you say?”,所以我们需要输入的第二个参数为“I know the secret”

按照我们分析得出的结论进行输入

由运行结果可以看出我们的分析是正确的
对crackme2.exe进行分析
进行和crackme1.exe相同的操作

这是函数调用图,要分析fprintf,我们还是找到sub_401280


由运行流程图看出,crackme2除了需要crackme1所要求的两个输入、第二个是“I know the secret”外,还对输入的第一个参数要求为“crackmeplease.exe”,说明我们需要将该文件的文件名修改为crackmeplease.exe再运行

(这是未改名的文件)

将文件名修改为crackmeplease.exe后运行输入第二个参数“I know the secret”后得到正确输出
三、分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息
在虚拟机中输入以下命令
file RaDa.exe
md5sum RaDa.exe计算文件的MD5哈希值
sha256sum RaDa.exe计算文件的SHA-256哈希值
exiftool RaDa.exe | grep "Time Stamp"找出该可执行文件的编译时间戳



rada文件的MD5摘要为:caaa6985a43225a0b3add54f44a0d4c7
SHA-256摘要为:13c2379e9d9f679396e21a3391804cc834892f25691381b6d078d07b56d38f90
编译时间戳为2004年10月29日 19:59:58
(2)找出并解释这个二进制文件的目的;
在IDA Pro中分析脱壳后的RaDa文件(也是区别于前面两个简单的crack乱如麻了),选择这个sub_404FB0函数进行突破

functions里打开sub_404FB0,对其进行具体分析

命令mov edx, offset aHttp10_10_10_1;"http://10.10.10.10/RaDa",是将地址http://10.10.10.10/RaDa 加载到edx寄存器,地址10.10.10.10很可能是攻击者的命令控制服务器

"RaDa_commands.html"是恶意软件从C&C服务器获取命令的指令文件的名称
"cgi-bin"是一个经典的Web服务器目录,通常用于存放可执行的脚本或程序,指明了C&C服务器上处理请求的程序所在目录,恶意软件会向这个目录下的CGI脚本发送请求
"download.cgi"、"upload.cgi"是CGI脚本,受害者主机会向download.cgi发起请求下载额外的恶意载荷、配置更新或其他工具,upload.cgi是恶意软件用来向C&C服务器上传数据的接口,被窃取的数据通过这个脚本发送给攻击者
"C:\RaDa\tmp"是本地磁盘上的一个目录路径,这是恶意软件在受感染主机上创建工作目录,可能用于临时存放从服务器下载的文件,或者暂存准备上传的数据

mov edx, offset aHklmSoftwareMi;"HKLM\Software\Microsoft\Windows\CurrentVersion\Run"将一个注册表路径的字符串加载到edx寄存器,HKLM是HKEY_LOCAL_MACHINE的缩写, 这是Windows系统一个著名的自启动项,任何在这个注册表键下添加的可执行文件路径,都会在系统启动时自动运行
mov edx, offset aRada; "RaDa"将一个字符串"RaDa"加载到 edx
mov edx, offset aReg_sz; "REG_SZ"将字符串"REG_SZ"加载到 edx

mov edx, offset aCRadaBin; "C:\RaDa\bin"恶意代码将在这个路径下存放其相关文件和副本
后面这段代码将工作目录C:\RaDa\bin和可执行文件名RaDa.exe拼接起来,形成其自身的完整路径 C:\RaDa\bin\RaDa.exe,将拼接得到的完整路径"C:\RaDa\bin\RaDa.exe"写入注册表启动项
(3)识别并说明这个二进制文件所具有的不同特性
该二进制文件是一个功能完整的、具有典型后门特征的恶意软件,它通过 UPX 加壳进行保护,在系统中建立固定工作目录,并利用注册表实现自启动,其核心功能是通过HTTP协议与C&C服务器进行通信,执行文件上传、下载和命令接收,从而使攻击者能够远程完全控制受感染的主机
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
a.使用UPX加壳
b.采用运行时字符串构建和间接函数调用
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
该恶意程序为后门程序,其核心目的是为攻击者提供对受感染主机的远程控制能力,支持命令执行、文件上传和下载。它不具备病毒或蠕虫的自我复制和自动传播特性。
(6)给出过去已有的具有相似功能的其他工具
Back Orifice、灰鸽子、Sub7等
(7)可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下
在上面使用的字符串工具识别出作者是Markus&Laszlo,因为作者在创作时就留下这样的信息,我们在脱壳后利用分析工具可得到
(8)给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法
A.基于特征码的检测
通过比对文件中的特征码与已知恶意软件的特征库来进行识别
以RaDa为例,将文件的MD5或SHA-256哈希值与恶意软件数据库中的记录进行比对可以发现它是一个恶意代码
B.启发式行为检测
通过分析代码的结构、指令序列和行为模式,监控程序运行时是否执行了可疑行为序列来判断其是否恶意
以RaDa为例,检测到其在C:\根目录下创建RaDa文件夹及其子目录,修改HKEY_LOCAL_MACHINE...\Run注册表项以实现自启动,尝试连接远程服务器的cgi-bin目录,并访问RaDa_commands.html、upload.cgi、download.cgi等特定文件来判定其属于恶意代码
C.网络流量检测
通过监控网络流量,寻找与已知恶意软件通信模式相匹配的异常连接或数据交换
以RaDa为例,与一个已知的恶意IP地址或域名(即RaDa的C&C服务器)建立HTTP连接,检测HTTP请求中是否包含特定的URI路径来判断其是否是一个恶意程序
D.文件系统与注册表监控
实时监控系统关键位置的文件和注册表项的创建、修改和删除操作
检测到RaDa尝试在C:\根目录下创建名为RaDa的文件夹进行报警
E.内存分析检测
在恶意软件运行后,通过分析系统的物理内存或镜像,来寻找其中残留的恶意代码、字符串或网络连接痕迹
检测到RaDa.exe进程,检查网络连接,寻找与C&C服务器建立的连接
四、取证分析实践
Windows 2000系统被攻破并加入僵尸网络
问题: 数据源是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。回答下列问题:
(1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
IRC是什么?
IRC是一种应用于互联网的实时文本通信协议,主要用于群体聊天,但也支持一对一的私人对话,采用客户端-服务器模型。用户使用IRC客户端软件连接到IRC服务器。多个服务器可以互联形成一个IRC网络
当IRC客户端申请加入一个IRC网络时将发送哪个消息?
申请加入网络时发送的核心消息是NICK和USER,而申请加入一个特定频道时发送的消息是JOIN
IRC一般使用哪些TCP端口?
6667:这是最常用、默认的IRC端口
6660-6669:这是一系列传统的IRC端口,因为早期一些系统限制使用低于1024的端口
6697:现代IRC网络通常使用此端口用于SSL/TLS加密连接
(2)僵尸网络是什么?僵尸网络通常用于什么?
僵尸网络是什么?
僵尸网络是由一台或多台命令与控制服务器集中控制的大量被恶意软件感染的互联网设备组成的网络,控制整个网络的黑客或犯罪组织可以同时向网络中的所有或部分被感染的设备下发指令,让它们协同完成复杂的任务,被感染的设备对此并不知情
僵尸网络通常用于什么?
主要用处有分布式拒绝服务攻击、发送垃圾邮件和网络钓鱼、窃取敏感信息、分发其他恶意软件等
(3)蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?


将文件botnet_pcap_file.dat在wireshark中打开,搜索ip.src==172.16.134.191 and tcp.dstport==6667,筛选源IP为172.16.134.191,目的端口为6667的数据包,分析蜜罐主机与IRC服务器的通信,5台通信的IRC服务器的IP分别是209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10、209.196.44.172
(4)在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
在kali虚拟机中安装tcpflower,输入命令sudo apt-get install tcpflow

检查是否成功安装

使用命令tcpflow -r botnet_pcap_file.dat “host 209.196.44.172 and port 6667从botnet_pcap_file.dat文件中提取出目标服务器为209.196.44.172、端口6667的TCP流量,并拆分为独立文件

执行后tcpflow生成report.xml,还会生成独立的TCP连接流文件,其文件名格式为:源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,统计访问了僵尸网络服务器的不同客户端数量
cat 209.196.044.172.06667-172.016.134.191.01152从IRC服务器209.196.44.172:6667到蜜罐客户端 172.16.134.191:1152 的通信流量
grep -a "^:irc5.aol.com 353"搜索以:irc5.aol.com 353开头的行
sed "s/^:irc5.aol.com 353 rgdiuggac @ #x[^x]*x ://g"g表示全局替换,替换为空字符串即删除
tr ' ' '\n'将每一个空格替换为换行符
tr -d "\15"清理Windows的换行符
grep -v "^$"移除空行
sort -u排序并去重
wc -l统计行数

统计出共有3461台不同的主机访问了以209.196.44.172为服务器的僵尸网络
(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 > 20232320hxymiguan;wc -l 20232320hxymiguan.txt从botnet_pcap_file.dat文件中,找出所有向172.16.134.191发送数据包的IP,保存并统计其数量
tcpdump -n -nn -r botnet_pcap_file.dat 'dst host 172.16.134.191'读取并过滤数据包,显示目标地址是蜜罐主机172.16.134.191的数据包
awk -F " " '{print $3}'提取源IP地址
cut -d '.' -f 1-4只保留IP地址
sort | uniq排序并去重
more > 20232320hxymiguan; wc -l 20232320hxymiguan.txt将处理后的唯一IP列表写入20232320hxymiguan.txt,统计文件20232320hxymiguan.txt的行数

打开保存的txt文件


可以看到一共有165个主机攻击
(6)攻击者尝试攻击了那些安全漏洞?
在kali虚拟机中输入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目标端口

在kali中输入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目标端口号

(7)那些攻击成功了?是如何成功的?
在wireshark中分析,依次查看上面的TCP和UDP端口
①ip.addr==172.16.134.191 &&tcp.port==135

三次握手连接已建立,但是很快中断,后续无包,攻击失败
②ip.addr==172.16.134.191 &&tcp.port==139

主机向多个目标发起139端口连接请求时,主机主动发送RST包中断连接,攻击失败
③ip.addr==172.16.134.191 &&tcp.port==25

完成三次握手连接但是也很快断开,攻击失败
④ip.addr==172.16.134.191 &&tcp.port==445


攻击者在直接登录SMB服务失败后,转而利用系统配置弱点,通过无需密码的“空会话”成功连接至管理共享,并进一步绑定了系统的用户账户管理服务(SAMR),是一次成功的攻击
⑤ip.addr==172.16.134.191 &&tcp.port==4899

攻击者成功连接到了后门,从蜜罐主机回传了数量巨大的数据,是一次成功的攻击
⑥ip.addr==172.16.134.191 &&tcp.port==80


攻击者对蜜罐80端口的访问,完整模拟了一次正常的网页浏览行为:建立连接、请求首页、加载图片资源并关闭连接,期间未尝试任何漏洞利用或未授权访问。所以我认为这然是一次正常的网页访问会话,并不是一次成功的攻击。
⑦ip.addr==172.16.134.191&& udp.port==137

这些全部是NBSTAT查询包,目前没有攻击
总结:攻击成功的只有TCP455端口和4899端口
3.问题及解决方案
- 问题1:在分析wireshark包的时候有点不知从何下手
- 问题1解决方案:我认为要学会从宏观到微观的思考方法,由某一部分展现出来的现象取联想会不会是某个攻击,并且也要多加练习,从分析小而清晰的实验包开始,慢慢建立自己的分析体系和直觉
4.学习感悟、思考等
本次实验让我感到很充实很有收获,印象比较深刻的有分析crack文件时像是在做逻辑题,让我感到很有趣,破解后又得到了一种成就感,对我继续在代码目的和探索正确输入这方面有一定激励鼓舞作用。另外在完成取证分析实践环节中,我有一种身临其境的沉浸感,也让我意识到我在wireshark分析方面的能力还很薄弱,在后续学习中应努力加强

浙公网安备 33010602011771号