20192410 2021-2022-2 《网络与系统攻防技术》实验四 恶意代码分析实践 实验报告
1.实验内容
1.恶意代码文件类型标识、脱壳与字符串提取
对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的作者
具体操作如下:
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的作者
2.使用IDA静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息
3.分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
(2)找出并解释这个二进制文件的目的;
(3)识别并说明这个二进制文件所具有的不同特性;
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
(6)给出过去已有的具有相似功能的其他工具;
(7)可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
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恶意代码文件类型标识、脱壳与字符串提取
-
查看文件类型
file RaDa.exe
该文件是一个Windows PE可执行文件
- 用stud_PE查看加壳工具
- 运用超级巡警脱壳工具进行脱壳
-
提取字符串
strings RaDa_unpacked.exe
-
查看作者
运行RaDa,用ProcessExplore进行监听,查看strings,可以看到作者
2.2使用IDA静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息
2.2.1 crackme1.exe
利用IDA打开crackme1.exe,分析可知,首先cmp指令会判断参数个数是否为两个,如果是则会执行下一条跳转指令。然后会通过strcmp判断参数是否为”I know the secret”。因为程序名是默认参数,所以只需要在运行该程序时加上一个参数”I know the secret”就可以得到正确的输出。
我们也可以看到,如果输入的参数个数不为一个,则会输出”I think you are missing something.”,如果输入的参数数量正确但是不为”I know the secret”,会输出”Pardon? What did you say?”
当然,我们也可以通过反编译来进行验证
2.2.2 crackme2.exe
以同样的方法分析crackme2.exe,注意与crackme1.exe相比,2在判断参数与”crackmeplease.exe”是否相等之前,没有将eax+4,所以这里用来进行判断的参数并不是我们输入的参数,而是默认参数,即函数名,所以如果要得到特定的输出,我们需要将程序名改为crackmeplease.exe。其他与crackme1.exe的分析几乎一致。
如果输入的参数个数不为一,会输出”I think you are missing something.”,如果程序名没有更改或者输入的参数不是”I know the secret”,程序会输出”I have an identity problem.”
2.3 分析一个自制恶意代码样本rada
-
查看md5值
md5sum RaDa.exe
-
使用ProcessExplorer查看RaDa_unpacked.exe的Strings
-
请求网页http://10.10.10.10/RaDa/RaDa_commands.html
-
在C盘创建C:/RaDa/bin/RaDa.exe和C:/RaDa/tmp
-
修改注册表将RaDa.exe设为开机自启动HKLM/Software/Microsoft/Windows/CurrentVersion/Run/RaDa REG_SZ C:/RaDa/bin/RaDa.exe
-
一些注册表指令 RegWrite RegRead RegDelete
-
-
使用IDA查看RaDa_unpacked.exe的Strings,在type中勾选Unicode
查看authors的引用位置
可以发现会有两种情况,一种是不在VMware上运行,会出现作者信息,反之会输出”Unknown argument”。
现在进行验证
回答问题:
-
提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息
MD5值CAAA6985A43225A0B3ADD54F44A0D4C7
PE32 executable for MS Windows Intel 80386 32-bit
-
找出并解释这个二进制文件的目的
能提供连接10.10.10.10的后门
-
识别并说明这个二进制文件所具有的不同特性
复制到C盘,并写入开机自启动中
-
识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
UPX加壳
-
对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
因为能提供远程连接,所以猜测是后门程序
-
给出过去已有的具有相似功能的其他工具
木马Bobax,特洛伊木马Setiri、GatSla
-
可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
可能,在非VMware的虚拟机中运行,调用–authors参数会显示作者;在VMware的虚拟机中执行,则显示参数不存在
2.4 取证分析实践
1、IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
IRC:因特网中继聊天(Internet Relay Chat),一种网络聊天协议。只需要在PC上运行客户端软件,然后通过因特网以IRC协议连接到一台IRC服务器上即可。
当IRC客户端申请加入一个IRC网络时会发送服务器的域名,TCP申请端口和昵称。
一般端口号为6667,或者6660-6669范围的端口。
2、僵尸网络是什么?僵尸网络通常用于什么?
僵尸网络是指攻击者(称为botmaster)出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。
通常用来发起大规模的网络攻击,如分布式拒绝服务攻击(DDoS)。
3、蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
使用Wireshark分析文件botnet_pcap_file.dat,并且设置相应的过滤条件ip.addr == 172.16.134.191 && tcp.dstport == 6667,即IP为蜜罐主机且tcp目的端口为6667的数据包。由图可知,蜜罐主机通信的IRC服务器IP有66.33.65.58、 63.241.174.144、 217.199.175.10、 209.196.44.172和209.126.161.29。
4、在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
使用tcpflow指令来分析.dat文件(我的kali好像没有自带,所以用apt安装了一下)
tcpflow -r 20192410.dat "host 209.196.44.172 and port 6667"
会生成三个文件
将得到的209.196.044.172.06667-172.016.134.191.01152以utf-8的编码另存为(这里我另存为后的名字为20192410)
执行
cat 20192410 | grep "^: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
得到输出3457,所以有3457台主机访问了以209.196.44.172为服务器的僵尸网络
5、哪些IP地址被用于攻击蜜罐主机?
查找端口并输出到1.txt中,共148个
tcpdump -n -nn -r 20192410.dat 'dst host 172.16.134.191' | grep -v 'reply' | cut -d '.' -f 10 | cut -d ':' -f 1 | sort | uniq | more >1.txt; wc -l 1.txt
将连接IP地址输出到2.txt中,共165个
tcpdump -n -nn -r 20192410.dat 'dst host 172.16.134.191' | awk -F " " '{print $3}' | cut -d '.' -f 1-4 | sort | uniq | more > 2.txt;wc -l 2.txt
6、攻击者尝试攻击了那些安全漏洞?哪些成功了?如何成功的?
(1)通过snort查看网络流
snort -r 20192410.dat -c /etc/snort/snort.conf -K ascii
(2)查看tcp响应端口
tcpdump -r 20192410.dat -nn 'src host 172.16.134.191' and tcp[tcpflags]== 0x12 | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq
(3)查看udp响应端口
tcpdump -r 20192410.dat -nn 'src host 172.16.134.191' and udp | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq
(4)利用wireshark逐一分析端口
-
tcp 135
-
tcp 25
135和25端口都只进行了连接,没有交互数据,应该只是进行了connect扫描
-
tcp 445
发现一个PSEXESVC.EXE的文件,这个二进制文件主要是一种Dv1dr32蠕虫,通过IRC进行通信。且该IP与蜜罐主机建立了会话,所以攻击是成功的
-
tcp 4899
一个远程控制软件radmin服务端监听端口
-
tcp 80
观察发现210.22.204.101向蜜罐发送了很多的C,猜测是缓冲区溢出攻击
还能看到c:/notworm,这是一个蠕虫攻击
-
udp 137
都是NBNS,该协议是 TCP/IP 上的 NetBIOS (NetBT) 协议族的一部分,它在基于 NetBIOS 名称访问的网络上提供主机名和地址映射方法,在局域网中提供计算机的IP地址查询服务,处于自动开放状态,所以访问这个端口是 NetBIOS 查点
3.问题及解决方案
- 问题1:分析209.196.044.172.06667-172.016.134.191.01152以得到多少台主机访问时不能得到正确输出
- 问题1解决方案:编码问题,需要将该文件以utf-8编码另存为。
- 问题2:分析crackme2.exe时,在不反编译的情况下,不明白为什么判断参数与”crackmeplease.exe”是否一致时用到的参数时程序名。
- 问题2解决方案:经过与crackme1.exe的对比发现,crackme1中有一条指令会将eax+4,这样选中的参数就是第二个参数,即我们自己输入的参数。而crackme2中进行第一次字符串比对前没有这句,所以进行比对的参数是第一个参数,即默认参数程序名。后面进行第二次比对时就将eax+4了。
5.学习感悟、思考等
本次实验内容相比于之前的几次工作量无疑是大了许多。主要是对于各种工具的使用,以及利用wireshark分析多个端口时花费了许多时间。不过基本每一步的分析都能获得相应信息,整个实验过程并不是很难受。对于恶意代码分析的诸多工具和使用方法也有了一定的了解和认识。
原创文章,作者:3628473679,如若转载,请注明出处:https://blog.ytso.com/245376.html