一、实验内容
1、恶意代码文件类型标识、脱壳与字符串提取
2、使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
3、分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
4、取证分析实践
二、实验过程
1.恶意代码文件类型标识、脱壳与字符串提取
对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者。
1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具
输入
file RaDa.exe
学习通下载peid.rar并解压,查看加壳类型
2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理

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

2.使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
1)寻找crackme1.exe的特定输入
直接运行crackme1.exe尝试
没有输入时,显示的是“I think you are missing somethhing.”
只有1个输入时,显示的是“Pardon? What did you say?”
多于一个输入时,显示的是“I think you are missing somethhing.”可以推断出,特定输入只有一个值。
2.使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
1)寻找crackme1.exe的特定输入
直接运行crackme1.exe尝试
没有输入时,显示的是“I think you are missing somethhing.”
只有1个输入时,显示的是“Pardon? What did you say?”
多于一个输入时,显示的是“I think you are missing somethhing.”可以推断出,特定输入只有一个值。
打开IDA Pro,选择选项PE Executable,选择crackme1.exe,打开IDA View-A页面。
点击View->Graphs->Function calls,打开函数调用图,发现sub_401280调用了strcmp、printf等这些有关字符串处理的函数,可以合理推测它在参数判断中有重要作用。
在Functions页面点击sub_401280。
点击View->Graphs->Flow chart,打开函数流程图。
对函数流程图进行如下分析,可以合理推测正确的输入参数是“I know the secret.”
按分析输入相应的参数,显示“”
2)分析crackme2.exe
直接运行crackme2.exe进行尝试
可以看出依旧是1个输入
按照上次的方式打开函数调用图,发现sub_401280调用了strcmp、fprintf、putchar、puts这些字符串处理函数,推测它具有重要作用。
在Functions页面点击sub_401280,再打开函数流程图。
这一流程和crackme1.exe中看到的流程类似,但多了一个第一个参数的判断流程,由此可以推断出函数需要将第一个参数改成特定名称。
按分析结果改变文件的名称为crackmeplease.exe,再次运行,程序输出了成功信息。
3.分析一个自制恶意代码样本rada
1)信息获取
使用file命令和md5sum命令,得到RaDa.exe的摘要和基本信息。
打开process explorer,然后运行脱壳后的Rada,双击进程,查看Strings窗口。在Strings窗口中,可以看到如下图的一些重要信息。
2)问题回答
问题一:提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息。
回答一:它的MD5摘要为 caaa6985a43225a0b3add54f44a0d4c7。其他基本信息:RaDa.exe 是32位 Windows GUI可执行文件,面向Intel x86处理器,内部含3个段。
问题二:找出并解释这个二进制文件的目的。
回答二:这是一个远程控制后门程序。它先创建专属工作目录,通过开机自启动实现持久化潜伏与环境准备,随后连接远程C&C服务器,等待并执行数据窃取、参与DDoS攻击、充当跳板等恶意指令。
问题三:识别并说明这个二进制文件所具有的不同特性。
回答三:该二进制文件是经UPX压缩壳保护、VBA编译的模块化后门程序,具备持久化与网络通信能力,特性包括:开机自启动、动态创建工作目录、与硬编码C&C服务器HTTP通信、下载并执行后续恶意载荷。
问题四:识别并解释这个二进制文件中所采用防止被分析或逆向工程的技术。
回答四:该文件采用 UPX 加壳技术,通过压缩原始代码、劫持入口点隐藏程序逻辑。应对方法:使用脱壳工具还原原始代码,通过动态调试绕过反调试机制。
问题五:对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由。
回答五:该RaDa恶意代码样本属于后门程序。理由:它不具备自我复制或主动传播能力,需通过伪装诱导用户执行,核心行为是在受害主机建立隐蔽持久的远程访问通道,供攻击者完全控制主机。
问题六:给出过去已有的具有相似功能的其他工具。
回答六:功能相似的工具包括:后门程序灰鸽子,可创建后门的工具msfvenom、veil。
问题七:可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
回答七:可以调查出开发作者。该二进制文件开发者为Raul Siles && David Perez,可在IDA Pro中找到相关信息。
问题八:给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。
回答八:
1. 基于特征码的检测
原理
基于特征码的检测是最传统的恶意软件检测方法。特征码是从已知恶意软件样本中提取的一段唯一标识符,通常是恶意代码中的特定字节序列。防病毒软件使用这些特征码来匹配和识别系统中的恶意软件。
实施步骤
- 收集已知恶意软件样本:从多个来源收集已知的恶意软件样本,包括公共数据库和私人样本库。
- 提取特征码:使用专门的工具(如YARA规则引擎)从这些样本中提取特征码。
- 构建特征码数据库:将提取的特征码存储在一个数据库中,以便快速查找和匹配。
- 扫描系统文件:使用防病毒软件扫描系统中的所有文件,将每个文件的内容与特征码数据库进行比对。
- 匹配和报告:如果发现匹配的特征码,防病毒软件会标记该文件为恶意软件,并提供相应的处理建议(如删除、隔离或修复)。
2. 基于行为的检测
原理
基于行为的检测方法通过监控软件的行为来识别恶意活动。这种方法不依赖于已知的特征码,而是关注软件在运行时的行为模式,如文件操作、网络通信、注册表修改等。
实施步骤
- 定义正常行为模型:建立一个系统正常行为的基线模型,包括常见的文件操作、网络活动、注册表修改等。
- 实时监控:使用行为监控工具(如EDR解决方案)实时监控系统中的所有活动。
- 异常检测:将监控到的行为与正常行为模型进行对比,识别出偏离正常行为的活动。
- 分析和响应:对异常行为进行进一步分析,确定是否存在恶意活动。如果确认是恶意活动,采取相应的应对措施(如终止进程、隔离文件等)。
3. 基于机器学习的检测
原理
基于机器学习的检测方法使用机器学习算法来识别恶意软件。这些算法通过训练大量已知的恶意软件和良性软件样本,学习区分恶意和良性软件的特征。
实施步骤
- 数据收集:收集大量的已知恶意软件和良性软件样本,作为训练数据。
- 特征提取:从样本中提取特征,如文件头信息、API调用、字符串、行为模式等。
- 模型训练:使用机器学习算法(如决策树、随机森林、神经网络等)对提取的特征进行训练,生成分类模型。
- 模型评估:使用交叉验证等方法评估模型的性能,确保其准确性和鲁棒性。
- 部署和检测:将训练好的模型部署到检测系统中,对系统中的文件和进程进行实时检测。
4. 基于沙箱的检测
原理
基于沙箱的检测方法通过在隔离环境中运行可疑文件,观察其行为来判断是否为恶意软件。沙箱环境可以防止恶意软件对真实系统造成损害。
实施步骤
- 设置沙箱环境:创建一个与生产环境隔离的虚拟机或容器,作为沙箱环境。
- 上传可疑文件:将可疑文件上传到沙箱环境中。
- 运行和监控:在沙箱环境中运行可疑文件,并使用监控工具记录其行为,包括文件操作、网络通信、注册表修改等。
- 分析行为:将监控到的行为与已知的恶意行为模式进行对比,判断是否为恶意软件。
- 报告和处理:生成详细的报告,描述可疑文件的行为,并提供处理建议。
5. 基于信誉的检测
原理
基于信誉的检测方法通过评估文件和URL的信誉来识别恶意软件。这种方法依赖于一个信誉数据库,该数据库包含已知的恶意文件和URL的列表。
实施步骤
- 构建信誉数据库:收集已知的恶意文件和URL,建立一个信誉数据库。这些数据可以从公共威胁情报平台、安全厂商和社区获取。
- 文件和URL哈希计算:对系统中的文件和URL计算哈希值(如MD5、SHA-256)。
- 哈希值比对:将计算得到的哈希值与信誉数据库中的哈希值进行比对。
- 信誉评分:根据比对结果,为文件和URL分配一个信誉评分。高评分表示可能存在恶意。
- 处理和报告:根据评分结果,采取相应的处理措施,如隔离文件、阻止访问URL等
4.取证分析实践
数据源是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。回答下列问题:
1) IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
IRC (Internet Relay Chat) 是一种实时的互联网文本消息协议,它允许用户加入频道并与其他用户进行群聊,或者通过私信功能一对一交流。
当一个IRC客户端想要加入一个IRC网络时,它会发送一个连接请求到服务器,并且在成功建立连接后,通常会发送一个NICK命令来指定用户的昵称,以及一个USER命令来提供一些额外的用户信息。
IRC最常用的TCP端口是6667,但是也可以使用其他端口如6660-6669范围内的端口号,以及更安全的SSL/TLS加密连接使用的6697端口。
(2)僵尸网络是什么?僵尸网络通常用于什么?
僵尸网络(Botnet)是由一系列被恶意软件感染的计算机组成的网络,这些计算机可以被远程控制者(通常称为“僵尸牧者”或“Botmaster”)用来执行各种非法活动。
僵尸网络通常用于以下几种目的:
分布式拒绝服务攻击(DDoS):通过大量的请求淹没目标网站或服务,导致其无法正常响应合法用户的请求。
垃圾邮件发送:利用僵尸网络中的计算机大量发送未经请求的电子邮件,以推广产品或传播恶意软件。
点击欺诈:自动产生虚假的网页点击,以增加广告费用或影响搜索引擎排名。
信息窃取:从受感染的计算机中收集敏感数据,如银行账户信息和个人身份信息。
密码破解:使用僵尸网络中的计算资源尝试暴力破解密码。
僵尸网络的存在对网络安全构成了严重威胁,因此打击和预防僵尸网络活动是网络安全领域的一个重要方面
(3)蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
首先,我们使用Wireshark打开数据文件botnet_pcap_file.dat,过滤源IP地址为172.16.134.191,目的端口为6667或6697

