目录
- 1. 实践内容
- 2. 实践过程
- 2.1 动手实践任务一
- 2.2 动手实践任务二:分析Crackme程序
- 2.2.1 crackme1.exe
- 2.2.2 crackme2.exe
- 2.3 分析实践任务一
- 2.4 分析实践任务二
- 3. 学习中遇到的问题及解决
- 4. 学习感悟、思考等
1. 实践内容
-
动手实践任务一:对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者。
-
动手实践任务二:分析Crackme程序
- 任务:在WinXP Attacker虚拟机中使用IDA Pro静态或动态分析crackme1.exe和crackme2.exe,寻找特定的输入,使其能够输出成功信息。
-
分析实践任务一:分析一个自制恶意代码样本rada,并撰写报告,回答问题。
-
分析实践任务二:Windows 2000系统被攻破并加入僵尸网络
- 任务:分析的数据源是用Snort工具收集的蜜罐主机5天的网络数据源,并通过编辑去除了一些不相关的流量并将其组合到了单独的一个二进制网络日志文件中,同时IP地址和其他特定敏感信息都已经被混淆以隐藏蜜罐主机的实际身份和位置,并回答问题。
2. 实践过程
2.1 动手实践任务一
具体操作如下:
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
- 在学习通中下载rada.rar压缩包,解压密码为rada,将压缩包中的两个文件粘贴到WinXPattacker中。
注:如无法粘贴可先为WinXPattacker安装VMware Tools
- 在命令行窗口中输入以下命令查看
RaDa.exe
的文件格式
cd 桌面
file RaDa.exe
根据命令结果可知,RaDa.exe
是PE32位的可执行文件,具有微软Windows系统的GUI界面,系统架构为英特尔80386系列,运行在32位Windows系统上
-
输入命令
strings RaDa.exe
查看RaDa.exe
文件恶意代码字符串
如上图所示,前面的字符串都是一些乱码,而最后出现了两个dll文件和三个没有文件名后缀的文件,根据这三个文件的文件名,猜测是程序或函数 -
输入命令
RaDa --authors
查看作者信息
-
输入命令
RaDa.exe --authors
查看作者信息
可以发现以上两个命令显示的作者信息是一致的 -
按如下步骤打开PEid工具
-
打开PEid工具后,点击文件右侧的按钮,打开
RaDa.exe
文件
-
打开后,根据提供的信息可知
RaDa.exe
文件的加壳为UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo
-
打开超级巡警虚拟机脱壳器
-
点击文件右侧的按钮选择文件
RaDa.exe
-
点击右侧脱壳按钮,脱壳后的文件将保存到RaDa.exe同一目录下
-
在命令行窗口中输入
strings RaDa_unpacked.exe
查看脱壳后的文件里的字符串
可以看到输出结果中有大量的函数调用名,但仅知道这些还不够,还需要进行反汇编 -
打开反汇编软件
IDA Pro Free
-
点击
New
按钮
-
选择
PE Executable
,打开桌面上的RaDa_unpacked.exe
文件
-
打开后如下图
-
我们重点关注右下角的
strings
窗口,将该窗口最大化
可以发现在该软件里看到的字符串与命令行窗口里的字符串相同 -
修改编码格式:在
strings
窗口中右键,点击Setup
,将Unicode
勾选上,点击OK
完成
-
可以看到字符串发生变化了
-
下拉,在地址
JDR0:00402D04
处,找到了作者信息
-
与命令
RaDa.exe --authors
得到的作者信息进行比对
可以发现,该作者信息与命令得到的作者信息一致,作者为Raul Siles & David Perez
2.2 动手实践任务二:分析Crackme程序
- 在学习通中下载
crackme1.exe
和crackme2.exe
文件,传入WinXPattacker虚拟机
2.2.1 crackme1.exe
-
打开命令行窗口,运行
crackme1.exe
,并依次输入不同的参数,根据输出的结果来猜测程序所需的特定输入
根据返回结果很难看出程序需要什么参数 -
打开反汇编软件
IDA Pro Free
,新建一个PE Executable
分析界面,对crackme1.exe
进行分析
-
打开右下角的
strings
窗口
可以看到该程序有四种输出语句,而刚才在命令行窗口中只试探出其中的两种,我们还需要找出另外两种输出的特定输入 -
打开
IDA View-A
窗口,然后依次点击页面上方的View - Graphs - Function calls
查看函数调用图
可以看到输出函数printf
被sub_401280
调用,sub_401280
还调用了strcmp
函数,应该是用于判断输入与密码是否一致 -
查看
sub_401280
代码块
-
依次点击页面上方的
View - Graphs - Flow Chart
查看代码流程图
结合之前我们在命令行窗口中做的尝试,根据以上汇编代码我们可以得知:sub_401280
先判断输入的参数个数- 如果参数个数不为一个,则跳转到false分支,调用
fprintf
输出I think you are missing something.
- 如果参数个数为一个,则跳转到true分支
- 调用
strcmp
判断输入是否为I know the secret
,如果不是则跳转到下一false分支,输出Pardon?What did you say?
- 如果输入是
I know the secret
,则跳转到下一true分支,输出You know how to speak to programs,Mr.Reverse—Engineer
- 调用
- 如果参数个数不为一个,则跳转到false分支,调用
-
验证我们的分析:在命令行窗口中输入
crackme1.exe “I know the secret”
注:
I know the secret
需要加上双引号
根据输出结果可知验证成功
2.2.2 crackme2.exe
注:分析
crackme2.exe
的过程与分析crackme1.exe
的过程基本一致,下面仅作一些必要的介绍
-
在命令行窗口观察不同的输入对应输出的区别
-
使用
IDA Pro Free
打开crackme2.exe
,查看Strings
窗口
可以看到有五种输出结果 -
查看函数调用图
可以看到fprintf
和strcmp
等函数被sub_401280
调用 -
查看代码流程图
结合之前我们在命令行窗口中做的尝试,根据以上汇编代码我们可以得知:sub_401280
先判断输入的参数个数- 如果参数个数不为一个,则跳转到false分支,调用
fprintf
输出I think you are missing something.
- 如果参数个数为一个,则跳转到true分支
- 调用
strcmp
判断调用的文件名是否为crackmeplease.exe
,如果不是则跳转到下一false分支,输出I hava an identity problem.
- 如果调用的文件名是
crackmeplease.exe
,则跳转到下一true分支- 调用
strcmp
判断输入是否为I know the secret
,如果不是则跳转到下一false分支,输出Pardon?What did you say?
- 如果输入是
I know the secret
,则跳转到下一true分支,输出正确语句
- 调用
- 调用
- 如果参数个数不为一个,则跳转到false分支,调用
-
验证我们的分析:将
crackme2.exe
文件名改为crackmeplease.exe
,在命令行窗口中输入crackmeplease.exe “I know the secret”
根据输出结果可知验证成功
2.3 分析实践任务一
- 输入命令
md5sum RaDa.exe
获取RaDa.exe
文件的MD5值
- 双击运行脱壳后的
RaDa_unpacked.exe
文件,然后打开监视工具Process Explorer
,用于监听RaDa_unpacked.exe
- 在
Process Explorer
中打开RaDa_unpacked.exe
,点击Strings
查看监听到的字符串信息- 根据图中信息可知,该程序先访问了
http://10.10.10.10/RaDa
,请求了RaDa_commands.html
页面,进行一些下载和上传的操作 - 并且还检查了是否在VMware虚拟机环境下,发现不是,开始进行DDoS Smurf攻击
- 此外,还修改了注册表,通过
Wscript.Shell
进行操作,将RaDa.exe
设为开机自动启动
- 之后还攻击了
192.168
、172.16
、10
三个内网网段 - 这里还能看到该程序的所有者为
Raul Siles & David Perez
,于2004年9月编写该程序
- 根据图中信息可知,该程序先访问了
1、提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
摘要为caaa6985a43225a0b3add54f44a0d4c7
2、找出并解释这个二进制文件的目的;
- 访问
http://10.10.10.10/RaDa
,请求该网站上的页面,进行下载和上传的操作 - 实施
DDoS Smurf
攻击 - 修改注册表,将
RaDa.exe
设为开机自动启动 - 攻击
192.168
、172.16
、10
三个内网网段
3、识别并说明这个二进制文件所具有的不同特性;
- 会将文件下载到C盘指定目录
- 实施
DDoS Smurf
攻击 - 将
RaDa.exe
设为开机自动启动
4、识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
- 使用了UPX加壳技术,不先进行脱壳而直接分析的话,会得到许多乱码结果
5、对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
- 该恶意程序通过修改注册表来实现开机自动运行,通过连接到特定的网站来下载文件,并在系统中留下后门,从而允许攻击者远程控制受影响的主机。此外,该程序实施DDoS攻击,其目的是使主机失去响应。该恶意程序并不通过自我复制来传播,也不伪装成合法程序诱使用户执行,因此它是蠕虫或木马。因此,该恶意软件应被归类为后门程序。
6、给出过去已有的具有相似功能的其他工具;
- 木马Bobax
- 特洛伊木马Setiri
7、可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
- 作者为
Raul Siles & David Perez
- 命令行输入
RaDa --authors
或RaDa.exe --authors
- 反编译该脱壳文件
RaDa_unpacked.exe
- 使用监视工具
Process Explorer
进行监听
- 命令行输入
2.4 分析实践任务二
- 在学习通下载
botnet_pcap_file.dat
文件,传入Kali虚拟机中 - 右键
botnet_pcap_file.dat
文件选择使用Wireshark打开,进行分析
可以看到,里面有各种协议的数据包,且ip地址也是多种多样
1、IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪些消息?IRC一般使用哪些TCP端口?
- IRC(Internet Relay Chat)是一种主要用于实时文本通信的在线聊天系统,它允许用户在不同的“频道”上进行交流。
- 当IRC客户端申请加入一个IRC网络时,它会发送一个用户认证消息,通常包括用户的昵称、用户标识和其他可能的认证信息。这个过程遵循IRC协议,客户端会与服务器进行一系列的通信,以完成注册、登录和加入频道等操作。
- IRC一般使用的TCP端口是6667和6697。端口6667通常用于未加密的IRC通信,而端口6697通常用于TLS/SSL加密的IRC通信,提供更安全的数据传输。
2、僵尸网络是什么?僵尸网络通常用于什么?
-
僵尸网络(Botnet)是由大量被恶意软件感染并被黑客远程控制的计算机组成的网络。这些计算机被称为“僵尸”,因为它们在不知情的用户控制之外执行黑客的命令。僵尸网络的控制者,即僵尸主控机(Botmaster),可以通过命令与控制(Command and Control,C&C)服务器向bot发布命令,使僵尸网络执行特定的恶意行为。
-
僵尸网络通常用于以下目的:
- 分布式拒绝服务攻击(DDoS):通过向目标网站或服务器发送大量请求,使其无法处理合法用户的访问,导致服务不可用。
- 垃圾邮件发送:利用被感染的计算机发送大量的垃圾邮件,包括诈骗邮件和恶意软件分发。
- 加密货币挖矿:利用僵尸网络中的计算机进行加密货币挖矿,而不经过设备所有者的同意。
- 数据盗窃:窃取被感染计算机上的敏感信息,如银行账户密码、信用卡信息等。
- 勒索软件传播:通过电子邮件附件或其他方式传播勒索软件,要求受害者支付赎金以恢复其数据或设备。
- 间谍软件活动:监视用户的活动并收集敏感数据,然后将其发送回攻击者。
- 投票欺诈:在在线投票系统中,使用僵尸网络模拟大量独立用户进行欺诈性投票。
3、蜜罐主机(IP地址:172.16.134.191)与哪些IRC服务器进行了通信?
- 输入
ip.src == 172.16.134.191 && tcp.port == 6667
筛选数据包
根据筛选后得到的数据包可知,蜜罐主机与IRC服务器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为服务器的僵尸网络?
- 输入命令
sudo apt-get install tcpflow
安装tcpflow
- 输入命令
sudo tcpflow -r Desktop/botnet_pcap_file.dat "host 209.196.44.172 and port 6667"
对样本进行分流
- 分流后得到两个数据文件
172.016.134.191.01152-209.196.044.172.06667
、209.196.044.172.06667-172.016.134.191.01152
,以及一份报告report.xml
- 输入以下命令来计算
209.196.044.172.06667-172.016.134.191.01152
文件中有多少主机访问了209.196.044.172
sudo 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 取出昵称
# sed 去除前缀
# tr 将空格转换为新行
# tr -d 去除\r
# grep -v "^$" 去除空行
# sort -u 排序并去重
# wc 计算行数
结果为:有3461
个不同的主机访问了以209.196.44.172为服务器的僵尸网络
5、哪些IP地址被用于攻击蜜罐主机?
- 输入以下命令找出所有连接蜜罐主机的IP地址,将结果输出到
IP.txt
文件中,并输入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 > IP.txt;wc -l IP.txt
可以看到输出165
,表示有165
个IP被用于攻击蜜罐主机
- 打开
IP.txt
文件即可查看这165
个被用于攻击蜜罐主机的IP地址
6、攻击者尝试攻击了哪些安全漏洞?
-
使用Tcpdump工具筛选出蜜罐主机有哪些端口是响应的
- 输入命令
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
端口 - 输入命令
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
端口
可以看到相应的TCP端口有135、139、25、445、4899、80
,而响应的UDP端口只有137
- 输入命令
-
135
端口:在Wireshark中输入tcp.port == 135
进行筛选
在筛选后的数据包中只有一些TCP三次握手过程的数据包,没有数据的交互 -
139
端口:输入tcp.port == 139
进行筛选
在筛选后的数据包中有许多TCP、SMB和NBSS类型的数据包,但没有关于攻击或漏洞的信息 -
25
端口:输入tcp.port == 25
进行筛选
在筛选后的数据包中只有一些TCP三次握手过程的数据包,没有数据的交互 -
445
端口:输入tcp.port == 445
进行筛选
在筛选后的数据包中发现了可执行文件PSEXESVC.EXE
,查阅资料可知这是一种蠕虫病毒的特征码- 攻击者拿到ADMIN权限
- 攻击者拿到
Administrator
权限
攻击者攻击成功,拿到了管理员权限,导致被远程控制
- 攻击者拿到ADMIN权限
-
4899
端口:输入tcp.port == 4899
进行筛选
在筛选后的数据包中只有一些TCP三次握手过程的数据包,没有数据的交互 -
80
端口:输入tcp.port == 80
进行筛选
在筛选后的数据包中发现有一数据包中含有CCCCCCCC...
填充数据,这是攻击者在尝试缓冲区溢出攻击- 追踪TCP流
- 追踪HTTP流
发现并没有后续,说明攻击者失败了
- 追踪TCP流
-
137
端口:输入udp.port == 137
进行筛选
在筛选后的数据包中发现只有NBNS包,NBNS是网络基本输入/输出系统(NetBIOS)的一部分,主要负责在基于NetBIOS名称访问的网络上提供主机名和地址映射服务
7、哪些攻击成功了?是如何成功的?
- 根据刚才第六个问题中的抓包分析可知,只有
445
端口攻击成功,攻击者通过PSEXESVC.EXE
可执行文件,获取了目标主机的管理员权限,从而控制了目标主机
3. 学习中遇到的问题及解决
- 问题描述:在Kali中安装
tcpflow
时报错
- 解决方案:发现连接实验室网线时,Kali会提示没有网络,因此将网线拔出,改为连接手机热点
4. 学习感悟、思考等
通过这次实践,我深刻体会到了恶意代码分析和逆向工程的复杂性与重要性。在分析Rada恶意代码样本和Crackme程序的过程中,锻炼了我脱壳、字符串提取、反汇编及逻辑思维的能力;在分析网络数据源的过程中,面对大量的数据,我学会了如何筛选和识别关键信息,通过对数据包的深入分析,我能够理解攻击者的策略和行为模式。