20202411 2022-2023-2 《网络与系统攻防技术》实验四实验报告
这是一个目录
1.实验内容
本次实验主要是通过各种工具,对目标恶意代码进行文件类型的分析,通过脱壳软件将恶意代码的upx壳脱去,并对恶意代码进行字符串分析,通过逆向技术将二进制代码转换为汇编代码进行分析。了解代码中不同函数之间的调用和流程运行图。通过流程图及相关信息去推测恶意代码的运行条件,学习使用IDA Pro等专业逆向工具。通过WireShark进行僵尸网络等分析取证,从数据包中观察僵尸网络的攻击方式和具体漏洞。
2.实验内容
2.1-恶意代码文件类型标识、脱壳与字符串提取
终于这次实验完全没有用到云服务器了,只能说Apple Silicon你是我的神!直接在ARM架构上原生运行x86_64架构的软件,要什么Intel和AMD。
2.1.1-使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具
在kali的shell中输入
file RaDa.exe
来对RaDa.exe进行文件类型的分析,显示的信息表明,这款可执行程序是32位的可执行文件,拥有GUI,基于Intel 80386架构,适用于Windows系统。
在Windows中使用PEiD软件对RaDa.exe软件进行分析,可以看到程序的入口点事0000FD20,文件偏移是00004120,文件检测到了UPX的壳,子系统是Windows 32位下的GUI。
2.1.2-使用超级巡警脱壳机等脱壳软件,对RaDa恶意代码样本进行脱壳处理
首先我们直接在kali中输入
strings RaDa.exe
可以看到输出的字符串是一堆看不懂的乱码,所以我们需要对程序进行脱壳处理。脱壳的话可以在kali中采用
upx -d RaDa.exe
的命令实现脱壳,这里采用Windows下的超级巡警VM Unpacker软件进行自动脱壳。
再在kali中输入
strings RaDa_unpacked.exe
实现字符串显示,这次我们可以看到输出了很多正常的英文字符,大部分应该是程序中的调用函数名称及库中的一些名称。
2.1.3-使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁
从上面显示的信息,我们一步一步查找相关的信息,最后可以发现Raul Siles && David Perez这两个人名,同时也能看到September 2004这个时间点,这个程序应该是这两位老哥在2004年九月的时候编写的。
2.2-使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息
将crakeme的这两个可执行文件通过Terminal打开,在终端内直接输入
cracklme1.exe,可以看到得到的反馈是
‘‘I think you are missing something.’’
在文件名后面加1,2,3个参数,获得到的反馈分别是
‘‘Pardon? What did you say?’’
‘‘I think you are missing something.’’
‘‘I think you are missing something.’’
可以看到只有一个参数的时候不同,所以不妨大胆推测这个文件的输入参数有一个。
我们通过IDA Pro for Mac打开这个crackme.exe文件,就可以直接看到程序的流程图,图中的每一个框框表示一个函数,不同框框间有有向线段连接,有些线段是红色的,有些线段是绿色的,还有些线段是蓝色的。可以发现,红色线段和绿色线段总是成对出现的,并且两条线段指向了不同的函数,而根据刚刚测试的结果,可以推测,绿色线段表示程序判断正确的走向,红色线段表示程序判断错误的走向。所以我们跟着绿色线段走到底,就看到了I know the secret这句话,我们将这句话作为参数输入到终端中成功输出了You know how to speak to programs, Mr. Reverse-Engineer这个正确的结果。
同理我们来分析crackme2.exe的正确输入,用IDA Pro for Mac打开文件,可以看到文件的流程控制图要更加复杂,同时绿色路线上第一个框框中显示的是crackmeplease.exe这个信息,说明在终端中的第一个参数是crackmeplease.exe而不是crackme2.exe,所以要将文件重命名,第二个参数依然是I know the secret。在cmd中输入即可成功返回We have a little secret: Chocolate这个正确结果。
这一步遇到了问题详见问题与思考。
2.3-分析一个自制恶意代码样本rada,并撰写报告
2.3.1-提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息
要生成一个文件的摘要,最简单的方式就是对文件做Hash运算,在kali的shell中输入
md5sum RaDa.exe
就可以生成文件对应的Hash值,结果为caaa6985a43225a0b3add54f44a0d4c7。
2.3.2-找出并解释这个二进制文件的目的
通过IDA Pro for Mac对文件进行逆向,可以看到http://10.10.10.10/RaDa的网址,还有RaDa_commands. html的网页。后面还有C: \RaDa\tmp的路径,应该是从上述网站上下载文件然后保存在这个文件夹中。同时还有C: \RaDa\bin文件夹,一般来说bin文件夹都是放置二进制可执行文件的。还有Starting DDoS Smurf remote attack…的信息,说明会执行分布式拒绝服务攻击。还有RegWrite,RegRead和RegDelete等信息,说明会去对注册表进行相关读写删除,注册表一般是Windows下自运行的一些方式,说明程序在准备自启动等功能。
还可以看到screenshot,sleep等信息,说明文件可以去获取靶机的一些数据,可以远程控制计算机。
除此之外还显示了Upload file using http And multipart/fo…说明文件会去上传靶机中的一些数据到指定的服务器上,完成信息的窃取。
还有SELECT * FROM Win32 NetworkAdapterConfi…这句话很明显是一句SQL,从Win32这个数据库中选取所有的条目。
还看到MACAddress,说明文件会去读取本地的MAC地址,不妨可以推测获取到MAC地址之后就可以使用靶机的MAC地址去进行连接,就算被屏蔽也不会导致攻击机的断网,只要换一个MAC地址就行。
2.3.3-识别并说明这个二进制文件所具有的不同特性
基于上述信息,我猜测这个文件具有自动将自己运行安装的能力,可以去获得靶机的一些权限并进行DDoS等攻击,会将靶机的数据上传到互联网上去。
2.3.4-识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
这个文件首先使用了upx进行加壳,使得通过普通的逆向并不能够直接获取到文件的信息,同时查询运行环境和运行计算机的相关信息,如果是运行在虚拟机上的话,就将软件作者的信息给隐藏起来。
2.3.5-对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
这个恶意代码的样本更像是后门,因为首先这个文件中并没有找到能够自我复制及传播的相关信息。不太符合病毒和蠕虫的特点,同时这个文件能够去更改注册表,并将自己的运行程序放到bin文件夹中去,同时获取截屏等,和远程控制等,更像是后门程序监控并远程操控的样子。
2.3.6-给出过去已有的具有相似功能的其他工具
察阅相关资料,Windows Update、Bobax – 2004、海阳顶端等后门具有比较相似的特征。
2.3.7-可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下
根据上述文件分析可知,可以在非虚拟机的环境下输入
--authors
的参数显示作者的信息,同时通过逆向,在IDA Pro for Mac中可以直接看到作者信息和编写年份信息。
2.4-取证分析实践
2.4.1-IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
IRC-Internet Relay Chat1988年起源于芬兰,现已广泛应用于全世界60多个国家。它是多用户、多频道的讨论系统,许多用户可以在一个频道内就某一话题进行交谈或私谈,每个用户都有一个不同的昵称。IRC允许任意的因特网用户之间做即时的交谈。用户在申请加入IRC时需要发送口令,昵称和用户信息。IRC服务器通过6667端口进行明文传输,同时也可以通过6660~6669端口进行数据传输,但如果是基于SSL的加密数据传输,则需要通过6697端口进行传输。参考RFC。
2.4.2-僵尸网络是什么?僵尸网络通常用于什么?
僵尸网络 Botnet 是指采用一种或多种传播手段,将大量主机感染bot程序(僵尸程序)病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络。僵尸网络通常是构建出一个大量的DDoS攻击,通过整个僵尸网络对某一个目标主机进行流量洪泛,导致目标主机无法支持大量通信导致无法提供正常的服务。
2.4.3-蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
我们可以通过WireShark对dat文件进行分析。首先设定过滤信息为
ip.src == 172.16.134.191 and tcp.dstport == 6667
可以看到和蜜罐主机进行通信的主机有5个。
IP | 我也不知道这该写什么 |
---|---|
66.33.65.58 | 那 |
63.241.174.144 | 就 |
217.199.175.10 | 空 |
209.196.44.172 | 着 |
209.126.161.29 | 吧 |
2.4.4-在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
参考之前学姐的博客,我们首先需要安装tcpflow包,在kali的shell中输入
apt-get install tcpflow
tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667"
生成report.xml文件。输入
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
搜索有多少台主机进行连接,可以看到返回的结果是3457台。
2.4.5-哪些IP地址被用于攻击蜜罐主机?
通过tcpdump命令去找出指定的连接的主机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 > 2.txt;wc -l 2.txt
可以看到有165台主机的IP,打开重定向的txt文件可以看到这所有165台主机的IP。
2.4.6-攻击者尝试攻击了那些安全漏洞?
还是通过tcpdump的命令去检测TCP和UDP包,在kali的shell中输入如下命令
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,4489和80,UDP相应的端口只有137一个。接下来就依次对这些端口进行数据包的检测
首先在WireShark中按照tcp.port==135 || tcp.port==25来过滤数据包,可以看到这两个端口的大部分数据包都是SYN和ACK,都是在建立连接,并没有实质性的攻击情况。
接下来查看139端口,在WireShark中的过滤条件为tcp.port==139 and ip.dst==172.16.134.191,可以看到主要的包也都是ACK和SYN,没有进行实质性的攻击。
查看445端口,过滤条件为tcp.dstport==445 and ip.dst==172.16.134.191。这里的情况开始有些不同了。包数据显示这里进行了大量的基于SMB协议的数据传输和基于SVCCTL协议的数据传输,同时可以在SMB协议数据包中看到**\System32\PSEXESVC.EXE**,查询相关资料发现这是一个Dv1dr32蠕虫病毒,通过IRC进行通信,难怪这里是采用IRC通信,原来藏了个蠕虫在这里。
进一步查看相关包的信息,可以看到results: Acceptance的信息显示,同时在返回信息中含有**\PIPR\Isass**的信息,这是攻击机对目标主机进行远程操控的显示。同时根据上述包信息可见,SVCCTL漏洞可以允许匿名用户登录到SCM中,这说明了通过蠕虫对主机的攻击是成功的。
再来看4489端口,过滤条件为ip.dst==172.16.134.191 and tcp.dstport== 4899,主要数据包都是ACK和PSH数据包,而这个端口常常被用来进行监听并控制靶机。
查看80端口,众所周知80端口是http协议的默认端口,所以过滤条件为ip.dst==172.16.134.191 and tcp.dstport==80 and http,这里的数据包也很有意思,可以看到有些数据包中的数据是大量的CCCCCCCCCCCCCCCCCCCCCCCCCC…和大量的NNNNNNNNNNNNNNNNNNNNNNNNNNN…,很有可能是对目标主机进行缓冲区溢出对攻击。同时存在有数据包的数据内容为**/iisadmpwd/**,pwd这个很明显就是密码的意思,猜测可能是想要获取用户口令。
继续观察相应数据包,可以看到又一个蠕虫,是notworm,这是一个红色代码蠕虫攻击。继续观察相应的数据包,发现了比较好的结果,数据字符串显示Please try this site again later. If you still experience the problem, try contacting the Web site administrator.,就是没有成功访问这个网站,说明并没有通过80端口向外发送出什么有价值的数据。
最后的最后查看UDP的137端口,这里的数据包都是NBNS数据包
,可能是来进行NetBIOS查点工作的。
2.4.7-那些攻击成功了?是如何成功的?
在这些攻击中,通过PSEXESVC.EXE的蠕虫病毒成功完成了攻击,因为这个攻击通过了445端口向目标主机发送了含有蠕虫病毒的可执行文件,并且这个可执行文件被更改到了系统的目录中,这样就可以通过利用SVCCTL的漏洞获取到目标主机的相应服务。
3.问题及解决方案
- 问题1:Parallels Windows无法在Terminal中通过相对路径运行exe文件
- 问题1解决方案:后来发现其实通过cmd是可以运行当前路径下的exe文件的,因为系统是分成了UNC和C盘两块区域,在UNC模式下没有权限通过相对路径去运行exe文件,但是将exe文件复制到C盘下就可以在cmd中通过相对路径运行了。
- 问题2:分析取证时存在重复计数的问题
- 问题2解决方案:可以在Shell中输入下面两条指令来避免字符编码问题导致的重复计数。
export LC_COLLATE='C'
export LC_CTYPE='C'
4.学习感悟、思考等
经过此次的实验,算是对恶意代码的分析有了一个初步的认识,对于一个可疑的文件,我们可以通过各种工具对其进行分析,脱壳,字符串提取,还有逆向的方式去查看这个文件可能的作用,这种二进制工程,确实非常繁杂,尤其是IDA Pro一打开,密密麻麻全是十六进制的乱七八糟的数据,说实话看都看不下去,但是通过流程图分析,还是可以看到每一个函数具体是如何调用,在运行时会出现哪些寄存器数据的变化,确实可以进一步提高对于恶意代码分析的能力和对计算机指令执行的了解。最后,强烈要求学校修改培养方案,别整什么乱七八糟搞七搞八的无聊且无用的课程,把编译原理加入网安专业的必修课程中,学计算机不学编译,我都不好意思说自己懂电脑。