1.实践内容
1.1 实验要求
https://bbs.csdn.net/topics/614757365
1.2 实验原理
1.2.1恶意代码基础知识
- 恶意代码:
恶意代码一般指的是对计算机有损害的计算机代码或者web脚本,这些代码或者脚本能使计算机按照攻击者的意图执⾏以达到恶意⽬标。常见的恶意代码包括:病毒(简称病毒)、特洛伊木马(简称木马)、计算机蠕虫(简称蠕虫)、后门、逻辑炸弹等。 - 计算机病毒
计算机病毒是一种能够自我复制的代码,通过将自身嵌入其他程序进行感染,而感染过程通常需要人工干预才能完成。这里必须记住:计算机病毒是借助人类帮助从一台计算机传至另一台计算机,这也是其传播机制。具有感染性(本质特性)、潜伏性、可触发性、破坏性、衍生性的特性。 - 网络蠕虫
一种通过网络自主传播、自我复制的独立恶意代码。(从这里就可以看出病毒和蠕虫的区别)传播机制:主动攻击网络服务漏洞、通过网络共享目录、通过邮件传播。 - 后门与木马
允许攻击者绕过系统常规安全控制机制的程序,按照攻击者自己的意图提供通道。 - 僵尸程序与僵尸网络
僵尸程序定义:攻击者用于一对多控制目标主机的恶意代码。
僵尸网络定义:攻击者传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。(注意仔细品味几种恶意程序的定义的黑体字,体会不同) - Rootkit
隐藏性恶意代码形态,通过修改现有的操作系统软件,使攻击者获得访问权并隐藏在计算机中。换句话说,就是root权限的kit工具包。
2.实践过程
2.1 动手实践任务一
对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
- 将RaDa压缩包解压后复制到Windows attack虚拟机,
- 在终端中输入 cd 桌面\rada 进入桌面 通过file RaDa.exe 查看文件类型
可以看到RaDa.exe的运行环境是 PE32 executable for MS Windows (GUI) Intel 80386 32-bits
该文件类型是一个有图形化界面(GUI)的Win32 PE (可移植可执行)程序 - 输入 strings RaDa.exe,查看程序中可打印的字符串
得到一串乱码,说明程序被加壳 - 使用PEID工具查看文件加壳类型
可以看到加壳工具为UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo - 使用超级巡警脱壳机进行脱壳
在文件上可以看到脱壳后的文件
- 使用strings查看脱壳后的文件的字符内容,可以看到有效字符串
使用 IDA Pro Free打开脱壳后的文件,查看详细信息
可以找到作者为DataRescue sa/nv,邮箱为ida@datarescue.com
2.2 动手实践任务二:分析Crackme程序
任务:在WinXP Attacker虚拟机中使用IDA
Pro静态或动态分析crackme1.exe和crackme2.exe,寻找特定的输入,使其能够输出成功信息。
-
将 crackme1、crackme2两个文件复制至Windows attack虚拟机中,并计算其MD5值验证完整性
使用 file命令查看其文件类型
可以得到这两个文件都是32位Windows的PE文件 -
对crackme 1.exe 试探输入格式,在接受一个参数的时候输出的信息与其他会不同,猜测改程序接受一个参数
-
通过IDA Pro Free打开crackme1.exe
查看Strings部分,可以看到明文字符串
在之前的输入格式试探中,我们已经得到了“I think you are missing something”和“Paedon?What did you say?”
除此之外可以看到“I know the secret”和“You know how to speak to programs,Mr.Reverse-Enginner”
猜测当我们输入前者的口令时,程序会返回后者的信息
查看函数调用图,可以观察到关键部分在sub_401280,程序使用字符串比较函数strcmp来比较口令书否输入正确,然后利用print和fprint函数输出
查看sub_401280函数的流程图
可以看到存在cmp[ebo+arg_0],2 判断程序是否有两个参数
若存在两个参数则进行下一步比较判断
通过分析可知,程序将用户口令与字符串“I know the secret”相比较,一致则反馈其结果“You know how to speak to programs,Mr.Reverse-Enginner”
返回命令行尝试验证,结果正确
-
用IDA Pro Free打开crackme2.exe,打开函数调用图,发现其关键部分在sub_401280
查看sub_401280的函数流程图
分析:需要先将crackme2.exe重命名为crackmeplease.exe后,再输入口令“I know the secret”
返回命令行尝试,输入 copy crackme.exe crackmeplease.exe,将程序复制并重命名,输入 crackmeplease.exe “I know the secret”,得到结果 “We have a little secret:Chocolate”
2.3 分析实践任务一
分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
1、提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
2、找出并解释这个二进制文件的目的;
3、识别并说明这个二进制文件所具有的不同特性;
4、识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
5、对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
6、给出过去已有的具有相似功能的其他工具;
7、可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
- 在命令行中输入 md5sum RaDa.exe 得到md5摘要值
- 打开Process Explorer后运行 RaDa.exe,对其进行监听
如图发现该程序用http连接到目标为10.10.10.10的主机下名为RaDa——commands的网页上,创建文件夹C:\RaDa\tmp保存下载文件,进行DDOS拒绝服务攻击,将RaDa.exe复制到C:\RaDa\bin。该程序还依次读、写和删除注册表,打开注册表查看发现没有信息,则表示已删除。接下来执行exe(执行指定命令)、put(将宿主主机中的指定文件上传到服务器)、get(将服务器中的指定文件下载到宿主主机中)、screenshot(截取宿主主机的屏幕并保存到tmp文件夹)、sleep(停止活动一段时间)
可以查看到作者信息 - 用IDA工具打开脱壳后的文件RaDa_unpacked.exe,查看Strings窗口->edit->Setup,设置类型为Unicode
在strings中点击IP地址: http://10.10.10.10/RaDa,
定位到相应位置后,由上述分析,用http连接到目标为10.10.10.10的主机下名为RaDa——commands.html,对应的函数为sub_404FB0,点击进入此函数,得到汇编代码如图,这个字符串被拷贝到dword_40C030变量中.
回答问题: - 1、提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息。
MD5摘要信息:caaa6985a43225a0b3add54f44a0d4c7 - 2、找出并解释这个二进制文件的目的。
通过监听RaDa.exe可以得到,该程序运行后会通过http请求连接到指定主机,进行接受攻击者指令操作,猜测该程序为一个后门程序或僵尸程序。 - 3、识别并说明这个二进制文件所具有的不同特性。
该程序启动之后将自己复制到c盘之中,尝试与10.10.10.10连接,解析获得的web页面,获取其中的指令并执行;等待一段时间后继续按照这个循环执行。 - 4、识别并解释这个二进制文件中所采用的防止被分析或者逆向工程的技术。
使用了UPX加壳工具进行了加壳处理。 - 5、对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由。
猜测是后门程序,因为该恶意代码不具有自主传播模块,也不具有传播和感染的性质,故不属于病毒和蠕虫,也并未进行伪装,故不是木马,并且该程序执行需攻击者远程发送指令。 - 6、给出过去已有的具有相似功能的其他工具。
Bobax、Setiri、Rootkit等。 - 7、可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
2004年,由Raul siles和David Perze二人编写。
2.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、那些攻击成功了?是如何成功的?
1、IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
- IRC是因特网中继聊天(Internet Relay Chat)的简称;
- 申请加入时需要发送的消息有三种,分别是口令,昵称和用户信息。注册完成后,客户端就可以使用JOIN 信息来加入频道;
- IRC通常使用6660-6669端口,其中一般使用6667端口进行明文通信,如果是使用SSL进行加密通信则使用6697端口。
2、僵尸网络是什么?僵尸网络通常用于什么?
- 僵尸网络是指攻击者(称为botmaster)出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络;
- 僵尸网络,是互联网上受到黑客集中控制的一群计算机,往往被黑客用来发起大规模的网络攻击,如分布式拒绝服务攻击(DDoS)、海量垃圾邮件等,同时黑客控制的这些计算机所保存的信息也都可被黑客随意“取用”。
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、209.196.44.172
4、在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络
- 在kali终端中输入 sudo apt install tcpflow
- 输入命令tcpflow -r botnet_pcap_file.dat’host 209.196.44.172 and port 6667’获取209.196.44.172与172.016.134.191之间的所有的 IRC 数据包,得三个文件,172.016.134.191.01152-209.196.044.172.06667、209.196.044.172.06667-172.016.134.191.01152和report.xml,report.xml
查看report.xml文件的内容,可以查看到通信双方的信息
5、哪些IP地址被用于攻击蜜罐主机?
输入命令 tcpdump -n -nn -r botnet.pcap ‘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,查看1.txt文件中148个被攻击的端口。
下面我们使用下面的指令找出所有的可能连接的主机的IP地址。这个指令的作用就是将连接IP地址输出到2.txt中,我们看到总共有165个主机可能被用于入侵蜜罐。其中awk -F就是指定分隔符,可指定一个或多个,print后面做字符串的拼接。
tcpdump -n -nn -r botnet_pcap_file ‘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、攻击者尝试攻击了那些安全漏洞?
7、那些攻击成功了?是如何成功的?
-
因为蜜罐的特殊性,只要是进入蜜罐的流量都应该被认为是攻击。所以首先明确被攻击的端口。
-
输入命令
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
tcpdump -r 1.dat -nn 'src host 172.16.134.191' and udp | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq
可以看到筛选出的与蜜罐主机相关的tcp端口有135、139、25、445、4899、80端口
与蜜罐主机相关的udp端口有137端口
- 在wireshark过滤栏中输入
tcp.dstport==80 && ip.dst == 172.16.134.191
,筛选出目的ip为172.16.134.191、目标端口为80的数据包。
可以看到ip为24.197.194.106的主机连接数据包最多,判断是不断用脚本攻击服务器的漏洞,从而获得系统权限
再查看68.169.174.108访问的80端口,可以看到是正常访问
查看到ip为 210.22.204.101访问的80端口,数据包信息有异样,有很多C,猜测攻击者想通过缓冲区溢出攻击来获得命令行
查看到IP为218.25.147.83访问的80端口中,数据包信息存在很多的N,在通过观察发现C:\notworm,猜测是蠕虫代码
通过蜜罐主机80端口向外的流量分析,可以发现蜜罐主机做的几次回应均为一个iis服务器的默认页面http/1.1,所以80端口的这些攻击均失败。
- 在wireshark过滤栏中输入
tcp.port==135
和tcp.port==25
,筛选出目标端口为135和25的数据包。
没有发现有什么数据交互,猜测攻击者只是对这两个端口进行connect扫描 - 在过滤框中输入过滤条件
tcp.dstport==139 && ip.dst == 172.16.134.191
查看139端口数据包
虽然有很多连接到这个端口的,但是基本都是一样的,大部分都是连接,然后很多空会话,同样这个也没有成功,这个应该是个SMB查点。 - 在过滤框中输入过滤条件 tcp.dstport==445 && ip.dst == 172.16.134.191来看TCP 445号端口
发现一个PSEXESVC.EXE字符串,是由61.111.101.78发起的,这似乎是一个类似于telnet的远程控制程序,某些反病毒扫描程序会报告其中的一个或多个工具感染了“远程管理”病毒。
通过对这种字符串的搜索,发现这是一种Dv1dr32蠕虫,这种蠕虫正是通过IRC进行通信。
3.学习中遇到的问题及解决方法
- 问题1:
在本机中下载RaDa压缩包后解压,文件夹内的rada.exe会被删除。 - 问题1解决方案:
在解压前先将本机的病毒防护的实时防护关掉,之后再将文件复制进虚拟机。
4.实践总结
本次实验中对恶意代码的学习比较深入,但是对于恶意代码的特征还不熟悉,对于数据包中攻击机对靶机进行的攻击无法分辨出属于哪类恶意代码攻击,对数据包分析比较吃力,参考同学和学长学姐的实验报告后跟着学习分析。