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

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

1. 实验内容

  • 进行恶意代码文件类型标识识别、脱壳与字符串提取
  • 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息
  • 分析一个自制恶意代码样本rada
  • 取证分析实践

2. 实验过程

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

2.1.1 使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具

在kali虚拟机中使用file命令来确定学习通中所给的RaDa.exe的文件类型

image

file命令显示,RaDa.exe是一个32位的Windows可执行程序,具体为PE32格式,适用于Windows 4.00图形界面,基于Intel i386架构,且内部包含3个节。

在Windows主机中使用PEiD软件分析RaDa.exe

PEiD 是一款经典的 Windows 平台可执行文件(PE 文件)分析工具,核心功能围绕 “识别 PE 文件的加壳 / 保护类型” 展开,在逆向工程、软件安全分析领域应用广泛。

PE(Portable Executable)是 Windows 系统下程序文件的标准格式(如 .exe、.dll 等)。很多软件会通过 “加壳”(一种代码保护技术,如 UPX、ASPack、Asprotect 等)来隐藏原始代码、防止逆向破解或压缩文件体积。

PEiD 的核心作用就是检测这些 PE 文件是否被加壳,以及具体使用了哪种加壳 / 保护工具,为后续的逆向分析(如脱壳、代码还原)提供关键前置信息。

image

可以得到RaDa.exe是一个被UPX​加壳保护的32位Windows图形界面程序,压缩壳的具体版本为0.89.6到2.90之间,UPX加壳工具​的作者是Markus & Laszlo。

2.1.2 使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理

使用超级巡警之虚拟机自动脱壳器 V1.3程序对RaDa.exe进行脱壳处理

image

得到脱壳后的文件RaDa_unpacked.exe

image

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

使用IDA Pro程序对脱壳后的程序进行分析。打开IDA pro,点击new,选择PE Executable,打开脱壳后的文件

image

按下Alt+T进行文字搜索,搜索copyright

image

得到如下结果

image

到第二个地址的位置可以看到rada恶意代码的编写作者为Raul Siles & David Perez

image

2.2 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息

2.2.1 crackme1.exe

尝试运行该程序,试探其输入格式:

image

可以发现在接受1个参数时程序的反馈与众不同,所以猜测该程序接受一个参数。目前为止已经发现了程序的两种反馈信息。一种是“I think you are missing something.”,这个猜测是参数数目不对的提示;另一种是“Pardon? What did you say?”,对于这种反馈信息猜测是参数错误的提示。

使用IDA pro工具打开文件,尝试阅读其汇编语言,验证猜想。

image

通过Strings页面可以查看到该程序中出现的明文字符串,我们发现了前面的两种反馈信息,“I think you are missing something.”“Pardon? What did you say?”,还发现了“I know
the secret”和“You know how to speak to programs, Mr.Reverse-Engineer”这两个字符串。可以猜测前者就是需要的口令,后者就是输入口令正确时程序的反馈信息。

通过Views→Graphs→Function Calls查看整个程序的call flow

image

可以看到sub_401280下面有printf和strcmp,说明该函数可能读取用户输入并与已有字符串作比较之后输出结果。

通过Windows→Functions Window打开函数管理窗口

image

双击函数名打开该函数的流程图

image

从流程图中可以看到该函数会将传入的参数与字符串”I know the secret"进行比较

尝试输入口令I know the secret,如下图所示可以通过程序的测试

image

2.2.2 crackme2.exe

使用IDA pro工具打开文件,在String界面可与看到明文字符串“I know the secret”和“crackmeplease.exe”

image

通过Views→Graphs→Function Calls查看整个程序的call flow

image

还是分析sub_401280函数,通过Windows→Functions Window打开函数管理窗口,双击函数名打开该函数的流程图

image

image

进行分析,cmp [ebp+arg_0],2判断程序参数是否为两个,通过参数个数的判断后,接着用strcmp函数对argc里面的第一个字符串即程序名,和“crackmeplease.exe”进行判断。通过程序名判断后,用户输入的口令与”I know the secret”判断。

所以先将程序名改为crackmeplease.exe,再用cmd运行,第二个参数输入I know the secret

image

成功弹出了提示We have a little secret: Chocolate。

2.3 分析一个自制恶意代码样本rada

在2.1部分已经进行了文件类型识别、使用PEiD查壳分析、脱壳处理、使用IDA Pro静态分析并查找到了作者信息,下面进行进一步分析并回答问题。

2.3.1 计算文件MD5摘要值与时间戳

使用md5sum命令计算文件的MD5摘要值,用于唯一标识该样本:

image

