20192420 任文朗 2021-2022-2 《网络与系统攻防技术》实验四实验报告

实验四 恶意代码分析实践


一、实践内容

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系统被攻破并加入僵尸网络

二、实践目的

2.1 实践目的

· 能够对恶意代码进行分析

2.2 实验所涉及的知识点

1.恶意代码
· 恶意代码(Unwanted Code)是指没有作用却会带来危险的代码,一个最安全的定义是把所有不  
  必要的代码都看作是恶意的,不必要代码比恶意代码具有更宽泛的含义,包括所有可能与某个组织  
  安全策略相冲突的软件

· 常见恶意代码的类别
(1)计算机病毒:是编制者在计算机程序中插入的破坏计算机功能或者数据的代码,能影响计算机  
  使用,能自我复制的一组计算机指令或者程序代码
(2)蠕虫病毒:它是利用网络进行复制和传播,传染途径是通过网络和电子邮件。它能传播它自身  
  功能的拷贝或它的某些部分到其他的计算机系统中(通常是经过网络连接)
(3)后门:一般是指那些绕过安全性控制而获取对程序或系统访问权的程序方法
(4)木马:伪装成一个实用工具,诱使用户将其安装在PC端,从而秘密获取信息
(5)僵尸网络:与后门类似,也允许攻击者访问系统。但是所有被同一个僵尸网络感染的计算机将  
  会从一台控制命令服务器接收到相同的命令
(6)内核套件:设计用来隐藏其他恶意代码的恶意代码

2.恶意代码分析方法
· 恶意代码分析与针对良性代码和软件的程序分析技术,都可以采用通用的代码分析技术来作为基础,  
  主要包括静态分析和动态分析方法,来对代码进行逆向工程(Reverse Engineering)来确定  
  其功能

· 静态分析技术:反病毒扫描、文件格式识别、字符串提取分析、恶意代码实例名、二进制结构分析、  
  加壳识别与代码脱壳等

· 动态分析技术:基于快照对比的分析方法和工具、沙箱技术、动态调试技术、系统动态行为监控  
  方法等

三、实践过程

3.1 任务一 恶意代码文件类型标识、脱壳与字符串提取

· 步骤一 使用文件格式识别工具(这里使用的是kali虚拟机内的命令)给出恶意代码样本的文件格式
       首先需要将恶意样本放入我们的kali虚拟机中(因为file命令只能在kali里用,而不能  
  在windows xp环境中运行)打开终端输入 file RaDa.exe 命令,查看该文件类型,我们可以发  
  现如下图所示的结果,该样本文件是一个有图形化界面(GUI)的Win32 PE(可移植可执行)的程序

· 步骤二 使用工具对恶意代码样本的加壳类型进行分析
       这里我们使用PEiD工具(建议在虚拟机windows xp中运行),通过下图所示我们可以看到  
  这是一个版本为0.89.6的压缩壳(UPX),并且也能从该图中看到相关PE文件的属性,比如入口点  
  以及文件偏移等

· 步骤三 查看RaDa.exe中的可打印字符串
       在kali虚拟机中执行命令 strings RaDa.exe ,我们可以看到如下图所示的结果,发现  
  该文件中可打印的字符串全是乱码,可以合理猜测该文件是被加壳了

· 步骤四 利用超级巡警工具进行脱壳处理
       在windows xp环境中,利用超级巡警工具进行脱壳可以得到如下图结果,可以发现生成了一  
  个新文件 RaDa_unpacked.exe

	再次在kali环境中,输入strings命令查看脱壳后的RaDa_unpacked.exe,这时通过  
  下图所示的结果,我们可以成功看到脱壳后该恶意程序的可打印字符串

· 步骤五 利用工具对恶意代码进行分析,找出其作者
       在windows xp环境下,我们可以运行IDA pro工具对该文件进行分析,在Strings窗口或  
  者是用Hex View-A窗口我们可以看到作者名 Raul Siles 和 David Perze


       但是这样查看不是非常方便,其实我们可以将Strings窗口中的字符编码换成Unicode(当然  
  也可以用其他工具,比如process explorer),这样就能如下图所示更快的找到作者

3.2 任务二 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息

· 步骤一 检查两个文件的完整性,计算其md5的值
       在kali环境下,输入命令 md5sum crackme1.exe 和 md5sum crackme2.exe 查看两  
  文件的md5值

· 步骤二 查看两个文件的文件类型
       再次在kali环境下输入file命令,可以发现两个文件都是32位的windows PE文件

