1. 实验内容
一、恶意代码文件类型标识、脱壳与字符串提取
对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
二、使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
三、分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
(2)找出并解释这个二进制文件的目的;
(3)识别并说明这个二进制文件所具有的不同特性;
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
(6)给出过去已有的具有相似功能的其他工具;
(7)可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
(8)给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。
四、取证分析实践
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.实验过程
2.1任务一、恶意代码文件类型标识、脱壳与字符串提取
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
将文件传到kali端,使用file命令查看文件的格式和类型信息如下:
PE32:一个32位的PE文件
(GUI) Intel 80386:运行在Intel 80386 GUI上
for MS Windows:针对的操作系统是Windows。
——然后分析加壳工具,使用PEID
识别结果为“UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo”,可知该程序是UPX的壳,版本是0.89.6。
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
脱壳后程序为RaDa_unpacked.exe。
(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
在kali上使用strings命令分析脱壳后的rada恶意代码样本
脱壳前
脱壳后
用IDA Pro打开RaDa_unpacked.exe,选择“View”→“Open subviews”→“strings”查看。
可知该恶意代码为Raul Siles和David Perez编写
任务二、使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
(1)在IDA导入crackme1.exe,打开View-Open subviews-strings,查看字符串
得出crackme1.exe有四个关联语句:
“Pardon? What did you say?”
“I think you are missing something.”
“You know how to speak to programs, Mr. Reverse-Engineer”
“I know the secret”
查看一下函数调用关系,打开View-Graphs-Function calls
看到主函数main下包含了strcmp,printf,fprintf等语句,从strcmp推测会根据输入不同导致输出不同。
进行反汇编
看出,程序共有四种输出。_mian函数中存在条件语句,满足第一个条件语句的值会进入下一层判断,产生两种输出,如果不满足则有另一种输出输出。由此得出,字符串“I know the secret”就是得到信息的钥匙。
(2)在IDA导入crackme2.exe
打开View-Open subviews-strings,查看字符串
查看函数结构
发现在判断中某子分支中多出来一条判断分支,推测判断参数是否为“crackmeplease.exe”
进行反编译查看结果
果然和推测的一样,关键在“I know the secret”和“crackmeplease.exe”同时进行
当两个参数都满足的时候,才会输出“We have a little secret: Chocolate”
任务三、分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
使用Certutil来计算RaDa.exe的摘要,win+R打开cmd并输入如下命令
certutil -hashfile D:\LeStoreDownload\RaDa.exe
certutil -hashfile D:\LeStoreDownload\RaDa.exe MD5
certutil -hashfile D:\LeStoreDownload\RaDa.exe SHA256
摘要为:
MD5:caaa6985a43225a0b3add54f44a0d4c7
SHA1:4164423ece62c5c4c287f8c2003b84e4e3a6cfda
SHA256:13c2379e9d9f679396e21a3391804cc834892f25691381b6d078d07b56d38f90
基本信息:
在任务一已经分析过,详见任务一
(2)找出并解释这个二进制文件的目的;
打开process explorer进行监听,运行RaDa_dump.exe,查看Strings。
(3)识别并说明这个二进制文件所具有的不同特性;
当文件被执行时,其将自身安装到C盘创建RaDa文件夹,并修改注册表使得系统启动时执行该文件。
将通过浏览器上网,请求页面并获得来自攻击者的指令。可以上传文件,杉树文件等。
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
使用UPX压缩壳,防止被分析。
在没有被脱壳前用IDA分析得到的都是乱码,对程序进行反汇编时,得到不是原始代码。另外,UPX加壳还会运用代码混淆技术,使得代码结构和流程变得更为复杂难懂,提高破解难度。
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
是一个后门程序。它能够接收指令、操控主机,但不具备网络传播、感染等特性,更没有伪装成良性程序进行欺骗。
(6)给出过去已有的具有相似功能的其他工具;
MSF meterpreter,可以生成可执行文件,实现获取主机shell,通过shell获取目标主机音频、摄像头、击键记录等内容。
(7)可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
运行RaDa.exe,输入 RaDa.exe --authors
能够直接显示作者
(8)给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。
- 签名检测法
签名检测法是利用已知的病毒、木马、控制软件等恶意软件的签名来判断是否存在恶意软件。这些签名通常是恶意软件代码中独特的、不易改变的字符串或二进制序列。当扫描工具检测到这些签名时,就会判定为恶意软件并进行处理。 - 静态分析法
静态分析法是通过分析恶意软件的二进制文件、可执行文件或反编译文件提取到的静态特征来发现恶意软件。这种方法将EXE文件以PE文件格式解析,提取样本的文本、全局、头部、导入导出表、节特征等,再通过对比分析即可精准地识别出恶意软件。 - 动态分析法
动态分析法是在虚拟环境中执行恶意软件样本,记录恶意软件的行为特征,如行为日志、系统调用名称、上下文参数、环境变量等。通过分析这些行为特征来判断软件是否为恶意软件。 - 启发式检测法
启发式检测法是基于恶意软件行为的统计学分析,识别与已知恶意软件行为相似的未知威胁。这种方法通过分析恶意软件的行为模式,建立行为模型,并基于这些模型来检测未知的恶意软件。 - 机器学习检测法
随着恶意软件数量的剧增和类型的多样化,传统的检测方法显得效率不足。因此,研究者逐渐趋向于使用机器学习技术来应对恶意软件难以预测的变种和日益庞大的数量。机器学习检测法通过数据挖掘技术选择数据、特征,再结合机器学习算法训练模型,识别恶意软件的特征和行为模式。
任务四、取证分析实践Windows 2000系统被攻破并加入僵尸网络
(1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
IRC即Internet Relay Chat,互联网中继聊天,是一种使用客户端-服务器架构的多用户聊天系统。客户端用户可以加入特定的频道(channel)与该频道中的所有用户聊天,也可以采用私聊的方式。特点是速度非常之快,聊天时几乎没有延迟的现象,并且只占用很小的带宽资源。通常发送一条消息“JOIN #channelname",表明它要加入某个频道。IRC服务器明文传输通常在6667端口监听,6697端口用于加密传输,以提高通信的安全性。
(2)僵尸网络是什么?僵尸网络通常用于什么?
- 僵尸网络是一种由大量被恶意软件感染的计算机组成的网络。这些计算机通常由一个或多个远程攻击者控制。
僵尸网络的常见用途 - 分布式拒绝服务攻击(DDoS攻击):僵尸网络可以通过大量Bots同时向目标服务器发送请求,导致服务器过载并最终崩溃。这种攻击不仅会导致目标网站无法访问,还可能对企业造成巨大的经济损失。
- 垃圾邮件发送:僵尸网络可以用来发送大量垃圾邮件,这些邮件可能包含广告、诈骗信息或钓鱼链接。由于垃圾邮件的发送源头被分散在不同的受感染计算机上,因此很难追踪和阻止。
- 数据窃取:僵尸网络可以从受感染的计算机上窃取敏感数据,例如登录凭证、银行信息和个人身份信息。这些数据可能被用于非法牟利或进一步的网络攻击。
- 加密货币挖矿:僵尸网络可以利用受感染计算机的计算资源来进行加密货币挖矿。虽然每台计算机贡献的算力有限,但通过成千上万台计算机的累积,这种方式可以产生显著的收益。
(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”,过滤出蜜罐主机尝试连接6667端口的SYN包。
蜜罐主机与5台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端下载tcpflow
获取在209.196.44.172与172.016.134.191之间的所有的IRC数据包
使用如下命令对209.196.044.172.06667-172.016.134.191.01152文件进行筛选
可以看到有3416个主机,访问过目标服务器
(5)哪些IP地址被用于攻击蜜罐主机?
用下列命令将所有连接蜜罐主机的IP地址输出到20222403ip_list.txt
看到有165个ip攻击了蜜罐主机
(6)攻击者尝试攻击了那些安全漏洞?
使用Wireshark打开数据源botnet_pcap_file.dat,选择“统计”→“协议分级”,可以看到TCP数据包占99.7%,UDP包只占0.3%,非常少
筛选TCP的端口
看到TCP的相应端口有:135、139、25、445、4899、80
筛选UDP端口
发现使用了137端口
(7)那些攻击成功了?是如何成功的?
【1】TCP的25号端口
基本都是建立“三次握手”连接和“四次握手”断开连接,没有做实际的攻击行为,可能是扫描端口
【2】TCP的135端口
一次完整TCP“三次握手”和“四次握手”,但没有进行什么攻击
【3】TCP的139端口
除了“三次握手”之外,还有NBSS协议和SMB协议的数据包,仅仅是建立连接,可能也是一种端口扫描
【4】TCP的445端口
在No.33280的报文中发现了“PSEXESVC.EXE”,这个文件主要是一种通过IRC进行通信的Dv1dr蠕虫。这里发生了口令蠕虫攻击。后面的报文中包含主机响应,说明攻击成功。
【5】TCP4899端口
4899端口是一个远程控制软件Radmin服务端监听的端口,经常被用来控制被控机,且这类软件一般不会被杀软查杀,比后门更安全。这里发生了Radmin远程控制,攻击成功。
【6】TCP的80端口
缓存区溢出攻击,通过缓冲区溢出获得命令行
在No.32889的报文中发现了“c:\notworm”,这是一个蠕虫攻击。
【7】UDP137端口
许多的NBNS数据包,但是没有传输具体的数据和内容,并没有实施攻击.
这里的NBNS是NetBIOS name service的缩写,是NetBIOS的命名服务。可知此处是在进行NetBIOS查点。
学习中遇到的问题及解决
问题一:kali中无法运行.exe文件
问题1解决方法:.exe文件是windows中的可执行文件,kali中要使用wine命令。
问题2:在控制台运行crackme2.exe "I know the secret"是,会提示I have an identity problem.
问题2解决方法:复制一个crackme2.exe文件,重命名为crackmeplease.exe ,然后运行crackmeplease.exe "I know the secret",即可得到正确结果。
实践总结
这次实验用到了许多陌生的Windows软件工具和命令,我对这些命令和工具的使用方法完全不了解,需要向同学请教使用技巧,但是还有很多其他需要掌握的与网络攻防相关的命令。通过这次的实验也加深了我对后门、免杀、蠕虫等一系列恶意代码特征的理解,提高了自己的安全防范意识。通过分析自制恶意代码样本和Windows 2000系统被攻破的案例,我了解了网络取证的实际应用,并意识到恶意代码对网络安全构成的巨大威胁,这正是网络空间安全要解决的实际问题。