得到其MD5摘要值为:caaa6985a43225a0b3add54f44a0d4c7

使用exiftool RaDa.exe | grep "Time Stamp"提取文件数据并过滤时间戳信息

image

2.3.2 分析函数调用图与关键流程图

选择View → Graphs → Function calls,打开该文件的函数调用图。分析sub_404FB0函数的流程图以获取更多信息。

image

image

查看sub_404FB0函数的流程图,发现该文件主要通过修改注册表和定义恶意路径,以实现恶意软件的持久化驻留与远程控制。

分析一:C&C服务器地址

命令mov edx, offset aHttp10_10_10_1 ; "http://10.10.10.10/RaDa"将地址http://10.10.10.10/RaDa加载到edx寄存器。IP地址10.10.10.10是攻击者的命令控制服务器,后续所有的下载指令、上传数据都会与这个服务器通信。如下图所示:

image

分析二:通信模块

以下四条命令连续调用了字符串拼接函数,分别将四个字符串复制到内存中:

  • RaDa_commands.html:攻击者用来下发指令的网页文件
  • cgi-bin:Web服务器上存放脚本的通用目录
  • download.cgi:用于下载新指令或恶意模块的脚本
  • upload.cgi:用于上传窃取数据的脚本

使得这个恶意文件具备了接收命令与回传数据的双向通信能力。如下图所示

image

分析三:工作目录

上图中命令mov edx, offset aCRadaTmp ; "C:\\RaDa\\tmp"表示恶意软件在C盘根目录下创建一个名为RaDa的文件夹,并在其中创建名为tmp的子文件夹,存放下载的临时文件或窃取的数据。

分析四:注册表自启动

上图中命令offset aHklmSoftwareMi ; "HKLM\\Software\\Microsoft\\Windows\\Current"表示该文件通过HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Current修改注册表路径,将自身添加为开机自启动项,确保每次开机自动运行。

分析五:恶意程序路径

命令mov edx, offset aCRadaBin ; "C:\\RaDa\\bin"将"C:\RaDa\bin"复制到内存,随后连续调用两次字符串拼接函数,得到完整的可执行文件路径"C:\RaDa\bin\RaDa.exe"。这个路径将被用于保存自身的文件,并完成开机自启动配置。如下图所示:

image

2.3.3 问题回答

  • 问题一:提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息

回答:

属性
MD5摘要值 caaa6985a43225a0b3add54f44a0d4c7
文件类型 32位Windows GUI可执行文件(PE32)
目标平台 Intel x86处理器
段数量 3个段
加壳工具 UPX 0.89.6 - 1.02 / 1.05 - 1.24
编译时间 2004年10月30日
开发作者 Raul Siles && David Perez
  • 问题二:找出并解释这个二进制文件的目的

回答:这是一个远程控制后门程序。其主要目的包括:

  1. 建立C&C通信:连接远程命令控制服务器,通过HTTP协议接收攻击者的指令
  2. 实现持久化:在目标主机C盘创建工作目录(C:\RaDa\tmp和C:\RaDa\bin),并修改注册表实现开机自启动
  3. 远程控制:支持文件上传(upload.cgi)、文件下载(download.cgi)、截屏(screenshot)、休眠(sleep)等指令
  4. 发起攻击:可执行DDoS拒绝服务攻击,将被感染主机作为僵尸网络的一部分
  • 问题三:识别并说明这个二进制文件所具有的不同特性

回答:

  1. 具有网络通信特性,可以通过HTTP协议与硬编码的C&C服务器(10.10.10.10)进行通信,从RaDa_commands.html获取攻击者指令并具备文件上传和下载能力

  2. 具有持久化特性,动态创建工作目录C:\RaDa\tmp和C:\RaDa\bin,修改注册表Software\Microsoft\Windows\CurrentVersion\Run实现开机自启动,将自身复制到C:\RaDa\bin\RaDa.exe

  3. 具有远程控制特性,支持get、put、screenshot、sleep等远程控制指令,可以获取主机网卡配置信息,可以对主机注册表进行读写和删除操作

  4. 具有攻击特性,可执行DDoS拒绝服务攻击,可以作为僵尸网络节点参与大规模攻击

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

回答:该文件采用了UPX加壳技术作为主要的反分析手段,通过压缩原始代码和劫持入口点来隐藏程序逻辑,加壳后的文件在静态分析时无法直接看到原始代码和字符串,运行时才会在内存中解压还原原始代码。

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

该恶意代码样本属于后门程序。它不具备自我复制能力,不具备主动传播能力,主要功能是建立远程访问通道,具备持久化机制,等待攻击者指令,从这些特征可以判断。

  • 问题六:给出过去已有的具有相似功能的其他工具

