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

1.实验内容

(1)恶意代码文件类型标识、脱壳与字符串提取
(2)使用IDA Pro分析恶意代码
(3)取证分析实践

2.实验过程

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

对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
在kali虚拟机中使用file命令得知恶意软件的文件格式和运行平台。如图,RaDa.exe是一个运行在32位Windows系统上的图形界面程序,基于x86架构编译,内部结构包含3个段。

image

在Windows主机中使用差壳工具PEiD分析RaDa.exe。如图,该样本使用了UPX 加壳工具(版本范围0.89.6-2.90)作者是Markus和Laszlo。文件是Windows 32位图形界面程序。连接器版本为6.0。

image

使用“超级巡警之虚拟机自动脱壳器”对恶意软件进行脱壳处理,得到RaDa_unpacked.exe

image

打开IDA Pro,选择PE Executable,分析RaDa_unpacked.exe文件

image

在地址为00403F7A处,出现了(c)Raul Siles&David Perez,表明了该恶意代码的编写作者是Raul Siles和David Perez。

image

从地址00403FD4处,看出该恶意代码开发于2004年9月

image

2.2使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe

2.2.1静态分析crackme1.exe

先在我的windows主机上运行该程序,无任何参数输入时提示“I think you are missing something.”,因此可判断出需要参数。尝试一个参数后提升“Pardon? What did you say?”,发现该参数不对。为了确定是不是参数还是不够,我尝试两个、三个参数,以及选项,最后确认应该是仅缺少一个正确的参数。

image

在IDA Pro中打开文件crackme1.exe。我们需要寻找特定输入,使其能够输出成功信息,所以要找涉及到输出的部分,看是什么决定了输出正确内容和错误提示。即定位字符串在代码中的引用位置。
因此我在IDA Pro的字符串窗口String里,找到I know the secret这一行,右键点击它,选择Jump to xref to operand,找到程序中哪些代码调用了这个字符串。

image

点击后弹出一个窗口,显示引用该字符串的函数sub_401280+5B,双击这个函数名,IDA自动跳转到该函数的反汇编代码处。

image

此图即为该函数流程图

image

红色箭头导向错误提示,接连实现两个绿色箭头的判断会导向正确提示。从这里可以看出第一个判断条件是参数是不是有2个。
具体看指令,Add eax,4是将eax寄存器中的值加上4,让eax从“原始地址”指向向后偏移4字节的新地址。因此这部分是判断第二个参数。所以第二个判断条件是要求用户提供的第二个参数应为"I know the secret",即dword ptr [eax]指向的字符串。

image

因此再次运行程序,输入参数,成功。

image

2.2.2 静态分析crackme2.exe

直接进入到ida,找到知晓密码这一条

image

image

双击,获取流程图。

image

首先,可以看出这个程序同样要求两个参数。但是不一样的是,此处没有add eax, 4进行偏移,所以首先需要比较是第一个参数,即文件名。此处要求文件名是crackmeplease.exe。第二个条件同crackme1.exe,要求第二个参数是"I know the secret"。

image

因此我们把文件改名为crackmeplease.exe,并输入指定参数,运行成功。

image

2.3分析恶意代码样本rada

在windows上直接运行,关掉杀软后也不能运行。

image

2.3.1分析rada基本信息

使用file命令分析rada基本信息
file RaDa.exe
md5sum RaDa.exe
exiftool RaDa.exe | grep "Time Stamp"

image

如图可知,RaDa.exe是PE32格式的Windows 可执行文件,运行于Intel i386(32位)架构,属于Windows 4.00版本的GUI程序,包含3个数据段。md5sum命令生成的哈希值为caaa6985a43225a0b3add54f44a0d4c7,该哈希可作为样本的唯一标识,可以用于判断是否为已知恶意样本。通过exiftool结合grep筛选出的时间戳为2004:10:29 19:59:58-04:00,说明该程序编译于2004年10月29日。

2.3.2分析rada目的

在string中没有看到像crackme1.exe一样明显的提示,因此我通过View--Graph--Function calls,打开该文件的函数调用图,可见这是一个非常复杂的函数。

image

可以看到,sub_4045D0函数有两个走向sub_404A20和sub_404FB0,因此从这三个函数先开始分析。

image

在functions中打开sub_4045D0函数,内容复杂且没有明显提示。

image

接下来打开sub_404A20函数,同样没有明显提示。

image

然后打开sub_404FB0函数,发现此处有明确提示,分析有字符串的:

image

