一、实验内容
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)那些攻击成功了?是如何成功的?
二、实验过程
任务一:恶意代码文件类型标识、脱壳与字符串提取
首先我们在kali中对下载好的测试文件RaDa.exe使用file
指令查看它文件类型:
为了进一步获取该文件的相关信息,我们使用下载好的PEiD打开RaDa.exe:
可以发现,RaDa.exe使用了0.89.6版本的UPX压缩壳。
接下来我们先尝试着使用strings命令对目标文件进行分析:
发现结果是一堆乱码,所以我们要使用下载好的脱壳工具对其进行脱壳处理:
然后再用strings对脱壳后的文件进行分析:
对脱壳后的文件分析发现此时结果已经可以看懂一些了,可以找出这个程序作者的名字是“Raul siles 86 David Perez”
任务二:使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息
1.分析crackme1.exe文件
先在终端测试运行一下这个crackme1.exe文件:
由此可以发现,在命令行执行参数的个数会对crackme1.exe的输出产生影响。当参数个数为2时,程序输出“Pardon? What did you say?”;否则,程序输出“I think you are missing something.”。但目前,并没有发现参数内容的不同会对输出造成什么影响。
打开IDA看一下,发现在IDA Pro中也可以看到这“四句话”:
我们发现最开始提示缺少参数的提示语在序号一的位置,之后就是提示密码输入错误的提示语在序号二的位置,然后他们两个都返回了同一个函数,进行重新判断;
接着发现了两句没有见过的提示语,其中有一句的大致意思好像是说你知道怎么和程序交流之类的话,有点像输入正确的提示语。然后可以看到这条提示语所在的函数是由上面的12D2函数跳转而来,那么就可以猜测12D2中那句奇怪的话,有可能就是正确的密码,于是来测试一下:
输入crackme1.exe "I know the secret"
此时得到结果You know how to speak to programs,Mr. Reverse-Engineer
,证实了猜想的正确性。
2.分析crackme2.exe文件
在IDA Pro中提取文件可打印字符,可以发现,程序中可能一共存储了“五句话”。分析思路与工具使用方法与上文相同,不再赘述。
经分析后我们发现他可能判断的东西,现在不只有密码,甚至还有文件的名称,于是我们将crackme2.exe改名后在输入正确的密码,发现这回结果是正确的!
输入crackmeplease.exe"I know the secret"
得到结果We have a little secret:Chocolate
3.识别并说明这个二进制文件所具有的不同特性
该二进制文件可以在执行时自动复制,来隐藏自己,并且可以通过修改注册表实现在每次系统启动时自动运行,实现远程攻击。
4.识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
用UPX加壳
5.对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
该恶意代码样本属于后门,理由:它可以通过隐蔽手段监控和窃取受害者计算机信息,在受害者不知情的情况下泄露敏感数据
6.给出过去已有的具有相似功能的其他工具;
msfvenom
7.可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
可以,在上述实验过程中已经说明
8.给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。
以下是五种详细的方法:
-
基于特征码的检测方法
原理:特征码是被确定为只有某种恶意软件(在此为后门恶意软件)才可能会有的一串二进制字符串,这串字符串通常是文件里对应的代码或汇编指令的地址。
实施方式:通过采集后门恶意软件样本,提取其特征码,建立特征码数据库。在检测时,将待检测文件的特征码与数据库中的特征码进行比对,若存在吻合的片段,则判定该软件为恶意软件。
优缺点:此方法速度快、误报率低,且占用资源少,但只能检测已知的后门恶意软件,对于变形病毒、多态病毒等新型恶意软件无能为力。 -
静态分析方法
原理:在不执行恶意软件的情况下,对其二进制文件、可执行文件或反编译文件进行分析,提取静态特征,如API标头、引用的DLL、PE区域等,并与正常软件的静态特征进行比对。
实施方式:使用静态分析工具(如IDA、Dependency Walker等)对后门恶意软件进行解析和特征提取,然后结合特征库进行比对分析。
优缺点:静态分析方法可以准确地捕捉到恶意软件的静态特征,但由于特征类型单一,且易受到混淆或加壳等技术的干扰,导致检测效果可能下降。 -
动态分析方法
原理:在受控环境下执行恶意软件样本,记录其行为特征,如行为日志、系统调用名称、上下文参数、环境变量等,然后与已知的后门恶意软件行为特征进行比对。
实施方式:使用动态分析工具(如沙盒、Process Monitor、Wireshark等)在隔离环境中运行后门恶意软件,并收集其行为数据进行分析。
优缺点:动态分析方法能够捕捉到恶意软件在运行时的实际行为,对于检测变形病毒、多态病毒等新型恶意软件具有优势。但此方法需要恶意软件完整运行,再进行判断,所以检测时效性较差,且可能受到恶意软件逃避检测策略的影响。 -
基于机器学习的检测方法
原理:利用机器学习算法对恶意软件和正常软件进行区分,通过提取恶意软件的静态和动态特征,训练模型来识别新的恶意软件样本。
实施方式:收集大量的后门恶意软件和正常软件样本,提取它们的静态特征(如PE头特征、二进制内容特征等)和动态特征(如API调用特征、系统修改特征和网络行为特征等),然后使用这些特征训练机器学习模型(如CNN、RNN等)。在检测时,将待检测样本的特征输入模型进行预测。
优缺点:基于机器学习的检测方法能够应对恶意软件的变种和日益庞大的数量,具有较高的灵活性和准确性。但此方法需要大量的数据和计算资源,且模型的性能受到特征选择和算法设计的影响。 -
网络流量监测方法
原理:后门恶意软件通常会通过网络与外部服务器进行通信,传输有害信息或接收远程指令。通过监测计算机与外部服务器的网络流量,可以检测出是否存在恶意软件。
实施方式:使用网络流量分析工具(如Tcpdump、Wireshark等)对计算机的网络流量进行捕获和分析,检测是否存在异常的网络连接和数据传输行为。
优缺点:网络流量监测方法能够实时地检测到恶意软件的网络活动,对于防范网络攻击和恶意软件侵扰具有重要作用。但此方法需要较高的网络技术和分析能力,且可能受到网络加密和伪装技术的干扰。
任务三:分析一个自制恶意代码样本rada,并撰写报告,回答以下问题
1.对RaDa.exe使用"md5sum"命令计算RaDa.exe的md5值:
2.接着运行ProcessExplorer,然后运行脱壳后的rada.exe。注意运行rada.exe时,弹出提示框之后不要点确定。
然后就可以在ProcessExplorer中找到正在运行的rada.exe
点击strings,就会出现下面的文字:
根据上述结果来分析:
该程序会访问10.10.10.10/RaDa这个链接,并从RaDa_commands.html中获取相应的指令。
在文件操作方面,该程序在系统的C盘根目录下创建了一个名为RaDa的文件夹,其中有tmp和bin两个文件,其中bin中的文件即为RaDa.exe,可以推测程序运行后会自动将自己复制到C:\Rada\bin目录中。
此外 ,程序中还涉及了两个注册表项HKLM\Software\Microsoft\Windows\CurrentVersion\Run\和HKLM\Software\VMware, Inc.\VMware Tools\InstallPath,也就是说程序会将自己加入系统的自启动项,每次启动自动运行,而从三个函数名RegWrite、RegRead和RegDelete可以看出程序能够对注册表进行了相应的操作。
除了上述操作外,该程序还具有执行DDoS攻击的能力。通过利用特定的网络协议和漏洞,程序可以发动分布式拒绝服务攻击,导致目标系统瘫痪或无法访问。
任务四:取证分析实践
问题回答:
1.IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
IRC是Internet Relay Chat的英文缩写,中文一般称为互联网中继聊天,是一种应用层的协议。其主要用于群体聊天,但同样也可以用于个人对个人的聊天。IRC采用TCP通讯方式,默认登录端口为TCP 6667。当TCP 6667端口不通时,客户端会尝试连接其他不同的TCP端口,直到连接成功或尝试失败。TCP 6667端口是IRC通信的主要端口,用于客户端与服务器之间的数据传输和交互。
2.僵尸网络是什么?僵尸网络通常用于什么?
僵尸网络(英文名称叫Botnet),是互联网上在网络蠕虫、特洛伊木马、后门工具等传统恶意代码形态的基础上发展、融合而产生的一种新型攻击方法。往往被黑客用来发起大规模的网络攻击,如分布式拒绝服务攻击(DDoS)、海量垃圾邮件等,同时黑客控制的这些计算机所保存的信息也都可被黑客随意“取用”。
僵尸网络通常被黑客用来发起大规模的网络攻击,例如分布式拒绝服务攻击(DDoS)等。
3.蜜罐主机(IP地址:172.16.134.191)与哪些IRC服务器进行了通信?
首先,我们使用Wireshark打开数据文件botnet_pcap_file.dat
,过滤源IP地址为172.16.134.191
,目的端口为6667或6697
设置过滤条件为:ip.src == 172.16.134.191 && tcp.dstport == 6667 || tcp.dstport == 6697
过滤统计结果有如下五个IP地址:
63.241.174.144
66.33.65.58
217.199.175.10
209.196.44.172
209.126.161.29
4.在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
对捕获到的数据包进行分流,指令为: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.1 91.01152
,report.xml
接下来我们需要知道多少不同的主机访问了以209.196.44.172为服务器的僵尸网络:
首先输入:apt install tcpflow
然后输入如下命令:tcpflow -r botnet_pcap_file.dat 'host 209.196.44.172 and port 6667'
发现共有3461个主机。
5.哪些IP地址被用于攻击蜜罐主机?
输入下列命令来获取IP并存储到文件中: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
查看文件:cat ipaddr.txt
6.攻击者尝试攻击了那些安全漏洞?
将端口分为TCP端口和UDP端口两部分,分别查看它们受攻击的情况
①筛选出蜜罐主机被攻击的TCP端口:
①筛选出蜜罐主机被攻击的UDP端口:
7.哪些攻击成功了?是如何成功的?
使用Wireshark过滤相关条件
(1)TCP 25端口和135端口
观察报文发现,除了“三次握手”建立连接和“四次挥手”释放连接外没有其他数据传输。由此可得攻击失败。
(2)TCP 80端口
观察报文发现,向目标成功请求默认网页。攻击成功
(3)TCP 4899端口
观察报文发现,此时有大量数据交互。攻击成功
(4)TCP 445端口
观察报文发现,返回信息中含有\PIPE\lsass,通过搜索可知,这是一个远程调用,所以攻击者肯定是获得了权限。攻击成功
(5)TCP 139端口
攻击失败
(6)UDP 137端口
攻击失败
三、问题及解决方案
问题1:在运行ProcessExplorer时找不到RaDa.exe
解决方案:起初认为找不到RaDa.exe是因为没有在虚拟机里面做,然后就去虚拟机里面尝试运行ProcessExplorer,发现还是不行。
最后的解决方法是在主机上先运行ProcessExplorer,再运行RaDa.exe。当运行RaDa.exe时弹出的对话框不用点确定,就可以找到RaDa.exe了。
问题2:在使用Wireshark过滤80端口时,找到了如下数据包:
起初以为是攻击失败。
解决方案:再观察了其他数据包之后发现是我找错了要分析的报文
如上图可以发现已经向目标成功请求默认网页,攻击成功。
四、学习思考感悟
在本次恶意代码分析实验中,我不仅加深了对恶意代码的原理和特征的理解,也对恶意代码的分析、检测以及网络安全取证有了更为深刻的理解。在处理rada恶意代码样本时,我学习到了如何使用工具进行文件格式识别、脱壳以及字符串提取。特别是在使用IDA Pro进行静态和动态分析时,我体会到了逆向工程在解决复杂问题中的巨大作用。
在分析自制恶意代码样本时,我深刻感受到了恶意代码的多样性和复杂性。通过对二进制文件的摘要、目的、特性以及防分析技术的识别,我对恶意代码的运行机制和防范手段有了更深入的认识。同时,我也学习到了如何对恶意代码进行分类,并了解了过去已有的相似工具,这对于构建全面的安全防御体系具有重要意义。
在取证分析实践中,我通过处理蜜罐主机的网络数据源,了解了IRC、僵尸网络等概念,并掌握了如何识别和分析网络攻击的方法。特别是在追踪攻击源和攻击行为时,我更加深入的体会到了网络安全分析时细致和严谨的重要性。
本次实验让我认识到,安全防护不仅仅是被动地阻止威胁,更重要的是主动发现潜在的风险并进行预防性分析。通过实验,我增强了系统监控、恶意软件行为分析的技能,同时培养了在复杂环境中解决问题的能力。我相信这些能力会在未来的网络安全工作中发挥重要作用。