回答:具有相似功能的后门程序和工具包括:

工具名称 功能描述
灰鸽子(Gray Pigeon) 国产远程控制木马,功能强大
msfvenom Metasploit框架的载荷生成工具
Veil 免杀后门生成框架
SubSeven 经典的远程控制木马
GTBot 基于IRC的僵尸网络控制程序
Sdbot IRC僵尸网络木马
NetBus 早期的远程控制工具
Back Orifice 著名的后门程序
  • 问题七:可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?

回答:可以调查出开发作者Raul Siles && David Perez,创建于2004年9月。

调查环境和条件:

  1. 脱壳处理:由于原始文件使用了UPX加壳,需要先进行脱壳处理才能看到明文字符串
  2. 逆向分析工具:需要使用IDA Pro等专业的逆向分析工具
  3. 字符串提取:可以使用strings命令或IDA Pro的Strings窗口提取程序中的字符串
  4. 作者主动留下信息:本案例中作者在程序中明文留下了署名信息,这是能够调查出作者的前提条件
  5. 元数据分析:可以使用exiftool等工具分析文件元数据获取更多信息
  • 问题八:给出至少5种检测该恶意软件的方法

方法一:基于特征码的检测

项目 说明
原理 将文件内容与病毒库中的特征码进行比对,匹配成功则判定为恶意软件
特征类型 静态特征码(如MD5值caaa6985a43225a0b3add54f44a0d4c7)、UPX壳特征码
优点 资源消耗低,对已知病毒检测非常有效,误报率低
缺点 无法检测未知病毒和变种,依赖病毒库的及时更新

方法二:基于启发式的检测

项目 说明
原理 通过分析代码的行为和逻辑来推测是否为恶意软件,使用预定义规则和评分系统
检测项 修改注册表自启动项、创建隐藏目录、连接可疑IP地址、加壳行为等
优点 能够检测未知病毒和已知病毒的变种
缺点 漏报和误报的可能性较大

方法三:沙箱检测

项目 说明
原理 在隔离的虚拟环境中安全地执行可疑文件并监控其行为
监控内容 文件操作、注册表修改、网络连接、进程创建等
优点 能看到恶意软件的完整行为链,更加准确
缺点 资源消耗大,检测速度慢,部分高级恶意软件能识别沙箱环境

方法四:基于网络流量分析的检测

项目 说明
原理 监控网络流量的模式、协议和内容,发现恶意行为
检测项 连接恶意IP(10.10.10.10)、异常HTTP请求、DDoS攻击流量等
优点 可以检测已渗透到内网的恶意软件,不受文件加壳影响
缺点 如果恶意软件使用加密通信,检测较为困难

方法五:基于日志分析的检测

项目 说明
原理 通过分析系统日志、安全日志、应用日志,发现恶意行为痕迹
检测项 异常注册表修改记录、可疑文件创建记录、异常网络连接记录等
优点 适合事后取证和发现失陷主机
缺点 日志量巨大分析困难,攻击者可能会清除日志

2.4 取证分析实践

2.4.1 IRC相关问题

问题:IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用哪些TCP端口?

IRC(Internet Relay Chat,因特网中继聊天)是一种基于文本的实时网络聊天协议,采用客户端-服务器架构,主要用于多用户、多频道的即时交流。用户通过IRC客户端连接到IRC服务器,可以加入特定的频道与该频道中的所有用户聊天,也可以采用私聊方式。

当IRC客户端申请加入一个IRC网络时,需要完成注册操作,发送以下消息组合:

消息 说明
PASS 网络或服务器所需的口令(可选)
NICK 用户在网络上的昵称(必需)
USER 注册用户的个人信息(必需)
JOIN #channelname 加入指定频道

IRC常用的TCP端口:

端口 说明
6667 IRC默认非SSL端口,明文传输,最常用
6697 现代IRC最常用的SSL/TLS加密端口
6660-6669 IRC备用端口范围

2.4.2 僵尸网络相关问题

问题:僵尸网络是什么?僵尸网络通常用于什么?

僵尸网络(Botnet)是指采用一种或多种传播手段,将大量主机感染bot程序(僵尸程序)病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络。攻击者通过各种途径传播僵尸程序感染互联网上的大量主机,被感染的主机将通过一个控制信道接收攻击者的指令,组成一个僵尸网络。这个名称形象地描述了这类危害的特点:众多的计算机在不知不觉中如同僵尸群一样被人驱赶和指挥着,成为被人利用的工具。

僵尸网络的常见用途:

