20202409 2022-2023-2 《网络与系统安全技术》实验四报告
实践内容
本次实验的主题是恶意代码的分析与实践,需要围绕这一主题完成四个递进的小任务:
- 恶意代码文件类型标识、脱壳与字符串提取,对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者。
- 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
- 分析一个自制恶意代码样本rada,并撰写报告。
- 取证分析实践。
实验环境:win11主机+cygwin64Terminal+wireshark,winxp虚拟机+file-5.0.3+IDApro+VMunpacker+peid,kali主机+tcpflow+tcpdump
实践过程
恶意代码文件类型标识、脱壳与字符串提取
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
文件格式:32位可执行的PE文件;运行平台:32位windows;加壳工具:UPX
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
利用cygwin模拟linux环境(可以直接用linux主机),用strings命令进行解析,发现作者为:
使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
分析crackme1
-
尝试不同参数数量输入,发现参数为2个时输出不同:
-
用IDA工具打开文件,strings视窗显示它会输出4个不同的结果,猜想其中正确的输出为:
-
查看functioncall视图,关注分支点:
-
分析0x401280节点,关注右分支:
-
测试输入:I know the secret。反馈正确:
分析crackme2
-
如法炮制,查看functioncall视图,关注分支点:sub_401280:
-
分析0x401280节点,首先注意到有个参数数目比对的步骤,要求输入两个参数:
-
注意右分支有两级输入比对:
-
将原文件复制一份,命名为crackmeplease.exe,测试输入如下,得到正确的反馈:
分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
在win11主机上进入cygwin64,定位到rada所在目录,利用md5sum命令查看摘要值为,用file命令查看文件格式信息,用strings命令查看输出字符串:
摘要:caaa6985a43225a0b3add54f44a0d4c7
帮助识别的基本信息:RaDa.exe: PE32 executable (GUI) Intel 80386, for MS Windows, 3 sections
(2)找出并解释这个二进制文件的目的;
在winxp中打开process explorer,运行rada-dump文件,查看相关捕获信息,其strings视窗如下,通过圈出部分可判断该二进制文件有以下行为:请求RaDa_commands.html、新建C:\RaDa文件夹并建立子目录、修改注册表等。
(3)识别并说明这个二进制文件所具有的不同特性;
该文件访问了RaDa_commands.html,可以执行一些特殊的指令,同时通过访问网页读取指令可以绕过防火墙检测;该文件通过复制到C盘目录以及修改注册表,可以实现开机自启动,具有特殊权限;strings后面部分也可以观察到该文件运行时可携带参数以特定信息。
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
UPX加壳处理,浏览器访问越过防火墙检测。
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
属于后门程序。该文件具有很好的隐藏性,和自主执行能力,也有获取计算机系统权限,执行相关控制操作的行为,其目的在于获取系统控制权限进行信息采集,这符合后门程序的特征。此外,该文件不具有明显的传播性与感染行为。
(6)给出过去已有的具有相似功能的其他工具;
msfvenom可生成后门程序。
(7)可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
运行RaDa.exe --authors可以查看作者,程序自动弹出弹窗说无法识别指令,但是有http网页回弹,可见,若要调查该文件作者,需要接运行参数–authors,并将计算机联网。
取证分析实践
Windows 2000系统被攻破并加入僵尸网络
问题: 数据源是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。回答下列问题:
(1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
1.IRC是Internet Relay Chat 的英文缩写,中文一般称为互联网中继聊天。它是由芬兰人Jarkko Oikarinen于1988年首创的一种网络聊天协议。
2.上图为wireshark视图截图以供参考。实操时需要填写昵称(nickname)和要连接的IRC网络IP,进入网络后还要选择要join的channel。
3.6667(明文传输,如irc://irc.freenode.net)、6697(SSL加密传输,如ircs://irc.freenode.net:6697)等。
(2)僵尸网络是什么?僵尸网络通常用于什么?
1.僵尸网络的表面意思是由机器人组成的网络(Botnet,bot取自robot),实际上是指攻击者传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。
2.最常见的是用僵尸网络发起拒绝服务攻击,瞬间就可以使中小企业的网站瘫痪。根据构建环境的不同,可分为:IRC僵尸网络(基于IRC互联网实时聊天协议构建)、HTTP僵尸网络(Web网站方式构建)、P2P僵尸网络(P2P协议构建)。以下实践就是基于IRC协议构建的僵尸网络。
(3)蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
用wireshark分析数据包,在过滤器中输入命令:ip.src == 172.16.134.191 && tcp.dstport == 6667,可得如下统计图:
从图中可知,蜜罐主机与以下IRC服务器通过信: 209.126.161.29,66.33.65.58,63.241.174.144,217.199.175.10。
(4)在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
如上图所示,先用wireshark分析,发现这段时间是由蜜罐主机的同一端口向目的僵尸网络服务器发送数据包,鉴于此,题中的“不同主机”别有所指,我的理解里,这个蜜罐主机或许是一个代理,有不同的用户通过这一主机去连接IRC服务器,那么这里的“不同主机”其实就是“不同的用户”,所以需要统计不同的昵称数目来估计,若有不当之处希望老师予以纠正!
工具:kali主机+tcpflow
tcpflow工具:tcpflow是强大的流量分析工具,支持复杂的过滤表达式。
apt install tcpflow
tcpflow -r 20202409-botnet_pcap_file.dat 'host 209.196.44.172 and port 6667'
ls
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
导出来两个文件,IP地址也是除了蜜罐主机和僵尸网络服务器以外无他,经过统计分析,有3461个不同的主机访问了以209.196.44.172为服务器的僵尸网络。
(5)哪些IP地址被用于攻击蜜罐主机?
基本思路是统计所有主动连接蜜罐主机的IP,并将其视为可疑流量,都有攻击的可能。由于IP数目过于众多,使用wireshark不太便利,这里使用另一种方案:
工具:kali主机+tcpdump
tcpdump工具:与tcpflow类似,皆为linux中的流量分析工具。
tcpdump -n -nn -r 20202409-botnet_pcap_file.dat 'dst host 172.16.134.191' | awk -F " " '{print $3}' | cut -d '.' -f 1-4 | sort | uniq | more> 20202409ip_list.txt;wc -l 20202409ip_list.txt
如上图所示,导出的文件行数即为不同IP数,则共有165个IP地址用于攻击。
(6)攻击者尝试攻击了那些安全漏洞?那些攻击成功了?是如何成功的?
基本思路是对不同的通信协议进行分级分析,查看各协议不同端口地连接情况,结合端口所提供的服务推测攻击类型。
工具:wireshark,kali主机+tcpdump
操作步骤:
1.用wireshark查看网络流分布情况;
2.筛选TCP端口;
3.筛选UDP端口。
用wireshark查看网络流分布情况:
这一步的分析我们可以看到,IP层的数据包只有TCP和UDP两种,其数量分别为122和29004。
筛选TCP端口:
# 攻击者扫描了哪些TCP端口
tcpdump -r botnet_pcap_file.dat -nn 'dst host 172.16.134.191' and tcp[tcpflags]== 0x2 | cut -d ' ' -f 5 | more | cut -d '.' -f 5 | cut -d ':' -f 1 | sort | uniq
# 哪些TCP端口时开放的、响应的
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
如图,攻击者共扫描了90个tcp端口,其中,135、139、25、445、4899和80是开放的。下面分析部分端口。
tcp135:
观察发现,只是一些用于建立和断开连接的数据包,没有进行数据交换,可能是对端口进行connect测试。
tcp139:
如图,大部分连接没有建立具体会话内容,可能时用来测试服务的。
tcp25:
跟tcp135一样,没有传递数据,可能是对端口进行connect测试。
tcp445:
攻击者利用SMB共享了文件PSEXESVC.EXE给蜜罐主机,这个程序被执行后,远程主机将会获得蜜罐主机的shell回弹。后续没有异常数据包,判断攻击者成功连接到了蜜罐主机,攻击成功。
tcp4899:
4899端口是remoteadministrator远程控制软件默认监听的端口,也就是平时常说的radmini影子,这里存在radmini远程控制攻击,观察图中数据包,可发现两者进行大量数据传输,远程控制成功。
tcp80:
观察Get包,有异常字符串,疑似存在缓冲区溢出攻击。点开观察,有cmd指令获取shell回弹和蠕虫注入,从后续数据包行为来看,含cmd指令的攻击有多次执行,蠕虫注入只有一次然后很快就来不再有80端口的数据交换,两种攻击数据包蜜罐主机均未给出响应,可判断该攻击没有成功。
筛选UDP端口:
# 攻击者扫描了哪些UDP端口
tcpdump -r botnet_pcap_file.dat -nn 'dst host 172.16.134.191' and udp | cut -d ' ' -f 5 | more | cut -d '.' -f 5 | cut -d ':' -f 1 | sort | uniq
# 哪些UDP端口时开放的、响应的
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 | more
可见,攻击者扫描了137、1434和28431这几个udp端口,其中137端口是开放的。对部分端口进行分析。
udp137:
此处是在进行NBNS查点,没有数据交换。
udp1434:
DCERPC常用于SQL slammer攻击,但此处蜜罐主机并没有返回数据,该攻击没有成功。
学习中遇到的问题及解决
问题1:winxp为32位操作系统,无法运行process explorer
问题1解决方案:下载32位兼容版process explorer(下载链接见参考资料)
问题2:分析入侵行为和攻击类型有些困难
问题2解决方案:参考课件和前辈的博客进行学习
实践总结
本次实验内容比较丰富,用到了许多分析软件,结合相关学习资料进行深入学习会发现其涉及到的知识也同样众多,需要静下心来研究才能搞明白。本次实验不仅让我见识了五花八门的分析手段,还同时让我了解了种种样样的攻击方法,我不得不感慨,网络安全领域真的需要过硬的知识本领的加持,路漫漫其修远兮,吾将上下而求索!
参考资料