1. 实验内容
-
(1)对恶意代码进行文件类型标识、脱壳与字符串提取
-
(2)学会使用IDA Pro进行静态或动态分析
-
(3)对一个自制的恶意代码样本rada进行各方分析
-
(4)进行取证分析
2. 实践要求
- 掌握对恶意代码进行文件类型标识、脱壳与字符串提取,学会使用静态或动态分析,尝试进行取证分析
3. 实践内容
3.1 对恶意代码进行文件类型标识、脱壳与字符串提取
3.1.1 对RaDa.exe基本检测
- (1)将RaDa.exe传入linux中,在linux中使用命令“file + 文件名”检测该文件的文件类型

-
结果中显示,该文件是一个32位windows平台下PE格式的图形化的可执行文件,且该文件内部结构包含3个段
-
(2)使用命令“strings + 文件名”打印字符串

-
由于该文件被加壳了,所以打印出的是乱码
-
(3)在win上使用PEiD工具检测RaDa.exe的信息

- 结果如图显示了该文件的一些信息,比如该文件使用了UPX进行了加壳
3.1.2 对RaDa.exe进行脱壳
- 发现该文件已被加壳,所以在win上使用“超级巡警之虚拟机自动脱壳器”工具进行脱壳
3.2 使用IDA Pro进行静态或动态分析
3.2.1 对crackme1.exe进行分析,寻找特定输入,使其能够输出成功信息
- (1)将该文件传入linux,使用file命令查看该文件类型

- 结果发现该文件是32位windows平台下的可执行文件,但是没有图形化,只能使用命令行,所以在win中通过命令行运行该程序

-
结果根据参数的数量不同有两种不同的输出,参数数量为1时输出“Pardon? What did you say?”,其他输出“I think you are missing something.”
-
(2)然后使用IDApro打开该程序并进行分析,打开strings windows后,可以看到之前发现的两种输出提示

- 查看整个程序的call flow即函数调用如下图,发现函数sub_401280中有strcmp字符串比较函数,以及输出函数,推测可能是通过比较输入是否正确输出对应的提示

- 现在来分析该可疑函数sub_401280,在function Windows中找到该函数并打开,发现了上述字符串显示中的不同输出提示

- 从该函数的开始部分可以看出来,是通过判断参数是否为2,且输入是否正确来进行不同的输出。如果不为2,则输出“I think you are missing something.”;如果是2但是输入错误则输出“Pardon? What did you say?”;如果是2且输入正确则输出“You know how to speak to programs, Mr. Reverse-Engineer”

- (3)现在知道了正确输入,重新运行程序并正确输入后,输出正确提示!

3.2.2 对crackme2.exe进行分析,寻找特定输入,使其能够输出成功信息
- (1)将该文件传入linux,使用file命令查看该文件类型

- 结果发现该文件和crackme1.exe一样是32位windows平台下的可执行文件,没有图形化界面,所以同样在win中通过命令行运行该程序,

-
结果跟crackme1.exe的输出类似,根据参数的数量不同有两种不同的输出,参数数量为1时输出“I have an identity problem.”,其他输出“I think you are missing something.”
-
(2)再次使用IDApro打开该程序并进行分析,打开strings windows后,仍然可以看到之前发现的两种输出提示

- 查看整个程序的call flow即函数调用如下图,发现函数sub_401280中有strcmp字符串比较函数,一些输出函数,再次猜测是通过比较输入是否正确输出对应的提示

- 分析该可疑函数sub_401280,发现正确的参数仍然是“I know the secret”,但是运行时的文件名也需要改变为crackmeplease.exe

- (3)现在知道了正确输入,现在该文件目录下复制一份该文件,并命名为crackmeplease.exe

- 再运行该文件,输入正确的文件名和参数,输出正确提示!

3.3 分析自制恶意代码样本rada,并回答问题
3.3.1 收集分析代码信息
- (1)获取代码摘要信息

- 打开process explorer,运行脱壳后的Rada_unpacked,双击该进程,查看Strings窗口,可以看到如下图的信息。