用途 说明
分布式拒绝服务攻击(DDoS) 利用大量僵尸机同时向目标服务器发送流量,使其瘫痪
发送垃圾邮件 批量发送广告、诈骗邮件,传播恶意链接或附件
窃取敏感数据 盗取用户账号密码、银行卡信息、个人隐私数据等
加密货币挖矿 占用僵尸机的计算资源挖掘比特币、以太坊等虚拟货币
点击欺诈 自动点击广告链接,帮助攻击者非法获取广告收益
作为攻击跳板 隐藏攻击者真实身份,增加追踪难度

2.4.3 蜜罐主机与IRC服务器通信分析

在Wireshark中打开botnet_pcap_file.dat文件,设置过滤条件筛选源IP为172.16.134.191、目的端口为6667(IRC默认端口)的数据包:

image

可以得到蜜罐主机与以下4台IRC服务器进行了通信:

  • 209.126.161.29
  • 66.33.65.58
  • 63.241.174.144
  • 217.199.175.10

2.4.4 统计访问僵尸网络的主机数量

步骤一:安装tcpflow工具

在Kali虚拟机中安装tcpflow:

sudo apt update
sudo apt-get install tcpflow

可通过以下命令查看安装版本:

tcpflow --version

image

步骤二:分流数据包

使用tcpflow从botnet_pcap_file.dat文件中筛选出与IP为209.196.44.172且端口为6667的主机相关的所有TCP流量数据:

tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667"

执行后,tcpflow会生成report.xml报告文件和独立的TCP连接流文件,文件名格式为:源IP.源端口-目的IP.目的端口。

image

步骤三:统计访问数量

在僵尸网络场景中,受感染的主机会主动去连接服务器。因此,需要查找源IP为209.196.44.172的文件,即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 | wc -l

grep -a "^:irc5.aol.com 353":筛选IRC服务器发送的353响应(频道用户列表)
sed:清理修剪,只保留用户名列表
tr ' ' '\n':将空格转换为换行符
tr -d "\15":删除隐藏字符
grep -v "^$":删除空行
sort -u:排序去重
wc -l:计数

image

可以看到有3461个不同的主机访问了该僵尸网络。

2.4.5 分析攻击蜜罐主机的IP地址

使用tcpdump命令从botnet_pcap_file.dat文件中筛选出所有向蜜罐主机172.16.134.191发送数据包的源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 > attack_ips.txt
wc -l attack_ips.txt

tcpdump -n -nn -r:读取数据包文件,不解析主机名和端口名
dst host 172.16.134.191:筛选目的地址为蜜罐主机的数据包
awk -F " " '{print $3}':提取源IP地址和端口
cut -d '.' -f 1-4:从"源IP.源端口"中分离出纯IP地址
sort | uniq:排序去重

image

共有165个ip地址,打开txt文档可以看到它们

image

2.4.6 分析攻击的安全漏洞

分析步骤一:查看协议分布

在Wireshark中打开botnet_pcap_file.dat文件,选择Statistics → Protocol Hierarchy,分析网络流量中各种协议的分布情况。

image

从分析结果可以看出,攻击者大部分使用了TCP数据包,占比约99.7%,也有使用少量的UDP数据包,占比约0.3%。

分析步骤二:筛选TCP端口

在Kali终端中使用以下命令筛选蜜罐主机响应的TCP端口即发送SYN-ACK的端口

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

image

分析步骤三:筛选UDP端口

使用以下命令筛选蜜罐主机发送的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

image

攻击端口与漏洞分析汇总:

协议 端口 服务 可能的漏洞
TCP 135 RPC Windows远程过程调用漏洞(MS03-026等)
TCP 139 NetBIOS SMB/NetBIOS漏洞
TCP 445 SMB Windows文件共享漏洞(MS08-067等)
TCP 25 SMTP 简单邮件传输协议漏洞
TCP 80 HTTP Web服务缓冲区溢出漏洞
TCP 4899 Radmin 远程控制软件漏洞
UDP 137 NetBIOS NetBIOS信息泄露

2.4.7 分析成功的攻击

(1)TCP 135端口分析
在Wireshark中设置过滤条件:ip.addr==172.16.134.191 and tcp.port==135

image

只有三次握手的数据包,没有后续的恶意数据包,客户端很快发送FIN请求断开连接。135端口虽被成功连接,但未被成功利用。

(2)TCP 139端口分析
设置过滤条件:ip.addr==172.16.134.191 and tcp.port==139

image

具有三次握手的数据包,攻击者尝试访问共享目录\PC0191\c,但服务器返回RST拒绝访问,后续没有恶意数据包。139端口虽然被成功连接,但未被成功利用。

