1、实验内容
1.1恶意代码文件类型标识、脱壳与字符串提取
对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
1.2使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
1.3分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
(2)找出并解释这个二进制文件的目的;
(3)识别并说明这个二进制文件所具有的不同特性;
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
(6)给出过去已有的具有相似功能的其他工具;
(7)可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
(8)给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。
1.4取证分析实践
Windows 2000系统被攻破并加入僵尸网络
问题: 数据源是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。回答下列问题:
(1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
(2)僵尸网络是什么?僵尸网络通常用于什么?
(3)蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
(4)在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
(5)哪些IP地址被用于攻击蜜罐主机?
(6)攻击者尝试攻击了那些安全漏洞?
(7)那些攻击成功了?是如何成功的?
2、实验过程
2.1 恶意代码文件类型标识、脱壳与字符串提取
2.1.1 分析原始rada样本
在Kali虚拟机中使用file命令分析目标文件的类型和结构。

分析结果表明RaDa.exe是一个32位Windows GUI可执行文件,是一个带有图形用户界面的应用程序。它是针对Intel x86处理器设计的,内部包含3个段。
在Windows主机中使用软件PEiD对目标文件进行分析。利用软件PEiD可以发现文件使用了UPX加壳工具。

分析结果表明PEiD检测到该文件使用了UPX加壳,并给出了UPX加壳的版本区间,同时还显示Markus & Laszlo是该UPX的开发者。
2.1.2 分析脱壳后的RaDa样本
对RaDa样本进行脱壳处理

打开IDA Pro,选择PE Executable,即对Windows下的可执行文件进行分析。所需分析的文件是经过脱壳后的RaDa_unpacked.exe文件。

选择IDA ViewA,在地址为00403F7A处可以看到RaDa文件的作者信息,为Raul Siles && David Perez;在地址为00403FD4处可以看到RaDa文件的创作时间,为2004年9月。

2.2 利用IDA Pro静态或动态分析所给的exe文件
2.2.1分析文件crackme1.exe
在Windows主机的PowerShell中运行此文件,发现当输入额外的参数不为1时,文件给出提示“I think you are missing something.”,当输入1个参数时,文件提示“Pardon? What did you say?”。说明该文件需要额外输入一个正确的参数。

在IDA Pro中打开文件crackme1.exe,选择View→Graphs→Function calls,打开该文件的函数调用图。

在函数调用图中,发现函数sub_401280会调用strcmp用于字符串比较的库函数以及fprintf、printf等涉及IO的库函数,说明sub_401280函数可能会对接收的参数进行比较判断,并输出相应语句。

选择Windows→Functions,打开函数管理工具。

在函数管理窗口中,双击需分析的函数sub_401280,打开该函数的流程图。

从函数流程图中分析可知,输入的参数不为2时,该程序将给出输出“I think you are missing something.”。当程序得到两个输入时,如果第二个输入为“I know the secret”,则程序给出输出“You know how to speak to programs, Mr. Reverse-Engineer”;否则输出“Pardon? What did you say?”。因此,我们需要输入的第二个参数为字符串“I know the secret”。

在Windows主机的PowerShell中再次运行此文件,输入额外参数“I know the secret”,得到了正确的回答。

2.2.2分析文件crackme2.exe
在Windows主机的PowerShell中运行此文件,发现返回情况大体与crackme1.exe相似.但输入额外参数为“I know the secret”时,仍然无法验证通过,说明还需寻找适合文件二的正确参数。

打开crackme2.exe的函数调用图,发现函数sub_401280会调用strcmp、fprintf、puts、putchar等可疑的库函数,说明sub_401280函数可能仍是对接收的参数进行比较判断的函数。

在函数管理工具中打开函数sub_401280的流程图,分析可知,除crackme1所具有的比较内容外,crackme2还对输入的第一个参数进行了比较,要求其为“crackmeplease.exe”。说明我们需要将该文件的文件名修改为crackmeplease.exe再运行。

修改文件名,再次输入参数。发现可以获得正确的结果。这里需要在cmd中运行,不要在PowerShell下运行。

2.3 分析恶意代码样本RaDa,并撰写报告
2.3.1分析文件的基本信息
通过输入以下命令对RaDa文件的进行文件类型识别、完整性验证以及时间戳分析:
file RaDa.exe
md5sum RaDa.exe
exiftool RaDa.exe | grep "Time Stamp"
从返回值中可以看出RaDa.exe是一个32位Windows GUI程序,其md5摘要值为caaa6985a43225a0b3add54f44a0d4c7,且在2004年10月30日编译的。

2.3.2分析文件的目的
在IDA Pro中分析脱壳后的RaDa文件。打开函数调用图,发现函数sub_404FB0下有很多的子函数,可以分析该函数的流程图以获取更多信息。


查看sub_404FB0流程图发现,该文件主要通过修改注册表和定义恶意路径,以实现恶意软件的持久化驻留与远程控制。具体分析如下:
命令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很可能是攻击者的命令控制服务器。后续所有的下载指令、上传数据都会与这个服务器通信。

对于四条命令命令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"。它们连续调用了字符串拼接函数,分别将四个字符串复制到内存中。其中RaDa_commands.html可能是攻击者用来下发指令的网页文件。cgi-bin可能是Web服务器上存放脚本的通用目录。download.cgi可能是用于下载新指令或恶意模块的脚本。upload.cgi可能是用于上传窃取数据的脚本。使得这个恶意文件具备了接收命令与回传数据的双向通信能力。

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

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

尝试运行脱壳后的RaDa进程,发现即使使用了管理员身份,仍无法正常运行。

2.3.3问题回答
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
md5摘要为caaa6985a43225a0b3add54f44a0d4c7。其他的基本信息包括:RaDa.exe是一个32位Windows GUI可执行文件,是一个带有图形用户界面的应用程序。它是针对Intel x86处理器设计的,内部包含3个段。
(2)找出并解释这个二进制文件的目的;
这是一个远程控制的后门程序。首先它创建了专属的工作目录,构建开机自启动的持久化机制进行潜伏与环境准备,随后它连接远程C&C服务器,最终等待并执行任意恶意指令,比如数据窃取、参与DDoS攻击、充当跳板等。
(3)识别并说明这个二进制文件所具有的不同特性;
该二进制文件是一个由添加了UPX压缩壳的、使用VBA编译的、具备持久化和网络通信能力的模块化后门程序。它的特性包括:开机自启动,动态动态创建工作目录、与硬编码C&C服务器进行HTTP通信,下载和执行后续恶意载荷。
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
该文件采用了UPX加壳技术,它通过压缩原始代码和劫持入口点隐藏程序逻辑。其应对方法是使用UPX脱壳工具还原原始代码,并通过动态调试绕过反调试机制。
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
属于后门程序。它不具备自我复制或主动传播的能力,而是通过伪装诱导用户执行,其主要行为是在受害主机上建立一个隐蔽、持久的远程访问通道,以便攻击者可以完全控制该主机。
(6)给出过去已有的具有相似功能的其他工具;
msfvenom和veil。
(7)可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
可以,该二进制文件的开发者是Raul Siles && David Perez。在IDA Pro中可以找到开发作者的信息。能够获取该信息需要作者在创作时就留下此类信息,同时该文件还需要以明文的形式展示,此外还需要有一些专门的分析工具,比如IDA Pro。
(8)给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。
- 基于特征码的检测
原理:提取 RaDa 恶意软件独有的字节序列(特征码),如包含 “RaDa_commands.html”“download.cgi” 等字符串的代码段、__vbaStrCopy函数调用的汇编指令特征,或其 UPX 加壳后的特征字节。
实现:将这些特征码加入杀毒软件病毒库(如 ClamAV、卡巴斯基),当扫描文件时,通过特征码匹配识别恶意样本。例如,对可疑文件进行二进制扫描,若命中 “RaDa_commands.html” 的特征字节序列,则判定为恶意软件。 - 行为分析检测
原理:监控系统中进程的异常行为,RaDa 恶意软件具有创建特定目录(如C:\RaDa\tmp C:\RaDa\bin)、修改注册表实现开机自启(如添加HKCU\Software\Microsoft\Windows\CurrentVersion\Run键值)、与含 “cgi-bin”“download.cgi” 的 URL 进行网络通信等行为。
实现:使用行为监控工具(如 Sysmon、Process Monitor),设置规则捕获 “创建特定目录”“修改 Run 注册表项”“发起含特定路径的 HTTP 请求” 等行为,一旦触发规则则报警。 - 网络流量检测
原理:RaDa 与 C&C 服务器通信时,HTTP 请求中会包含 “RaDa_commands.html”“cgi-bin/download.cgi” 等独特路径。
实现:通过网络入侵检测系统(如 Snort)或流量分析工具(如 Wireshark),配置规则检测包含这些路径的 HTTP 流量。例如,在 Snort 中编写规则:alert tcp $EXTERNAL_NET any -> $HOME_NET 80 (content:"/RaDa_commands.html"; msg:"RaDa Malware Command Fetch"; sid:1000001;),当流量匹配时触发告警。 - 文件完整性与哈希检测
原理:预先计算 RaDa 恶意样本的哈希值(如 MD5、SHA256),并监控系统中文件的哈希变化;同时,RaDa 会在特定目录(如C:\RaDa)生成恶意文件,可通过监控这些目录的文件创建行为实现检测。
实现:使用文件完整性监控工具(如 OSSEC),定期扫描系统文件,对比哈希值是否与已知 RaDa 样本哈希一致;同时监控C:\RaDa等可疑目录,若有新文件创建则进行哈希校验或行为分析。 - 内存分析检测
原理:RaDa 运行时会将代码加载到内存中,其中包含 “RaDa_commands”“upload.cgi” 等特征字符串,且可能存在进程注入、异常内存区域(如 UPX 脱壳后的内存段)。
实现:使用内存取证工具(如 Volatility),对目标进程内存进行分析,查找包含特征字符串的内存块,或检测异常的内存权限(如可执行的 writable 内存段)。例如,通过 Volatility 的strings插件提取内存字符串,若发现 “RaDa_commands.html” 则判定存在恶意软件。
2.4 取证分析实践
(1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
IRC 的定义:IRC(Internet Relay Chat)即互联网中继聊天,是一种基于客户端 - 服务器架构的即时通讯协议,用于实现多用户实时聊天,支持频道(Channel)、私人消息、文件传输等功能,广泛应用于技术交流、社区互动等场景。
加入 IRC 网络时发送的消息:客户端需发送 NICK(设置昵称)和USER(设置用户信息) 消息来完成注册,例如 NICK yournick 和 USER username 0 * :Real Name。
IRC 使用的 TCP 端口:默认非加密端口为6667,此外常用端口还包括 6660-6669 区间的端口;若采用 SSL 加密通信,常用端口为6697。
(2)僵尸网络是什么?僵尸网络通常用于什么?
僵尸网络的定义:由大量被恶意软件(如僵尸程序、木马)感染的计算机(“僵尸机”)组成,受攻击者(“控制者”)通过命令与控制(C&C)服务器集中操控的网络。
僵尸网络的常见用途:
发起DDoS 攻击:利用大量僵尸机向目标服务器发送流量,使其瘫痪。
发送垃圾邮件:批量发送广告、诈骗邮件,传播恶意链接或附件。
窃取敏感数据:如用户账号密码、银行卡信息、个人隐私数据等。
进行加密货币挖矿:占用僵尸机的计算资源挖掘比特币、以太坊等虚拟货币。
实施点击欺诈:自动点击广告链接,帮助攻击者非法获取广告收益。
(3)蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
蜜罐主机与IP地址为209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10的IRC服务器进行了通信。
在Wireshark中打开botnet_pcap_file.dat文件,通过命令ip.src172.16.134.191 and tcp.dstport6667,筛选源IP为172.16.134.191,目的端口为6667的数据包。经过分析可知,蜜罐主机与4台IRC服务器进行通信

(4)在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
有3461个不同的主机访问了这一僵尸网络。
在Kali虚拟机中需安装软件tcpflower。通过命令sudo apt update更新软件包列表索引,再通过命令sudo apt-get install tcpflow,下载tcpflower。
通过命令tcpflow -r botnet_pcap_file.dat “host 209.196.44.172 and port 6667”,使用tcpflow,从botnet_pcap_file.dat文件中,筛选出与IP为209.196.44.172且端口为6667的主机相关的所有TCP流量数据。

执行后,tcpflow会生成report.xml报告文件,包含了TCP流量的统计信息。

在僵尸网络场景中,受感染的主机会主动去连接服务器。因此,此处需要查找源IP为209.196.44.172的文件,使用命令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,精确统计访问僵尸网络服务器的不同客户端数量。

(5)哪些IP地址被用于攻击蜜罐主机?
165个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 > 20232317_1025.txt;wc -l 20232317_1025.txt,从botnet_pcap_file.dat文件中,找出所有向主机172.16.134.191发送数据包的源IP地址,保存并统计它们的具体数值。



(6)攻击者尝试攻击了那些安全漏洞?
在Wireshark中打开将botnet_pcap_file.dat文件,选择点Statistics→Protocol Hierarchy,分析网络流量中各种协议的分布情况和层次结构。从分析结果中可以看出,攻击者大部分使用了TCP数据包(占比约99.7%),也有使用少量的UDP数据包(占比约0.3%)。

在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,筛选主机172.16.134.191发起的所有TCP连接的源端口号;使用命令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数据包的源端口号。

对于TCP的分析结果可知,使用的端口有135(RPC,Windows远程过程调用)、139/445(SMB,Windows文件共享)、25(SMTP,简单邮件传输协议)、4899(Remote Administrator,远程控制软件)、80(HTTP,网页服务)。对于UDP的分析结果可知,使用的端口为137(NetBIOS,Windows网络邻居功能)。
(7)那些攻击成功了?是如何成功的?
成功的攻击有:TCP连接得到445端口、4899端口、80端口。
分析部分:
(1)TCP连接135端口
在Wireshark中打开将botnet_pcap_file.dat文件,设置过滤条件为ip.addr172.16.134.191 and tcp.port135。

分析可知,对于TCP连接的135端口,只有三次握手的数据包,而没有后续的恶意数据包,且客户端很快发送FIN请求断开连接。因此135端口虽被成功连接,但未被成功利用。
(2)TCP连接139端口
设置过滤条件为ip.addr172.16.134.191 and tcp.port139。

分析可知,对于TCP连接的139端口,具有三次握手的数据包,且攻击者尝试访问共享目录\PC0191\c,但服务器返回RST拒绝访问,后续也没有恶意数据包。因此139端口虽然被成功连接,但未被成功利用。
(3)TCP连接25端口
设置过滤条件为ip.addr172.16.134.191 and tcp.port25。

分析可知,对于TCP连接的25端口,具有三次握手的数据包。但接建立后,没有后续的恶意数据包,且服务器很快发送FIN,ACK请求断开连接。因此25端口虽然被成功连接,但未被成功利用。
(4)TCP连接445端口
设置过滤条件为ip.addr172.16.134.191 and tcp.port445。

分析可知,外部主机195.36.247.77向172.16.134.191:445发起TCP三次握手,进行了NTLMSSP认证协商且通过认证,发起Tree Connect请求以访问共享资源。
此外,多个源IP向目标172.16.134.191:445发起大量SMB请求,其中包含了重复的NTLMSSP认证、Tree Connect到不同路径以及大量的SAMR/DCE/RPC操作,这可能是横向移动或扫描行为。
最后,攻击者通过445端口的SMB协议,成功删除了目标主机172.16.134.191上路径为C:\System32\PSEXESVC.EXE的文件。而PSEXESVC.EXE是Windows系统中PsExec工具用于远程执行命令的服务端组件,删除该文件会导致PsExec无法正常工作,可能是攻击者为清除痕迹或阻止后续检测而采取的行动。

综上,对于TCP连接的445端口,已被攻击者成功利用。攻击者的具体攻击方式为:初始连接→认证→权限扩张→恶意文件操作。且攻击者能够删除System32目录下的文件,说明它可能通过漏洞利用或则和弱口令攻击的方式获得了管理员权限。这属于SMB漏洞利用。
(5)TCP连接4899端口
设置过滤条件为ip.addr172.16.134.191 and tcp.port4899。

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

最后,攻击者通过HTTP请求,发送目录遍历攻击HEAD /cgi/../../../../../winnt/system32/cmd.exe?/c+dir。

综上,对于TCP连接的4899端口,已被攻击者成功利用。攻击者的具体攻击方式为:初始连接→数据传输→恶意命令执行。攻击者通过4899端口的Web界面漏洞,成功执行了系统命令,说明4899端口已被用来控制目标主机。这属于远程控制软件漏洞利用。
(6)TCP连接80端口
设置过滤条件为ip.addr172.16.134.191 and tcp.port80。

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

综上,对于TCP连接的80端口,已被攻击者成功利用。攻击者的具体攻击方式为:初始连接→缓冲区溢出攻击→恶意代码执行。攻击者通过80端口的Web服务漏洞,成功发送了包含超长字符串的恶意载荷,导致目标服务器缓冲区溢出,从而控制目标主机。这属于Web服务缓冲区溢出漏洞利用。
(7)UDP连接137端口
设置过滤条件为ip.addr172.16.134.191 and udp.port137。

分析可知,对于UDP连接的137端口,虽然具有大量的NetBIOS服务扫描活动,但数据包内容均为正常的名称查询与响应,未包含任何攻击载荷,应当未被攻击者成功利用。
3.问题与解决
问题一:下了超级巡警,但脱一直壳失败找不到原因

解决一:找同学要了已经脱壳的文件
4.心得体会
本次实验学习系统监控与恶意代码分析,完成样本识别、脱壳、字符串提取,用 IDA Pro 静动态分析 exe 文件,分析恶意代码信息与目的,及 Snort 蜜罐流量取证,初步掌握相关原理与实现方式。
实验中,遇到了头疼的问题,一直脱壳失败找不到原因,最终拷贝了同学的已经脱壳的文件。感觉同学的指导以及AI的帮助,让我最终完成实验。
通过实验,我掌握了相关分析与取证方法,积累了问题排查经验,对我的网络与系统攻防技术学习有很大帮助。