1.实验内容
一、恶意代码文件类型标识、脱壳与字符串提取
对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
二、使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
三、分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
这个二进制文件的md5摘要为caaa6985a43225a0b3add54f44a0d4c7。可以帮助识别同一样本的信息:可以通过摘要值来进行判断
(2)找出并解释这个二进制文件的目的;
这个二进制文件可以通过连接到互联网的指定地址与目的主机取得会话连接,并获得目的主机的部分权限,从而达到操纵目的主机进行一些操作的目的,所以猜测这个程序可能是后门程序和木马程序,而通过杀软的检测也确定了这一点。
(3)识别并说明这个二进制文件所具有的不同特性;
这个二进制文件被运行之后会在目的主机上创建文件夹,并将自己加入自启动项,然后会通过访问指定的地址在目的主机上上传或者是下载一些文件及数据,并且可以在目的主机上执行其他的指令对目的主机进行操控。
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
这个程序采用了UPX加壳技术来达到防止被分析或者是逆向工程的技术。在程序外面加压缩壳,这也是为什么我们在脱壳之前查看Strings会出现乱码的原因。
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
通过对程序的分析,我们发现这个程序不能进行自我复制和自我传播,所以肯定不是病毒或者是蠕虫程序,但是这个程序可以通过在目的主机上执行来获取目的主机的Shell,所以猜测这个程序很有可能就是后门程序。
(6)给出过去已有的具有相似功能的其他工具;
在后门程序实验中,我们也生成过backdoor文件,获取主机或虚拟机的shell。
(7)可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
Raul siles和David Perze,2004。使用IDA Pro分析文件的strings可以查看到。
(8)给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。
1.行为检测码:该恶意代码在C盘中创建文件夹并将文件rada.exe复制到C:\RaDa\bin\路径下,同时将rade.exe加入到开机自启等异常行为可以通过分析计算机操作记录查看。
2.基于特征码的检测方法:此方法通过采集恶意软件样本,提取其特征码,检测时将特征码与检测样本比较,判断是否有样本片段与此特征码吻合,从而判定该软件是否为恶意软件。该恶意代码可以通过“RaDa”作为特征码进行查杀。
3.基于系统日志的检测方法:分析系统日志时可见该恶意代码进行C:\RaDa\目录的创建、以及此目录下文件的修改或删除操作记录,通过此纪录查找与RaDa.exe相关的活动。
4.网络流量检测法:通过监测计算机与外部服务器的网络流量,可以检测该恶意代码寻找与10.10.10.10的HTTP通信并发送大量TCP包。
5.基于沙箱环境的检测方法:使用沙箱工具来运行RaDa恶意软件的样本,监控沙箱环境中的文件操作、进程创建等行为,确认软件是否为恶意软件。
四、取证分析实践
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.实验过程
(一)恶意代码文件类型标识、脱壳与字符串提取
(1)首先,我们将目的文件RaDa.exe下载下来,然后就可以进行简单分析了。我们先使用file指令对文件进行简单地查看。
从图中我们可以看到输出的结果,关于RaDa.exe文件一共有四部分内容,首先PE32代表了这是一个32位的文件,GUI代表了这个文件有图形界面,Intel 80386代表了处理器,最后的for MS Windows代表了这个文件是运行在Windows操作系统上的。
(2)PEiD工具查看RaDa.exe的基本信息,如图所示。
对图中的信息进行分析,这里可以看到文件的入口点、文件偏移、连接器版本、EP段、首字节、子系统、以及我们这里最想知道的加壳类型,也就是UPX壳。
(3)接下来我们继续分析,使用strings指令分析RaDa.exe文件中的可打印字符串。
后面很大一部分内容都是乱码,所以我们要进行脱壳处理,这里用到的工具是超级巡警工具,脱壳过程如下。
(4)这时候我们发现生成了脱完壳的文件RaDa_unpacked.exe,然后再次使用strings指令分析
从这里可以看出,前一部分内容还是跟RaDa.exe一样,没有被更改,但是后面的乱码部分已经变成了可以读取的内容。
(5)我们打开Process Explorer,并且运行刚刚脱壳得到的RaDa_unpacked.exe文件
找到运行的RaDa_unpacked.exe文件,右键单击选择Properties查看详细信息,然后选择Strings页面。
这个程序是Raul siles和David Perze于2004年编写的,这也就是我们想要的作者信息。
(二)使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息
(1)我们先把目标文件crackme1.exe和crackme2.exe下载下来,file指令简单查看文件的信息,如下图所示。
我们简单的了解到,这个文件是windows系统下运行的32位可执行程序,并没有图形界面,是命令行程序。
(2)然后通过命令行先对输出结果进行猜测
我们可以看到,只有当输入参数为1个的时候,输出为“Pardon? What did you say?”,而当输入参数个数为其他任意值的时候,输出结果都是“I think you are missing something.”。从这一点我们可以猜测输入参数的个数为1。
(3)我们使用IDA pro工具打开crackme1.exe,选择文件类型为PE。打开Strings页面用于查看字符串。
(4)在这里我们可以查看到该程序中出现的明文字符串,发现了有两个没有出现过的字符串,分别是:“I know the secret”和“You know how to speak to programs, Mr.Reverse-Engineer”。所以我们猜测,这两个字符串就有可能是正确的输入或者是输出,所以我们进行测试。
我们暂时得出结论,程序的正确输入为“I know the secret”,正确输出为“You know how to speak to programs, Mr.Reverse-Engineer”。
(5)接下来我们继续利用IDA对这一结论进行验证,首先我们在IDA中切换到页面IDA-viewA,然后在view中找到graphs选项并打开Function Call查看函数调用图。
(6)在view中找到graphs选项并打开Flow Chart查看函数流程图。
程序执行的时候首先判断输入参数的个数,如果个数不一致就会输出“I think you are missing something.”并换行。如果输入的参数个数正确,程序就会接着进行判断输入是否正确。将我们的输入与正确输入“I know the secret”进行对比,一致的话就能得到我们正确的输出,如果错误就会提示“Pardon? What did you say?”并换行。
(7)接下来对crackme2.exe进行分析。同样用IDA PRO打开,并查看strings页面,得到下图所示的明文字符串。
(8)然后我们打开Function Calls进一步地分析,发现在crackme2.exe中依旧是sub_401280部分与输入的对比有关.
(9)我们打开函数流程图做最后的确认。
在判断参数个数正确之后增加了对于程序名的确认,只有程序名为crackmeplease.exe的时候才能被执行,否则就会提示“I have an identity problem.”并换行.
(10)最后我们进行测试,首先copy一份crackme2.exe文件并将文件名改为crackmeplease.exe,再输入“I know the secret”,得到正确输出.
(三)分析一个自制恶意代码样本rada
(1)首先我们对二进制文件进行摘要,我们这里采用了md5进行摘要。
(2)然后我们更改样本的文件名并再次进行md5摘要,发现结果没有发生变化,所以我们认为摘要值可以作为帮助识别同一样本的信息。
(3)我们打开Process Explorer工具并运行RaDa_unpacked.exe。
从这个字符串的表中,我们可以得到RaDa_unpacked.exe要达到的目的以及各种特性。
(4)我们用IDA打开RaDa_unpacked.exe并切换到strings页面,我们可以看到很多字符串但是大部分字符串是我们不需要的,所以我们右键打开setup strings window并选择允许的字符串类型为Unicode。
(5)这样操作之后我们看到的大部分字符串都是有实际意义的了。我们先看一些比较直观的信息,比如程序的作者以及发布时间。
(6)同时我们还发现了一个网页地址和两个本地地址,以及upload和download的功能,所以我们猜测这个网页地址可能是上传下载所使用的地址,而bin和tmp是在本地新建的两个文件夹。我们还看到有三个私有网段的信息。
(7)我们查看c盘发现出现了一个rada文件夹,里面有bin文件夹和tmp文件夹。且rada.exe开机自启动。
(8)然后再看那个网页地址,我们猜测这个RaDa.exe程序应该是与目标地址10.10.10.10进行连接,并且访问RaDa_commands.html,所以我们打开Wireshark进行抓包,我们发现,在目标程序运行的时候向10.10.10.10的地址发送了大量的TCP包。
(9)回到刚刚IDA PRO的Strings页面,我们发现还有一些字符串被遗漏了
在图中我们可以看到,有很多--开头的字符串,通过搜索发现,这些字符串的意义是命令行参数。
(10)接下里就是分析三个私有网段的意义,我们先双击私有网段的字符串内容来查看详细这一段字符串所在的位置,然后找到对应的函数也就是sub_4052C0,并双击打开,然后查看Flot Chart。
通过这一段我们可以发现,这三个私有网段出现的意义就是判断目标主机的IP地址是否在私有网段内,如果是,就访问10.10.10.10,并进行之后的操作。
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
个二进制文件的md5摘要为caaa6985a43225a0b3add54f44a0d4c7。可以帮助识别同一样本的信息:可以通过摘要值来进行判断。
(2)找出并解释这个二进制文件的目的;
这个二进制文件可以通过连接到互联网的指定地址与目的主机取得会话连接,并获得目的主机的部分权限,从而达到操纵目的主机进行一些操作的目的,所以猜测这个程序可能是后门程序。
(3)识别并说明这个二进制文件所具有的不同特性;
这个二进制文件被运行之后会在目的主机上创建文件夹,并将自己加入自启动项,然后会通过访问指定的地址在目的主机上上传或者是下载一些文件及数据,并且可以在目的主机上执行其他的指令对目的主机进行操控。
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
这个程序采用了UPX加壳技术来达到防止被分析或者是逆向工程的技术,也就是在程序外面加压缩壳,这是我们在脱壳之前查看Strings会出现乱码的原因。
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
通过对程序的分析,我们发现这个程序不能进行自我复制和自我传播,所以肯定不是病毒或者是蠕虫程序,但是这个程序可以通过在目的主机上执行来获取目的主机的Shell,所以猜测这个程序很有可能就是后门程序。
(6)给出过去已有的具有相似功能的其他工具;
比如我们在实验二中生成的backdoor后门,在目的主机上运行后可以通过访问指定地址来获取目的主机的Shell,从而达到某些操作。
(7)可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
脱壳之后,使用Process Explorer查看文件中的字符串就可以找到作者信息。
(8)给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。
1.行为检测码:恶意软件在感染计算机后会表现出一些特殊的行为,如修改系统文件、创建新文件、发送垃圾邮件等。该恶意代码在C盘中创建文件夹和将rada.exe加入开机自启动等异常行为可以通过分析计算机操作记录查看。
2.基于特征码的检测方法:特征码是某种恶意软件才可能会有的标识码(通常是文件里对应的代码或汇编指令的地址)。此方法通过采集恶意软件样本,提取其特征码,检测时将特征码与检测样本比较,判断是否有样本片段与此特征码吻合,从而判定该软件是否为恶意软件。该恶意代码可以通过“RaDa”和其中一些非授权指令等作为特征码进行查杀。
3.基于系统日志的检测方法:通过对系统日志的分析来发现潜在的问题或异常。系统日志是记录系统运行状态、关键事件和错误信息的重要工具,它包含了大量的系统行为和状态信息(特别需注意与安全相关的日志)。分析系统日志时可见该恶意代码进行C:\RaDa\目录的创建、以及此目录下文件的修改或删除操作记录,通过此纪录查找与RaDa.exe相关的活动。
4.网络流量检测法:恶意软件通常会通过网络与外部服务器进行通信,传输有害信息或接收远程指令。通过监测计算机与外部服务器的网络流量,可以检测该恶意代码寻找与10.10.10.10的HTTP通信并发送大量TCP包。
5.基于沙箱环境的检测方法:将未知或可疑软件放入一个隔离的虚拟环境中运行,以观察其行为并判断其是否为恶意软件。使用沙箱工具来运行RaDa恶意软件的样本,监控沙箱环境中的文件操作、进程创建等行为,确认软件是否为恶意软件。
四、取证分析实践
(1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
IRC是Internet Relay Chart的缩写,也就是因特网中继聊天,也叫互联网中继聊天。IRC的最大特点是实现了在线实时交谈,速度快、功能多的优点使它比电子邮件或新闻组等联络沟通方式更具吸引力。IRC可以设置单独的频道,在这个频道内,输出的文字可供所有人都看到。这样,来自世界不同角落的人能同时得到有关信息。而如果是两个人之间的单独交谈,甚至可以不用通过服务器,以保证谈话的保密性。随着网络带宽的增加和技术的发展,有一些IRC不仅可以传输文字信息,还能传输声音或图像信息,这样的功能就更强了。
如果要申请加入一个IRC网络时,客户端会发送服务器的域名和端口信息。
一般端口号为6667,但是在特殊情况下6660-6669范围的端口都会被使用,该端口为明文传输,如果要进行SSL加密传输,则会使用6697端口。
(2)僵尸网络是什么?僵尸网络通常用于什么?
僵尸网络是指攻击者出于恶意目的,传播僵尸程序控制大量主机(傀儡主机、肉鸡),并通过一对多的命令与控制信道所组成的网络。
僵尸网络构成了一个攻击平台,利用这个平台可以有效地发起各种各样的攻击行为,如分布式拒绝服务(DDoS)攻击、发送垃圾邮件、窃取用户敏感信息等。
(3)蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
用wireshark打开botnet_pcap_file.dat文件,设置过滤条件“ip.src == 172.16.134.191 && tcp.dstport == 6667 and tcp.flags == 0x2”
经过分析,可以得出,蜜罐主机与如下的服务器进行通信:
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为服务器的僵尸网络?
首先需要安装指令tcpflow,需要通过指令apt-get install tcpflow进行安装,然后执行tcpflow -r botnet_pcap_file.dat 'host 209.196.44.172 and port 6667'
之后再对文件进行筛选
可以看出有3461个主机访问目标主机。
(5)哪些IP地址被用于攻击蜜罐主机?
用命令将所有连接蜜罐主机的IP地址输出到20222309.txt
打开文件发现有165个ip地址
(6)攻击者尝试攻击了那些安全漏洞?
使用Wireshark打开数据源botnet_pcap_file.dat,选择“统计”→“协议分级”,可以看到TCP数据包占99.7%,UDP包只占0.3%
筛选TCP的端口
筛选UDP的端口
发现以下端口
TCP:135(rpc),139(netbios-ssn),25(smtp),445(smb),4899(radmin),80(http)
UDP:137(netbios-ns)
(7)那些攻击成功了?是如何成功的?
tcp25号端口
25端口仅仅进行了TCP三次握手,可能只是用来测试端口开放情况
tcp135号端口
135端口仅仅进行了TCP三次握手,可能只是用来测试端口开放情况
tcp139号端口
139端口都被蜜罐主机识别并发送RST包
tcp445号端口
445端口包含了PSEXESVC.EXE,是一种可以通过在远程主机上运行命令来执行维护任务的工具,对此,蜜罐主机回复的reply数据包中出现了命名管道。
tcp4899号端口
4899端口,只有210.22.204.101访问过,查资料得知,4899端口其实是一个远程控制软百件所开启的服务端端口,由于这些控制软件功能强大,所以经常被黑客用来控制被自己控制的远程电脑。
tcp80号端口
80端口主要通过该端口使用脚本攻击IIS服务器的漏洞,从而获取系统权限,并且包的数量非常多,所以猜测是通过缓冲区溢出获得命令行。在No.32889的报文中发现了“c:\notworm”,这是一个蠕虫攻击。
udp137号端口
许多的NBNS数据包,但是没有传输具体的数据和内容,并没有实施攻击.这里的NBNS是NetBIOS name service的缩写,是NetBIOS的命名服务。可知此处是在进行NetBIOS查点。
3.问题及解决方案
- 问题1:使用Process Explorer无法查看rada.exe的信息
- 问题1解决方案:由于rada.exe我是用管理员模式运行的所以,运行Process Explorer也需要要用管理员才有权限查看
- 问题2:kali中无法运行.exe文件
- 问题2解决方案:因为exe属于windows的可执行文件,所以再kali中需要下载wine才能运行,在实验中我则是直接再主机上进行运行。
4.学习感悟、思考等
在本次实验中,我初步接触了很多新的工具,如脱壳工具,进程监测工具,交互式反汇编工具,同时在本次实验中我对于后门程序、木马程序、僵尸网络、蠕虫病毒等一系列恶意代码程序也有了更直接的认识。通过对于Snort收集的蜜罐主机5天的网络数据源的分析,我尝试一步步对数据源筛选和分析,这让我对于理论知识的掌握更加深刻。这次实验不仅锻炼了我的技术能力,更培养了我面对复杂问题的分析和解决能力。