(3)TCP 25端口分析

设置过滤条件:ip.addr==172.16.134.191 and tcp.port==25

image

具有三次握手的数据包,但连接建立后没有后续的恶意数据包,服务器很快发送FIN,ACK请求断开连接。25端口虽然被成功连接,但未被成功利用,可能只是端口扫描行为。

(4)TCP 445端口分析
设置过滤条件:ip.addr==172.16.134.191 and tcp.port==445

image

外部主机195.36.247.77向172.16.134.191:445发起TCP三次握手,进行了NTLMSSP认证协商且通过认证,发起Tree Connect请求访问共享资源,多个源IP向目标发起大量SMB请求,包含重复的NTLMSSP认证、Tree Connect到不同路径以及大量的SAMR/DCE/RPC操作。

最关键的是攻击者通过445端口的SMB协议,成功删除了目标主机上的系统文文件C:\System32\PSEXESVC.EXE。如下图所示:

image

TCP 445端口攻击成功。攻击方式为:初始连接 → 认证 → 权限扩张 → 恶意文件操作。攻击者能够删除System32目录下的文件,说明可能通过漏洞利用或弱口令攻击获得了管理员权限。属于SMB漏洞利用。

(5)TCP 4899端口分析

设置过滤条件:ip.addr==172.16.134.191 and tcp.port==4899

image

外部主机向172.16.134.191:4899发起TCP三次握手,随后发送了大量rbakcupl > radmin-port [PSH,ACK]数据包,表示攻击者通过4899端口持续传输数据,PSH标志表示"紧急需要立即处理的数据",说明攻击者已建立稳定的通信通道

攻击者还发送了目录遍历攻击命令:HEAD /cgi/../../../../../winnt/system32/cmd.exe?/c+dir。如下图所示

image

TCP 4899端口攻击成功。攻击方式为:初始连接 → 数据传输 → 恶意命令执行。攻击者通过4899端口的Web界面漏洞成功执行了系统命令。属于远程控制软件(Radmin)漏洞利用。

(6)TCP 80端口分析

设置过滤条件:ip.addr==172.16.134.191 and tcp.port==80

image

在正常的TCP三次握手后,攻击者向80端口发送了由大量字符"c"组成的数据包,这是一个典型的缓冲区溢出攻击载荷,在攻击包发送后,服务器没有返回任何RST或ICMP错误信息,说明服务器接收并处理了这个恶意请求,在攻击之后,客户端和服务器之间还有正常的HTTP通信,虽然此次攻击没有导致服务崩溃,但攻击者可能已在服务器中植入后门或维持了访问权限。

TCP 80端口攻击成功。攻击方式为:初始连接 → 缓冲区溢出攻击 → 恶意代码执行。攻击者通过80端口的Web服务漏洞,成功发送了包含超长字符串的恶意载荷,导致目标服务器缓冲区溢出。属于Web服务缓冲区溢出漏洞利用。

(7)UDP 137端口分析

设置过滤条件:ip.addr==172.16.134.191 and udp.port==137

image

虽然具有大量的NetBIOS服务扫描活动,但数据包内容均为正常的名称查询与响应,未包含任何攻击载荷。未被攻击者成功利用。

所以成功的攻击有:TCP连接445端口、4899端口、80端口的攻击。

3. 学习感悟与思考

通过这次实验我深刻认识到网络安全威胁的复杂性和多样性。在恶意代码分析环节,通过对RaDa样本的文件类型识别、脱壳处理和逆向分析,我不仅掌握了PE文件结构、UPX加壳机制等基础知识,更锻炼了使用IDA Pro进行静态分析的实践能力。在网络取证实践中,通过Wireshark和tcpflow等工具对僵尸网络流量进行分析,让我直观了解到攻击者的操作手法和入侵路径,这种从网络流量中还原攻击场景的能力对安全防护至关重要。

实验中的NetBIOS信息泄露、SMB文件共享漏洞和HTTP服务漏洞等案例让我认识到默认配置的安全隐患,以及良好配置和更新在防御中的作用。通过IDA Pro、Wireshark、tcpdump等工具的协同使用,我也深刻体会到工具链的合理选择对分析效率的提升。

本次实验让我对恶意代码分析和网络取证有了更深入的理解,这不仅提升了我的技术能力,也让我认识到网络安全是一个持续对抗的领域,需要不断学习新知识、掌握新工具,才能有效应对日益增长的安全威胁。

posted @ 2025-11-10 22:50  20232303朱佳禾  阅读(9)  评论(0)    收藏  举报