1.mov eax, offset aHttp10101010Ra ; "http://10.10.10.10/RaDa"

image
具体分析该指令:mov edx, ...是将右边的值“移动”到edx通用寄存器中。offset aHttp10_10_10_1:offset表示取地址,aHttp10_10_10_1是IDA Pro自动生成的字符串标签。"http://10.10.10.10/RaDa"是标签aHttp10_10_10_1对应的实际字符串。
因此此指令的目的是将地址http://10.10.10.10/RaDa加载到edx寄存器,作为后续网络通信的目标地址,可以用于连接服务器、发送接收数据。

image

2.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"
这四条指令均为将特定字符串的地址加载到edx寄存器。
第一条加载了网页文件名"RaDa_commands.html",第二条的"cgi-bin"可能是Web服务器中存放公共网关接口程序CGI的标准目录。第三条的"download.cgi"可能是用于处理文件下载请求的CGI程序。"upload.cgi"可能是处理文件上传请求的CGI程序。推测这四条指令的字符串通过后续的字符串拼接(如__vbaStrCat)形成完整URL,实现远程控制功能。
3.mov edx, offset aCRadaTmp ; "C:\\RaDa\\tmp"
该指令体现了恶意软件应该使用其他函数在被攻击主机的C盘下创建名为RaDa的文件夹,并在其中创建名为tmp的子文件夹,用于存放相关数据。此指令是将本地目录路径的地址 "C:\RaDa\tmp"加载到edx寄存器,我在本机查看,果然有此目录。

image

4.offset aSoftwareMicros ; "HKLM\\Software\\Microsoft\\Windows\\Current"...
该指令中HKLM的全称HKEY_LOCAL_MACHINE是Windows注册表中存储“本地计算机系统配置”的根键,对其修改会影响所有用户。Software\Microsoft\Windows\CurrentVersion是系统核心配置目录,存放Windows版本信息及关键功能设置。指令中省略的后续路径可能是\Run。因为HKLM...\Run是 Windows系统级的开机自启动项,所有写入该路径的程序,会在系统启动时自动运行。因此该指令是通过字符串拼接(如__vbaStrCat)补全为完整路径,把自身路径写入注册表,实现开机自启。

image

5.mov edx, offset aCRadaBin ; "C:\\RaDa\\bin"
"C:\RaDa\bin"是恶意代码在本地创建的核心功能模块存储目录。因此通过__vbaStrCat拼接出可执行文件的完整路径C:\RaDa\bin\RaDa.exe,实现开机自启。

image

综上,RaDa.exe是一个远程控制。它主要有以下操作:
(1)在受感染主机的C盘创建目录
C:\RaDa\tmp用于存储临时文件;
C:\RaDa\bin用于存放核心功能组件。
(2)修改系统注册表实现开机自启动;
(3)通过HTTP协议连接攻击者的控制服务器http://10.10.10.10/RaDa。
从RaDa_commands.html网页获取攻击者下发的指令;通过cgi-bin目录下的download.cgi从服务器下载数据;通过upload.cgi向服务器回传窃取的数据。

2.3.3识别并说明这个二进制文件所具有的不同特性;

采用UPX加壳技术保护自身代码;具备远程控制能力,可从RaDa_commands.html网页接收攻击者指令;支持双向数据交互,通过download.cgi从服务器下载文件、通过upload.cgi向服务器回传数据;能修改系统注册表实现开机自启动以持久驻留;会在受感染主机的C盘创建RaDa主目录及tmp、bin子目录,用于分类存储临时文件和核心组件。

2.3.4识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;

Upx加壳,使原始程序逻辑被封装在压缩数据中。如图,我用IDA分析有壳的RaDa.exe,发现并不能识别functions。

image

2.3.5对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;

我认为该样本既不是病毒,也不是蠕虫,是远程连接的后门程序。病毒的核心特征是能自我复制并感染其他文件,而此样本未表现出感染其他文件的行为;蠕虫的关键特性是无需宿主、可通过网络或存储介质自主传播,但该样本无自我复制或主动传播的功能,主要是被植入后在主机运行。该样本是通过预设的 HTTP 接口与攻击者建立远程连接,接收指令并执行操作,且通过注册表自启动实现长期驻留,符合后门程序的特征,因此是远程连接后门。

2.3.6给出过去已有的具有相似功能的其他工具;

灰鸽子、Poison Ivy。

2.3.7可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?

可以。如图,开发者是Raul Siles&&David Perez。能够获取该信息,需要样本未对身份相关信息进行加密或深度混淆,相关线索以明文形式存在;如果样本经过加壳处理,则需要先通过脱壳工具还原原始代码;并且分析过程需使用如IDA Pro这类的专业工具。