· 步骤三 对crackme1.exe进行分析
       在kali环境下输入命令 wine crackme1.exe ,可以发现在不接受参数输入时,程序的输  
  出为 I think you are missing something,在接受有一个参数输入时,程序的输出为 Par  
  don? What did you say? ,在接受有两个参数输入时,程序的输出依旧变为 I think you  
  are missing something。通过提示我们可以合理推测,是不是只需要输入一个参数就能得到  
  我们想要的信息?

	在windows xp环境下打开IDA pro,对crackme1.exe进行分析,在Strings窗口我们  
  可以看到刚才在kali进行测试时的输出信息,同时我们还发现了 “I know the secret” 和 “Yo
  u know how to speak to programs, Mr. Reverse-Engineer” 这两个字符串,我们可以  
  猜测密码是否是 “I know the secret” ,而正确输出的信息为 “You know how to speak  
   to programs, Mr. Reverse-Engineer”

        首先来验证一下刚才的猜想,发现如下图所示果真如此

	接下来验证一下猜想,在IDA pro工具中,点击上方工具栏中的view→Graphs→function  
   calls(函数调用图)查看程序的call flow,这里我们可以看出来该程序是用C语言编写的,并  
  且还通过了strcmp函数比较了输入。同时我们也可以发现,关键的程序段在sub—_401280,因为  
  输出和比较输入的过程都在这个段中

	让我们来看看汇编部分,通过以上分析我们可以知道程序的主体在sub_401280段,所以我  
  们可以在这个段里查看,如下图所示我们可以看到有这样一条语句 cmp [ebp+arg_0],2,这条语  
  句的意思为判断程序是否有两个参数,但是根据之前的分析,应该是只要一个参数就能输出正确结果  
  了。这是怎么回事呢?其实在C语言中,主函数的格式本来为int main(int argc, char const  
   *argv[ ]),其中argc 是表示传入main函数中的参数个数(包括这个程序本身),而argv表示  
  传入main函数中的参数列表(其中argv[0]表示这个程序的名字),所以我们输入的命令 wine c  
  rackme1.exe “I know the secret” 其实包括两个参数crackme1.exe和“I know the se  
  cret”

	汇编分析可能过于麻烦,IDA pro工具是支持反汇编功能的(这个程序本来就是用C语言代  
  码编写),我们可以利用工具的这一特性对该文件进行反汇编。如下图所示,我们可以直接看出正确  
  输入为“I know the secret”

· 步骤四 对crackme2.exe进行分析
       该文件分析过程与crackme1.exe相似,这里我们直接采用IDA pro反汇编的方式,查看其C  
  语言代码。可以看到有一点点不同,在判断正确输入前,还对文件名进行了判断,这里我们只需要将  
  文件名改掉,并且输入正确的参数即可(依旧是“I know the secret”)

       修改后运行文件,输入 crackmeplease.exe "I know the secret" ,成功得到正确  
  的结果 “We have a little secret:Chocolate”

3.3 任务三 分析一个自制恶意代码样本rada,并能回答相关问题

· 步骤一 查看该文件的摘要
       在kali环境下输入命令 md5sum RaDa.exe ,得到该二进制文件的摘要。输入 file Ra  
  Da.exe ,得到该二进制文件是32位,并带有图形化界面的windows PE文件,如图所示

· 步骤二 利用IDA工具对RaDa_unpacked.exe进行分析
       在windows xp环境下使用IDA pro工具对文件进行分析(因为RaDa.exe被加壳,里面一些  
  字符串为乱码,所以这里我们对脱壳后的文件进行分析即可)。
       如下图所示,我们可以看到这几条语句大概含义为使用http协议连接到IP地址为10.10.10.  
  10的目标主机下的一个名为RaDa_commands的网页上,下载并上传cgi

       在被害者主机的C盘创建一个文件夹 C:/RaDa/tmp 来保存其下载的文件,并且还将该程序  
  文件RaDa.exe复制到了 C:\RaDa\bin 目录下

        同时修改了注册表(HKEy User\Software\Microsoft\Windows\CurrentVersion\  
  Run),还将rada设置为了开机自启动。同时该程序也能实现对注册表的读、写还有删除功能

	往下分析可以看到该程序还能发起DDOS远程攻击(smurf)

	接着我们可以看到该程序进行的一系列命令操作,get(下载)、screenshot(截屏)、s  
  leep(睡眠)等指令

	该程序也支持一系列参数,包括--verbose、--visible、--server、--authors等,  
  我们可以看看--authors的执行效果

	再往下看,我们可以看到一条SQL语句,这句话大概意思是先对网卡配置信息的查询(SELE  
  CT * FROM Win32_NetworkAdapterConfigurat),如果true,则确认dword_40C070对应  
  的字符是否存在,并进行了Mac地址查询,注册表的查看等操作(Wscript.shell),即判断vmwa  
  re tools是不是在注册表里面

	我们可以发现三个网段,大概意思就是判断服务器是否在这三个网段中,然后在服务器中执  
    行命令行

