一、实验内容
1、恶意代码文件类型标识、脱壳与字符串提取
对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
(3)使用字符串提工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
2、使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
3、分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
(2)找出并解释这个二进制文件的目的;
(3)识别并说明这个二进制文件所具有的不同特性;
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
(6)给出过去已有的具有相似功能的其他工具;
(7)可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
(8)给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。
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)将目的文件RaDa.exe下载下来,通过WinSCP传递到虚拟机kali上面:
在kali进入此文件所在目录,使用指令file RaDa.exe
:
可以看到输出的结果,关于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,将该文件通过WinSCP传到kali虚拟机,然后我们就可以使用strings RaDa_unpacked.exe
查看脱壳后文件的可打印字符串
可以看出,前一部分内容还是跟RaDa.exe一样,没有被更改,但是后面的乱码部分已经变成了可以读取的内容,但是并没有找到作者的信息,只能找到一些函数调用名以及其他的可用字符串。
(5)使用更高级的工具:Process Explorer,打开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下载下来,传到kali虚拟机,使用file crackme1.exe
和file crackme2.exe
指令简单查看文件的信息
发现这个文件是windows系统下运行的32位可执行程序,并没有图形界面,是命令行程序。
(2)通过命令行先对输出结果进行猜测:
发现只有当输入参数为1个的时候,输出为“Pardon? What did you say?”,而当输入参数个数为其他任意值的时候,输出结果都是“I think you are missing something.”。从这一点我们可以猜测输入参数的个数为1,但是具体要输入什么才会有正确的输出,我们并不知道,所以我们又要使用工具,这次采用的是功能强大的反汇编和反编译工具IDA PRO。
(3)使用IDA pro工具打开crackme1.exe,选择文件类型为PE。这时候出现了很多界面,我们先打开Strings页面用于查看字符串
可以查看到该程序中出现的明文字符串,发现了有两个没有出现过的字符串,分别是:“I know the secret”和“You know how to speak to programs, Mr.Reverse-Engineer”。所以猜测,这两个字符串就有可能是正确的输入或者是输出,所以我们进行测试。
(4)输入crackme1.exe "I know the secret"
和crackme1.exe "You know how to speak to programs, Mr.Reverse-Engineer"
当输入“I know the secret”的时候程序执行的输出就是另一个字符串“You know how to speak to programs, Mr.Reverse-Engineer”,而当输入后者的时候,输出的是和其他错误输入一样的“Pardon? What did you say?”,所以得出结论,程序的正确输入为“I know the secret”,正确输出为“You know how to speak to programs, Mr.Reverse-Engineer”。
(5)在IDA中切换到页面IDA-viewA,然后在view中找到graphs选项并打开Function Call查看函数调用图(或者使用快捷键Ctrl+F12):
调用了输出函数并且还使用了strcmp函数,我们有理由怀疑strcmp函数是用来比较输入的字符串和有正确输出的输入字符串的,所以关键就在于sub_401280中.
(6)在view中找到graphs选项并打开Flow Chart查看函数流程图(或者使用快捷键F12),找到sub_401280的函数流程图如下:
(7)对各个部分进行具体分析:
分析得知,该文件将我们的输入与正确输入“I know the secret”进行对比,一致的话就能得到我们正确的输出,如果错误就会提示“Pardon? What did you say?”并换行。
(8)接下来对crackme2.exe进行分析。同样用IDA PRO打开,并查看strings页面:
(9)打开Function Calls进一步地分析
发现在crackme2.exe中依旧是sub_401280部分与输入的对比有关
(10)打开函数流程图:
(11)对各个部分进行具体分析:
总体来说跟crackme1.exe差不多,区别在于在判断参数个数正确之后增加了对于程序名的确认,只有程序名为crackmeplease.exe的时候才能被执行,否则就会提示“I have an identity problem.”并换行。
(12)最后我们进行测试,首先复制一份crackme2.exe文件并将文件名改为crackmeplease.exe,再输入crackmeplease.exe "I know the secret"
,得到正确输出:
(三)分析一个自制恶意代码样本rada
1、提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息
(1)对二进制文件采用md5进行摘要:md5sum RaDa.exe
(2)更改样本的文件名并再次进行md5摘要:md5sum 20222422tky.exe
发现结果没有发生变化,认为摘要值可以作为帮助识别同一样本的信息。
使用file 20222422tky.exe
指令查看文件信息
发现这是一个运行在Windows系统上的有图形界面的32位PE文件,这也可以作为识别同一样本的信息。
2、找出并解释这个二进制文件的目的
(1)打开Process Explorer工具并运行RaDa_unpacked.exe,这时候就可以在工具中的strings页面内看到这个文件中的字符串:
(2)用IDA打开RaDa_unpacked.exe并切换到strings页面,右键打开setup strings window并选择允许的字符串类型为Unicode:
(3)看到程序的作者以及发布时间:
还发现了一个网页地址和两个本地地址,以及upload和download的功能:
还看到有三个私有网段的信息:
(4)打开Wireshark进行抓包,我们发现,在目标程序运行的时候向10.10.10.10的地址发送了大量的TCP包并返回了大量ICMP包:
发现这些TCP包和ICMP包都是空的,推测是DDoS拒绝服务攻击和ICMP洪泛攻击
(5)回到刚刚IDA PRO的Strings页面,发现如下字符:
网上搜索资料:
发现这些字符串的意义是命令行参数,具体实现的功能如上图
(6)双击私有网段的字符串内容来查看详细这一段字符串所在的位置:
找到对应的函数:sub_4052C0,并双击打开,然后查看Flot Chart:
发现,这三个私有网段出现的意义就是判断目标主机的IP地址是否在私有网段内,如果是,就访问10.10.10.10,并进行之后的操作。
(7)查看注册表编辑器来判断bin文件夹和tmp文件夹的作用:
发现在bin目录下新建了一个RaDa.exe文件,说明这里的bin文件夹是将RaDa.exe放进去,加入自启动项
3、识别并说明这个二进制文件所具有的不同特性
分析推测得如下结果:
(1)RaDa.exe运行后,会在受害主机C盘创建RaDa文件夹
(2)修改注册表以实现随系统开机自启动的功能
(3)访问网址http://10.10.10.10/Rada/Rada_command.html,并利用其进行上传下载文件
(4)利用各种指令获取受害主机的隐私信息
(5)发动拒绝服务攻击
4、识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
这个程序采用了UPX加壳技术来达到防止被分析或者是逆向工程的技术
5、对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
通过分析,发现这个程序不能进行自我复制和自我传播,所以不是病毒或者是蠕虫程序。但是这个程序可以通过在目的主机上执行来获取目的主机的Shell,所以猜测这个程序是后门程序。
6、给出过去已有的具有相似功能的其他工具
在上次实验使用的MSF meterpreter为具有相似功能的工具
7、可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
可以找到作者信息。
条件:脱壳且作者还要将自己的信息写入文件。
8、给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法
(1)基于特征码的检测方法
原理:基于特征码的恶意软件检测方法是恶意代码检测的基石,通过检测二进制文件中是否含有恶意代码特征值来判断文件是否存在威胁。
实现方式:该方法依赖于海量已知的恶意代码特征,这些特征绝大部分都是人工逆向提取出来含有一定意义的16进制码,也可能是由程序自动提取得到的特征码。在检测过程中,将待检测文件的特征码与已知恶意软件特征码数据库进行匹配,如果找到相同的特征码,则将目标软件判定为恶意软件。
优缺点:基于特征码的检测方法具有准确性高、误报率低等优点,但只能检测已知的恶意软件,对于未知的恶意软件则无法检测。
(2) 基于签名的扫描技术
原理:基于恶意代码签名的检测技术并没有对文件进行分析,只是对文件进行了签名计算,通过比较文件的签名与已知恶意软件的签名来判断文件是否为恶意软件。
实现方式:该方法通常用于静态分析,通过计算文件的签名并与已知恶意软件的签名库进行匹配来检测恶意软件。
优缺点:基于签名的扫描技术实现简单、快速,但同样只能检测已知的恶意软件,对于未知的恶意软件则无法检测。
(3) 启发式扫描技术
原理:启发式扫描技术依赖于特征库,但与特征码静态扫描不同的是,启发式扫描会实时检测系统中存在的进程,当进程作出一些敏感行为时(如修改注册表、格式化磁盘、长时间大量读写文件等)为该进程累积权值,不同的行为对应了不同的权值,当一个进程权值达到设定的阈值时即可以判定该程序存在恶意行为。
实现方式:该方法通过动态分析系统中进程的行为来检测恶意软件。
优缺点:启发式扫描技术可以检测未知的恶意程序,并且还可以排除二进制文件加壳而导致的漏报。但是,启发式扫描检测进程是基于程序运行之上的,也就是说当一个未知安全性的程序运行后,在其生命周期内实时的对于其行为检测,当恶意程序通过某种方式绕过了启发式检测后,该恶意程序的危险行为会直接作用于系统,造成威胁。
(4)沙盒模拟技术
原理:沙盒分析法也是一种动态分析方法,其将待检测文件置于了一个模拟的、可控的虚拟环境中运行,通过分析其行为以及函数调用来对其威胁性打分。
实现方式:该方法通过模拟一个虚拟环境来运行待检测文件,并观察其在虚拟环境中的行为来判断其是否为恶意软件。
优缺点:沙盒模拟技术可以弥补启发式扫描的不足,减小了不必要的损失,提高了检测的准确性。但是,该方法需要消耗较多的计算资源,并且对于某些复杂的恶意软件可能无法完全模拟其行为。
(5) 基于行为的检测方法
原理:基于行为的检测方法通过观察恶意软件在系统中的行为来检测其是否存在。
实现方式:该方法通常结合系统监控工具(如任务管理器、资源监视器等)来观察系统的异常行为,如频繁的广告弹窗、浏览器主页被篡改、系统性能下降等。同时,也可以利用防病毒软件中的行为监控功能来检测恶意软件的行为。
优缺点:基于行为的检测方法可以检测未知的恶意软件,并且对于伪装成正常程序的恶意软件也有较好的检测效果。但是,该方法需要较高的系统监控能力和专业知识,并且可能会产生一定的误报和漏报。
(四)取证分析实践
1、IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
(1)IRC的定义
IRC,全称Internet Relay Chat,中文一般称为互联网中继聊天,是由芬兰人Jarkko Oikarinen于1988年首创的一种网络聊天协议。它允许用户通过互联网进行实时文本交流,并提供了一种分布式的聊天环境,用户可以加入不同的频道(channels)进行交流。
(2)IRC客户端申请加入网络时发送的消息
当IRC客户端申请加入一个IRC网络时,它会发送一系列的消息以完成注册和加入频道的过程。这些消息包括用户登录信息、频道加入请求等。然而,具体的消息内容可能会因不同的IRC服务器和客户端实现而有所差异。通常,这些消息是遵循IRC协议规定的格式和命令来发送的。
(3)IRC使用的TCP端口
IRC一般使用TCP端口6667进行通信。这是IRC协议的默认端口,也是大多数IRC客户端和服务器在连接时所使用的端口。然而,有些IRC服务器可能会使用其他端口,这取决于服务器的配置和网络环境。因此,在连接IRC服务器时,用户需要确保所使用的端口与服务器配置的端口相匹配。
2、僵尸网络是什么?僵尸网络通常用于什么?
(1)定义:
僵尸网络(BotNet)是指采用一种或多种传播手段,将大量主机感染bot程序(僵尸程序)病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络。
(2)常见用途:
分布式拒绝服务攻击(DDoS攻击):僵尸网络可以同时向目标服务器发送大量请求,导致服务器过载并最终崩溃。这种攻击不仅会导致目标网站无法访问,还可能对企业造成巨大的经济损失。
发送垃圾邮件:僵尸网络可以用来发送大量垃圾邮件,这些邮件可能包含广告、诈骗信息或钓鱼链接。由于垃圾邮件的发送源头被分散在不同的受感染计算机上,因此很难追踪和阻止。
数据窃取:僵尸网络可以从受感染的计算机上窃取敏感数据,如登录凭证、银行信息和个人身份信息。这些数据可以被攻击者用于非法活动或出售给第三方。
加密货币挖矿:僵尸网络可以利用受感染计算机的计算资源来进行加密货币挖矿。虽然每台计算机贡献的算力有限,但通过成千上万台计算机的累积,这种方式可以产生显著的收益。
3、蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
将botnet_pcap_file.dat文件通过WinSCP传到虚拟机kali中并用Wireshark打开,使用过滤条件:ip.src == 172.16.134.191 && tcp.dstport == 6667 || tcp.dstport == 6697
:
发现蜜罐主机通信的IRC服务器有五个,分别是66.33.65.58、63.241.174.144、217.199.175.10、209.196.44.172和209.126.161.29。
4、在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
通过指令apt-get install tcpflow
对tcpflow进行安装:
执行以下指令:tcpflow -r botnet_pcap_file.dat 'host 209.196.44.172 and port 6667'
:
发现会生成172.016.134.191.01152-209.196.044.172.06667,209.196.044.172.06667-172.016.134.191.01152和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
发现一共有3461台主机访问了僵尸网络。
5、哪些IP地址被用于攻击蜜罐主机?
使用如下指令将ip输入到20222422tky.txt中: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> 20222422ip.txt;wc -l 20222422ip.txt
发现有165个ip攻击了蜜罐主机
6、攻击者尝试攻击了那些安全漏洞?
输入指令: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(rpc),139(netbios-ssn),25(smtp),445(smb),4899(radmin),80(http)
UDP:137(netbios-ns)
7、那些攻击成功了?是如何成功的?
使用Wireshark进行抓包分析;
TCP25:ip.src == 172.16.134.191 && tcp.port==25
看到基本都是建立“三次握手”连接和“四次握手”断开连接,未成功
TCP135:ip.src == 172.16.134.191 && tcp.port==135
有三次握手,但没有实质性的攻击
TCP139:ip.src == 172.16.134.191 && tcp.port==139
发现有NBSS协议和SMB协议的数据包,但还是只建立了链接
TCP445:ip.src == 172.16.134.191 && tcp.port==445
发现SMB协议不仅仅建立了连接,还进行了数据传输,其中61.111.101.78这个攻击者获取了更高的权限,并给蜜罐主机的445端口发送了PSEXESVC.EXE,说明进行了攻击
TCP4899:ip.src == 172.16.134.191 && tcp.port==4899
发现有一个HTTP包使用了windows的cmd命令并使用了dir指令,说明受到了攻击
TCP80:ip.src == 172.16.134.191 && tcp.port==80
包内发现一些文件路径,说明受到攻击
UDP137:ip.src == 172.16.134.191 && udp.port==137
发现只建立了连接,没有进行攻击
综上分析:
成功:
TCP的80端口
TCP的445端口
TCP的4899端口
失败:
TCP的135端口
TCP的25端口
TCP的139端口
UDP的137端口
三、问题与解决方案
问题一:在windows上files,strings等命令无法使用
问题一解决:将要分析的文件传到kali上,再使用files,strings等命令发现可以使用
问题二:tcpflow命令无法使用
问题二解决:通过apt-get install tcpflow
进行安装
问题三:使用IDA PRO的时候Flow Chart总是只有一小部分
问题三解决:等待一段时间再打开Flow Chart变为正常
四、学习感悟、思考
在这次实验中,我深刻体会到了对恶意代码进行深入分析的重要性。
通过对rada恶意代码样本的处理,我逐步掌握了文件类型识别、脱壳以及字符串提取等关键步骤。在分析过程中,我深刻体会到了IDA Pro的强大功能。无论是静态分析中的反汇编代码查看、函数调用关系分析,还是动态分析中的断点设置、寄存器跟踪,IDA Pro都为我提供了极大的便利。同时,我也学会了如何结合静态和动态分析来更全面地理解程序的行为和逻辑。在分析自制恶意代码样本rada,我不仅深入了解了rada恶意代码的基本信息和行为特性,还掌握了逆向工程和恶意代码检测的基本技能。在取证分析实践中,我通过处理和分析Snort收集的蜜罐主机网络数据源,深入了解了IRC、僵尸网络等相关概念,并成功回答了关于蜜罐主机通信、僵尸网络访问主机数量、攻击者IP地址、攻击漏洞和成功攻击方式等问题。
通过这次实践,我不仅掌握了取证分析的基本方法和技能,还深刻认识到了信息安全的重要性和复杂性。在未来的学习和工作中,我将更加注重信息安全方面的学习和实践,不断提高自己的安全意识和技能水平。