image

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

①基于哈希特征码检测:提取样本MD5/SHA256哈希,加入威胁库,匹配即判定恶意,优势是快速准确,劣势易被哈希修改绕过;
②基于YARA规则检测:编写规则匹配关键字符串(如 “http://10.10.10.10/RaDa”“HKLM...\Run”)与路径特征,通过多条件组合识别,可对抗简单变形;
③基于行为检测:监控程序连接特定C2地址、创建C:\RaDa目录、修改注册表自启动项等行为,由EDR工具实时拦截,覆盖样本变种;
④基于沙箱动态分析:在隔离环境中运行样本,记录其网络通信、文件操作和注册表修改行为,若符合 RAT 特征则标记;
⑤基于API调用序列检测:识别其调用网络、注册表、文件的特定API组合,通过机器学习模型匹配判定,抗变形能力较强。

2.4取证分析实践

2.4.1IRC

(1)IRC是什么?
IRC是一种基于文本的实时通信协议,核心用于多用户在线聊天与信息交互,也是早期僵尸网络常用的命令控制通信方式。
(2)当IRC客户端申请加入一个IRC网络时将发送什么消息?
IRC客户端申请加入IRC网络时,会发送JOIN消息,格式通常为JOIN #频道名,用于请求加入特定聊天频道接收指令。
(3)IRC一般使用哪些TCP端口?
IRC 默认使用的TCP端口为 6667,此为明文通信。还常用6660-6669、7000等端口,加密通信多使用6697端口。

2.4.2僵尸网络的定义与用途

(1)僵尸网络是什么?
僵尸网络是由攻击者通过恶意代码控制的大量受感染主机组成的远程控制网络,受单一或多个C2服务器统一调度。
(2)僵尸网络通常用于什么?
核心用途包括发起分布式拒绝服务攻击、批量发送垃圾邮件、窃取用户敏感信息、传播恶意代码,以及作为跳板进行后续渗透攻击等,具有隐蔽性强、破坏性大的特点。
蜜罐主机通信的 IRC 服务器识别

2.4.3蜜罐主机通信的IRC服务器识别

(1)蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
在Wireshark中打开botnet_pcap_file.dat文件,通过命令ip.src172.16.134.191 and tcp.dstport6667,筛选源IP为172.16.134.191,目的端口为6667的明文数据包。
可找到和5个IRC服务器通信,这些服务器IP分别是209.126.161.29,66.33.65.58,63.241.174.144、217.199.175.10,209.196.44.172。

image

image

在6697端口,无密文数据包。

image

因此蜜罐主机与IP为209.126.161.29,66.33.65.58,63.241.174.144、217.199.175.10,209.196.44.172的五个IRC服务器进行了通信。

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

在kali虚拟机中,安装tcpflower完成。

image

使用命令tcpflow -r botnet_pcap_file.dat “host 209.196.44.172 and port 6667”,筛选出与主机209.196.44.172和端口6667相关的流量数据,将分析结果生成report.xml报告文件,同时生成流量数据文件,数字前的0是格式补全。
流量数据文件按照“源 IP. 源端口 - 目标 IP. 目标端口”的格式命名。172.016.134.191是蜜罐主机IP,01152是源端口;209.196.044.172是IRC控制服务器IP,06667是目标端口。

image

在僵尸网络中,受感染的主机会主动连接服务器,所以使用命令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从僵尸网络的IRC通信流量中统计连接到服务器的受感染主机数量。
其中grep -a "^:irc5.aol.com 353"是筛选出 IRC 协议中 “353” 号回复消息,该消息用于返回频道成员列表,-a确保将二进制文件视为文本处理。sed "s/^:irc5.aol.com 353 rgdiuggac @ #x[^x]*x ://g"是使用sed删除消息中的服务器名、用户名、频道名等固定前缀,仅保留频道内的成员昵称列表。tr ' ' '\n'是将成员昵称之间的空格转换为换行,使每个昵称单独占一行,便于后续处理。tr -d "\15"是删除数据中可能存在的回车符,清理格式干扰。grep -v "^$"是排除空行,避免统计无效数据。sort -u是对昵称进行排序并去重,确保每个受感染主机只被统计一次。wc -l是最终统计去重后的行数,每个昵称对应一台僵尸机。如图,有3461台不同的主机访问了以209.196.44.172为服务器的僵尸网络。

image

2.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 > 20232404.txt;wc -l 20232404.txt。此命令是从僵尸网络流量文件botnet_pcap_file.dat中提取并统计攻击蜜罐主机172.16.134.191的所有源IP地址数量,命令中-n -nn确保 IP 和端口以数字形式显示,不进行域名或服务名解析。awk -F " " '{print $3}'是通过awk以空格为分隔符,提取每行输出中的第 3 个字段,该字段对应数据包的源 IP 和端口。cut -d '.' -f 1-4是以点为分隔符,截取源 IP 部分,保留完整的 IPv4 地址。如图可见源IP地址数量共165个。

image

使用vim打开20232404.txt可以看见具体ip地址。

image

2.4.6攻击者尝试攻击了那些安全漏洞?

在Wireshark上选择统计-->协议分级统计,分析网络流量中各种协议的分布情况和层次结构:
在ipv4中,UDP占0.3%,TCP占99.7%,可见攻击者主要使用TCP数据包。

image

使用命令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连接的目标端口,如图可知有5个端口,分别为135,139,25,445,4899,80。

image

使用命令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连接的目标端口,如图可知有1个端口,为137。

image

2.4.7哪些攻击成功了?是如何成功的?

(1)TCP的135端口
设置过滤条件为ip.addr==172.16.134.191 and tcp.port==135。如图,建立了完整的三次握手,但建立连接后服务器很快发送FIN请求断开连接。所以135端口的攻击不成功。

image

(2)TCP的139端口
设置过滤条件为ip.addr==172.16.134.191 and tcp.port==139。如图,已经建立了完整的三次握手,在第41行可以看到攻击者尝试访问共享目录\PC0191\c,但在第42行,服务器立即返回RST拒绝。

image

而且再向下查看其他数据包,每次攻击者尝试访问共享目录\PC0191\c,都会被服务器立即返回RST拒绝。所以139端口的攻击不成功。

image

(3)TCP连接25端口
设置过滤条件为ip.addr==172.16.134.191 and tcp.port==25。如图,建立了完整的三次握手,但建立连接后服务器很快发送FIN请求断开连接。所以25端口的攻击不成功。

image

(4)TCP连接445端口
设置过滤条件为ip.addr==172.16.134.191 and tcp.port==445。完成三次握手后,进行了NTLMSSP认证。第32476行的"Tree Connect AndX Request"说明攻击者通过445端口成功建立了与蜜罐主机的连接,并尝试进行文件或资源的访问操作。目标路径为IPC$,这是Windows系统的默认隐藏共享。所以445端口的攻击成功。

image

(5)TCP连接4899端口
设置过滤条件为ip.addr==172.16.134.191 and tcp.port==4899。建立三次握手后,出现大量【psh,ack】包。PSH是让接收方的应用层立即处理这些数据,说明4899端口的攻击成功。

image

第 28939 行的 HTTP 流量是攻击者跨越目录限制,访问系统关键路径winnt/system32/cmd.exe,并通过URL参数执行dir命令,意图获取目标主机的文件系统信息。

image

(6)TCP连接80端口
设置过滤条件为ip.addr==172.16.134.191 and tcp.port==80。第1839行可以看到流量中出现了 HTTP 协议的 “[TCP segment of a reassembled PDU]”,攻击者与蜜罐主机172.16.134.191的80端口建立连接,利用此漏洞向服务器发送大量字符C作为攻击载荷,形成缓冲区溢出攻击。

image

(7)UDP连接137端口
设置过滤条件ip.addr172.16.134.191 and udp.port137。此处是NBT-NS枚举攻击,属于网络信息收集类攻击,UDP连接137端口攻击成功。

image

3.问题及解决方案

问题一:不能在kali机上安装peid

image

解决方案:是因为链接失效等问题。最后放弃在kali机上安装,在windows主机上通过压缩包获取。

4.心得体会

本次网络攻防实验让我收获颇丰。通过对RaDa恶意代码、crackme系列程序的分析,以及僵尸网络流量的拆解,我掌握了恶意代码脱壳、IDA Pro静态分析、tcpdump命令使用等技能,也深入理解了远程控制后门的工作原理、IRC协议在僵尸网络中的应用,以及各类端口攻击的底层逻辑。
恶意代码分析过程非常有趣。尤其是使用IDA Pro时,从复杂函数调用图中,逐步拆解出恶意代码的目的和功能,这种顺着线索探寻真相的过程带给我成就感。

posted @ 2025-11-10 22:06  20232404  阅读(5)  评论(0)    收藏  举报