· 步骤三 回答基础问题
	(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息
		答:根据以上分析,我们可以知道该二进制文件的摘要为caaa6985a43225a0  
  b3add54f44a0d4c7,并且也得知了它是一个PE可执行文件,同时采用了压缩壳技术(UPX)

	(2)找出并解释这个二进制文件的目的
		答:猜测这个二进制文件是一个后门程序,会通过http请求访问某页面,并  
  让攻击者能够进行一系列指令操作(如screenshot)

	(3)识别并说明这个二进制文件所具有的不同特性
		答:启动RaDa.exe后,它能够自动安装到C盘中,并且还可以修改注册表让其能  
  够跟随系统开机自启动,访问http://10.10.10.10/Rada/Rada_command.html,还可以解析  
  指令并执行指令
		
	(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
		答:首先是这个二进制文件采用了压缩壳技术,其次可能会有一些误导项,比  
  如starting DDOS smurf remote attack

	(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
		答:这个二进制文件不具有传播和感染的性质,所以它不在计算机病毒和蠕虫的  
  范畴中(这两者有传播性),同时这个文件也未能将自己伪装成良性程序,所以也不属于木马。排  
  除以上几种可能后,猜测这应该是后门程序

	(6)给出过去已有的具有相似功能的其他工具
		答:木马Bobax(使用HTTP协议从指定的服务器下载命令文件)、木马Setir  
  i等

	(7)可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限  
  定条件下?
		答:可以找出,这个二进制文件的开发作者是Raul siles和David Perze,  
  但是必须在字符串是明文状态下才能找到(例如步骤二中将RaDa.exe脱壳处理)

3.4 任务四 取证分析实践(windows2000系统被攻陷并加入僵尸网络)

· 数据源是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他  
  敏感信息被混淆。

· 步骤一 IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用哪些TCP  
  端口?
	答:因特网中继聊天(Internet Relay Chat),简称 IRC,相当于qq、微信之类的。  
  IRC 的工作原理非常简单,只需要在自己的 PC 上运行客户端软件,然后通过因特网以IRC 协议  
  连接到一台 IRC 服务器上即可。IRC 特点是速度非常之快,聊天时几乎没有延迟的现象,并且只  
  占用很小的带宽资源
	注册时需发送的消息有三种,分别是口令,昵称和用户信息,注册完成后,客户端就需要  
  使用JOIN信息来加入频道Channel
	IRC服务器当使用明文传输时通常在6667端口监听,利用SSL加密传输就在6697端口

· 步骤二 僵尸网络是什么?僵尸网络通常用于什么?
	答:僵尸网络是一组以协调方式连接的计算机,用于恶意目的。僵尸网络中的每台计算机  
  都称为僵尸网络。这些机器人形成受损计算机网络,由第三方控制并用于传输恶意软件或垃圾邮件  
  或发起攻击。
	僵尸网络主要用于:发动DDOS攻击、发送垃圾邮件、 监听用户敏感信息、窃取机密、 扩  
  散新的恶意软件、比特币挖矿等

· 步骤三 蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
	根据以上分析,我们需要对IRC服务器的端口进行监听(6667端口),在wireshark工具  
  中对botnet_pcap_file.dat进行分析,使用 ip.src == 172.16.134.191 and tcp.dst  
  port == 6667 的过滤规则查找,可以找到五个IRC服务器,分别为:209.126.161.29、66.3  
  3.65.58、63.241.174.144、217.199.175.10、209.196.44.172

· 步骤四 在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
	首先在kali环境下输入命令 apt-get install tcpflow(root权限下执行),然后输  
  入命令tcpflow -r botnet_pcap_file.dat 'host 209.196.44.172 and port 6667'   
  进行抓包(-r是为了能够读取该数据包),我们可以得到三个文件 209.196.044.172.06667-1  
  72.016.134.191.01152、172.016.134.191.01152-209.196.044.172.06667、report  
  .xml

	根据题意,我们使用管道命令 cat 209.196.044.172.06667-172.016.134.191.01  
  152 | 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 | w  
  c -l ,其中cat命令,连接209.输出文件;grep搜索获取昵称输出行;sed:去除前缀;tr:将  
  空格转换为换行;tr -d删除\r;grep -v:去除空行;sort -u排序并去除重复;wc -l:输出  
  行数。这样我们可以筛选出来3461个

· 步骤五 哪些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  
   > 1.txt;wc -l 1.txt 查看连接主机ip的地址,并输出到1.txt中(tcpdump -nn: 指定  
  将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示;grep -v:排除  
  指定字符串;cut -d '.' -f 10:截取以'.'为分隔符的第 10 列;uniq命令用于检查及删除  
  文本文件中重复出现的行列; wc -l 用于统计文件的行数)

· 步骤六 攻击者尝试攻击了那些安全漏洞?
	输入命令 snort -r botnet_pcap_file -c /etc/snort/snort.conf -K asci  
  i 查看网络流的分布情况,从下图所示,我们可以看到大部分都是TCP包,有小部分是UDP包,接  
  下来我们可以分别筛选出相应的TCP端口和UDP端口

	首先筛选TCP端口,输入命令 tcpdump -r botnet_pcap_file.dat -nn 'src hos  
  t 172.16.134.191' and tcp[tcpflags]== 0x12 | cut -d ' ' -f 3 | cut -d '.'  
   -f 5 | sort | uniq ,查看TCP端口有135、139、25、445、4899和80

	再来看看UDP端口,输入命令 tcpdump -r botnet_pcap_file.dat -nn 'src hos  
  t 172.16.134.191' and udp | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | un  
  iq ,查看UDP端口有137(在局域网中提供计算机的IP地址查询服务,处于自动开放状态,所以访  
  问这个端口是NetBIOS查点)

	利用wireshark查看TCP的135和25端口,发现他们只是进行了TCP连接

	利用wireshark查看TCP的139端口,发现了NBSS包和SMB包(两者都跟NetBIOS有关)  
  以及一些TCP流

	利用wireshark查看TCP的445端口,我们可以发现用这样一个叫PSEXESVC.EXE的可执行  
  文件,这是可以利用远程控制运行被害主机,并且获取其权限,常用于内网渗透

	利用wireshark查看TCP的80端口,一开始能看到很多的A,猜测是否攻击者想利用缓冲区  
  溢出攻击来获取主机权限,查看源地址为218.25.147.83,在tcp流中可以发现蠕虫攻击

· 步骤七 那些攻击成功了?是如何成功的?
	通过上面分析可知,成功的攻击发起者是218.25.147.83,它是通过蠕虫攻击实现

四、问题及解决方案

4.1 问题一

· 问题描述:不太能够通过汇编的方式进行分析函数调用关系

· 解决方案:参考大量资料,将汇编语句一行一行进行解析

4.2 问题二

· 问题描述:想利用wireshark对RaDa启动时进行抓包分析,但是却没有办法成功
	
· 解决方案:一开始参考网上的教程说的是wireshark要用32位,但是下载完成后在windows xp的  
  环境下却没有办法运行,但是按理来说应该是能够捕捉到从本机IP到10.10.10.10的大量数据包

五、学习感悟及思考

这是本学期网络攻防课的第四次实验,本次实验的目的是实现对恶意代码的分析。在这次实验中我收获最多的莫过于学到了很多跟恶意代码相关的知识以及一些简单的分析方法。在这次实验中我也意识到了自己的不足,比如不能够清楚地分析汇编程序,以及在对wireshark数据流分析的时候,在一些常用命令的使用上略显生疏。但是在老师和同学的帮助下我还是一一解决了这些问题,还在恶意代码分析上实现了自我的进步。通过这次实验,我也意识到了学好网络攻防课的核心在于实践,虽然老师课上讲的东西很多,但是通过自己的实践将这些知识灵活运用,却是对知识的最好把握,相信在之后的实验课中能够学到更多的东西,提升自己的能力。

通过这次实验证明,恶意代码在我们现实生活中很常见,所以作为一名相关专业的学生,一定要能够对其进行准确分析,找到清楚恶意软件的方法,净化网络环境

六、参考资料

· print和fprint函数的区别 https://blog.csdn.net/lianqiangjava/article/details  
  /7465250
· 主函数的格式 https://blog.csdn.net/sinat_28924869/article/details/120974752
· 恶意代码分析 https://gitee.com/wildlinux/NetSec/tree/master/ExpGuides
posted @ 2022-04-15 21:41  任文朗  阅读(85)  评论(0编辑  收藏  举报