-
(2)尝试分析相关内容
-
http://10.10.10.10/RaDa可能是恶意软件需要访问的某个Web服务器
-
RaDa_commands.html、cgi-bin、download.cgi、upload.cgi可能是该Web服务器上的资源或脚本,用于数据传输或执行命令
-
C:\RaDa\tmp、C:\RaDa\bin可能是恶意软件在创建目录,用于存放一些内容
-
HKLM\Software\Microsoft\Windows\CurrentVersion\Run\这是Windows注册表中的一个路径,用于存储启动时自动运行的程序
-
RaDa、REG SZ、C:\Rada\bin、RaDa.exe可能表示恶意软件将RaDa.exe添加到系统的启动项中,以便每次系统启动时自动运行
-
HKLM\Software\VMware, Inc.\VMware Tools\InstallPath这个注册表路径与VMware Tools的安装路径有关,可能被恶意软件用于攻击VMware环境
-
Starting DDoS Smurf remote attack...表示恶意软件正在远程启动Smurf的DDoS攻击
3.3.2 回答问题
- (1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
答:摘要:caaa6985a43225a0b3add54f44a0d4c7;信息:32位windows平台下PE格式的图形化的可执行文件,且该文件内部结构包含3个段
- (2)找出并解释这个二进制文件的目的;
答:根据上述获取的内容,目的可能是在电脑上安装恶意软件RaDa,设置其自启动模式,并发起smurf DDoS攻击
- (3)识别并说明这个二进制文件所具有的不同特性;
答:该文件经过了UPX压缩,具有远程连接的功能,它是可以开机自启动的,能创建自己的工作目录并进行远程攻击的程序
- (4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
答:该文件使用的反逆向工程的技术是使用UPX加压缩壳。UPX会通过压缩原始代码和劫持入口点隐藏程序逻辑,在运行时解压原始程序的代码,并跳转到原始程序的入口点执行该文件
- (5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
答:我觉得这个代码属于后门。理由是他不会自我复制和传播,只是通过远程连接控制目标主机执行一些操作,符合后门的特点
- (6)给出过去已有的具有相似功能的其他工具;
答:能够生成后门程序的工具有msfvenom和veil
- (7)可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
答:可以。通过process explorer找到该程序并展示字符串即可找到版权的所有人即作者Raul Siles && David Perez。由于该文件进行了加壳,所以需要对脱壳文件分析才能找到。

- (8)给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。
方法一:基于特征码的静态检测:提取恶意软件样本的唯一静态特征,与安全数据库中的恶意特征库比对,一旦匹配则判定为恶意。
方法二:基于行为的动态检测:监控程序运行时的行为特征,匹配恶意行为规则即可判定为恶意软件。
方法三:基于网络流量的异常检测:恶意软件需与C2服务器通信接收指令、回传窃取数据,这样网络流量就会存在异常特征,通过分析数据包流量即可识别恶意软件
方法四:基于注册表的残留检测:恶意软件运行后会残留痕迹,即使该软件被删除,通过残留痕迹仍可以发现异常,进而推测是恶意软件的运行结果
方法五:基于沙箱的检测:让恶意软件在一个安全隔离的环境内运行,全程监控并记录其执行过程中的所有行为,结合预设的恶意行为判定规则推测是否为恶意软件
3.4 取证分析实践
3.4.1 IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用哪些TCP端口?
-
IRC是互联网中继聊天协议,诞生于1988年,最初用于全球用户的公开聊天、群组讨论
-
第一步发送基础身份声明消息,包括NICK用来设置客户端的唯一昵称,USER用来声明用户的详细身份;核心是通过发送JOIN消息申请加入指定IRC频道
-
可以使用默认端口6667,该端口明文传输,无加密;或者加密端口6697,该端口使用SSL加密,称为IRCs;还有一些非默认端口6660-6669
3.4.2 僵尸网络是什么?僵尸网络通常用于什么?
-
僵尸网络是由黑客控制的大量被感染设备组成的分布式网络,黑客可通过C2通道向所有僵尸机下发统一指令,实现规模化攻击
-
可用于发起DDoS攻击;发送垃圾邮件和钓鱼邮件;窃取僵尸机自身敏感信息;提高挖矿效率;充当代理跳板等
3.4.3 蜜罐主机(IP地址:172.16.134.191)与哪些IRC服务器进行了通信?
- 将文件botnet_pcap_file.dat拖入wireshark中打开即可该文件,设置过滤条件为
ip.src == 172.16.134.191 and tcp.dstport == 6667,过滤后得到的数据包即是和蜜罐主机通信过的IRC服务器,有209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10

3.4.4 在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
- 首先需要根据图中步骤在linux中安装工具tcpflower

- 在win中将botnet_pcap_file.dat传入虚拟机,使用命令
tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667",筛选了目标服务器的IP地址和端口。同时会生成一个报告文件report.xml和两个TCP连接流文件,使用标识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 -
命令解释
grep -a "^:irc5.aol.com 353" 查找以 :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 统计最终行数

- 结果显示有3461个主机访问了该僵尸网络
3.4.5 哪些IP地址被用于攻击蜜罐主机?
-
在linux中输入命令
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 > 20232405.txt;wc -l 20232405.txt -
命令解释
tcpdump -n -nn -r botnet_pcap_file.dat 'dst host 172.16.134.191' 读取僵尸网络文件 botnet_pcap_file.dat,过滤发往僵尸机(172.16.134.191)的流量
awk -F " " '{print $3}' 提取每行的源ip字段
cut -d '.' -f 1-4 确保点分ip有完整的4部分格式
sort | uniq | more > 20232405.txt 排序并删除重复的行,并显示输出
wc -l 20232405.txt 统计该文件的行数

- 结果显示有165个ip用于攻击蜜罐主机,打开生成的文件20232405.txt可以看到具体的ip们

3.4.6 攻击者尝试攻击了那些安全漏洞?
- botnet_pcap_file.dat在wireshark中打开,在菜单中统计选项中,找到协议分级,可以发现tcp包占99.7%,udp包占0.3%

- 在linux中使用命令
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(RPC,Windows远程过程调用)、139/445(NetBIOS/SMB,Windows网络服务)、25(SMTP简单邮件传输协议)、4899(远程控制)、80(HTTP 服务);udp的端口有137(NetBIOS,Windows网络服务)
3.4.7 哪些攻击成功了?是如何成功的?
- (1)tcp135:对该端口只是进行了tcp三次握手和四次挥手,没有攻击行为

- (2)tcp139:对该端口建立tcp连接,并同意建立NetBIOS会话,但是尝试连接服务器的\PC0191\C共享目录C盘时被拒绝了,没有攻击成功

- (3)tcp25:对该端口建立tcp连接,之后马上就发送FIN中断连接了,没有攻击行为

- (4)tcp445:对该端口建立tcp连接后,观察包发现主机收到了PSEXESVC.EXE,而PSEXESVC.EXE允许用户远程执行命令或者进行攻击,同时在后面的包中发现该文件又被删除了,不管该程序是否有用,都对服务器造成了实质性的攻击,所以攻击成功


- (5)tcp4899:开始建立连接失败后,后面出现了大量的涌向4899端口的PSH包即push包,该包可以强制接收方紧急处理数据交给应用层,不进行缓存,可以实现攻击行为

- (6)tcp80:在数据包中发现了可疑的CCCC...信息并且没被拒绝,根据之前实验的记忆,发现和缓冲区溢出的载荷类似,推测是进行了缓冲区溢出攻击

- (7)udp137:观察包没有发现可疑包,没有攻击行为

- 综上所述,攻击端口中实现了成功的攻击分别有:445、4899、80
3. 问题及解决方案
- 问题一:在将crackme1和2exe文件传入电脑并发送到桌面上后,使用cmd运行后发现找不到该文件,如下

- 解决一:通过询问AI得知,运行文件需要在文件的本身目录下,发送到桌面的文件只是本身的一个替身,或者可以在运行的文件后加上.lnk

-
问题二:在选择TCP连接流文件时,不知道选择哪个文件查找ip
-
解决二:查找资料发现,受感染的主机会主动去连接服务器,所以要选择源ip为209.196.44.172的文件
4. 学习感悟、思考等
一开始用tcpflow、tcpdump这些命令的时候,老是因为语法不对报错。但后来慢慢摸清门路,能用它们把僵尸网络的流量拆开、找到黑客的控制ip,才发现这些工具的作用。
分析抓包的时候也挺有意思,原来那些看似普通的数据包里藏着这么多门道。比如看到那种小流量、发得特别勤的PSH包,就知道可以猜测是黑客在给僵尸机发命令;碰到139端口的SMB请求,就想起那些勒索病毒是怎么利用这漏洞搞破坏的。这让我明白,网络攻击是一环扣一环的,得把每一步都琢磨明白才能看懂。
关于恶意软件检测,我明白了不能只靠一种方法。就跟对付小偷似的,光装个门锁(特征码)不够,还得装监控(行为检测)、拉电闸(网络拦截),甚至养条“智能狗”(机器学习)盯着,这样才能防住各种花里胡哨的偷窃手法。
现在回过头看,从一开始连命令都输不对,到后来能自己分析僵尸网络,我觉得通过这门课我学到了真正对于工作有用的东西。每次搞明白一个攻击套路,就像解开了一道题,我希望以后可以尝试更多的攻击方法,掌握更多的技能,为以后的工作做好铺垫。

浙公网安备 33010602011771号