设置过滤条件为:ip.src == 172.16.134.191 && tcp.dstport == 6667 || tcp.dstport == 6697

过滤统计结果有如下五个IP地址:
63.241.174.144
66.33.65.58
217.199.175.10
209.196.44.172
209.126.161.29
(4)在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
首先输入:apt install tcpflow
对捕获到的数据包进行分流,指令为:tcpflow -r botnet_pcap_file.dat 'host 209.196.44.172 and port 6667'
我们得到了这样的三个文件

209.196.044.172.06667-172.016.134.1 91.01152,report.xml
我们关心的是访问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
命令解释:
grep -a "^:irc5.aol.com 353":查找以 :irc5.aol.com 353 开头的行。
sed "s/^:irc5.aol.com 353 rgdiuggac @ #x[^x]*x ://g"在文本中查找所有以 :irc5.aol.com 353 rgdiuggac @ #x 开头,后跟零个或多个不是 x 的字符,然后以 x (x 后跟一个空格)结尾的字符串,并将这些字符串删除。
tr ' ' '\n'将空格替换为换行符。
tr -d "\15"删除回车符。
grep -v "^$"删除所有空行。
sort -u去除重复的行。
wc -l统计行数。

从输出中可以看到有3461个不同的主机访问了这一僵尸网络。
(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 > 20232406.txt;wc -l 20232406.txt,将攻击蜜罐主机的ip筛选出来并输出至文件中。
命令解释
tcpdump -n -nn -r botnet_pcap_file.dat 'dst host 172.16.134.191'筛选保存的数据包,不要解析ip地址和端口号。
awk -F " " '{print $3}'使分隔符为空格,筛选出所有源地址。
cut -d '.' -f 1-4将输出整理为ip地址的格式。
sort | uniq | more > 20222316.txt排序,删除重复行,按页显示,输出。
wc -l 20232406.txt计数。

总计有165个IP地址用于攻击蜜罐主机,下图中截取了文件的开头和结尾


(6)攻击者尝试攻击了那些安全漏洞?
点击wireshark的统计->协议分级,可以看到有tcp包和udp包,tcp包占了大部分。

在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

从中可以看出响应的端口有135(RPC远程过程调用)、139(NetBIOS/SMB)、25(SMTP简单邮件传输协议)、445(SMB,用于文件、打印机等的共享)、4899(Radmin,用于远程控制)、80(HTTP)。
再使用命令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端口。

从中可以看出响应的端口有137(NetBIOS)
(7)那些攻击成功了?是如何成功的?
输入筛选条件tcp.port == 135 && ip.dst == 172.16.134.191
发现只是普通地建立了一个连接

输入筛选条件tcp.port == 139 && ip.dst == 172.16.134.191

输入筛选条件tcp.port == 25 && ip.dst == 172.16.134.191
观察报文发现,除了“三次握手”建立连接和“四次挥手”释放连接外没有其他数据传输。


输入筛选条件tcp.port == 445 && ip.dst == 172.16.134.191
观察报文发现,返回信息中含有\PIPE\lsass,通过搜索可知,这是一个远程调用,所以攻击者肯定是获得了权限。
可以发现数据包中有PSEXESVC.exe,是一种蠕虫病毒,因此端口445被攻击。



输入筛选条件tcp.port == 4899 && ip.dst == 172.16.134.191
观察报文发现,此时有大量数据交互。攻击成功

输入筛选条件tcp.port == 80 && ip.dst == 172.16.134.191
观察报文发现,向目标成功请求默认网页。攻击成功


输入筛选条件udp.port == 137 && ip.dst == 172.16.134.191

三、问题及解决方案
- 问题1:打开process explorer,然后运行脱壳后的Rada,双击进程,查看Strings窗口显示错误。
- 问题1解决方案:在出现这个提示时,不要点确定。
![image]()
四、学习感悟、思考等
通过实验,我对恶意软件的种类、工作方式以及对系统的影响有了更加深刻的理解。例如,通过分析rada恶意代码样本,我了解到恶意软件可以通过修改注册表、执行网络攻击等多种手段实现其目的。
在实验过程中,我学会了使用多种工具和技术来分析恶意软件,如使用file命令识别文件类型、使用IDA Pro进行静态和动态分析、使用tcpdump和Wireshark分析网络流量等。这些技能不仅对恶意软件分析有用,也适用于其他信息安全领域的研究。




















