一、实验内容
1.恶意代码文件类型标识、脱壳与字符串提取
2.使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
3.分析一个自制恶意代码样本rada,并撰写报告,回答问题
4.取证分析实践
二、实验过程
1.对恶意代码样本,进行文件类型识别,脱壳与字符串提取
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
首先对恶意代码进行初步分析,将文件下载后传入虚拟机中,执行file RaDa.exe
命令
PE32 executable
:这是一个PE(Portable Executable)格式的可执行文件,用于32位系统。PE格式是Windows操作系统上可执行文件的标准格式。
(GUI)
:这表明该文件是一个图形用户界面(GUI)应用程序,而不是一个控制台(命令行)应用程序。
Intel 80386
:这表示该文件是为Intel 80386或更高版本的处理器编译的。80386是Intel的一款32位处理器,因此这个文件是为32位或更高版本的Windows系统设计的。
for MS Windows
:这表示该文件是为Microsoft Windows操作系统设计的。
3 sections
:这表示该文件在结构上被分为三个部分(节)。在PE文件中,节是文件的逻辑划分,通常包含代码、数据或资源等。
用PEiD进一步查看文件加壳类型
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
恶意代码脱壳前
使用超级巡警脱壳机脱壳后
从这里看和脱壳前相差不多我们继续往后看
从这里看已经能看到后面部分的乱码已经可读,但是没有看到作者是谁,脱壳好像成功了(应该)
但是事情出现了一些转机
这应该是作者的信息(maybe)
(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
使用Process Explorer工具对RaDa_unpacked.exe进行分析
一眼盯真!!!!!
说明在(2)中找到的信息是正确的
2.使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
首先将crackme1.exe、crakeme2.exe文件上传到虚拟机上,用file命令查看一下文件信息
由于两文件的基本信息相同,我们只进行一次分析
文件类型:PE32 executable (console) for MS Windows
目标平台:Intel 80386
文件结构:包含7个区段(sections)
使用命令行的方式试探出crackme1.exe的输入格式
可知该程序只需要一个输入参数,但是我们还是不知道需要输入什么参数才能让程序按照设定运行起来
现在利用IDA打开crackme1.exe,利用strings查看字符串
出现了两个特殊的字符串
“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”
接下来在IDA中查看该程序的函数调用图进行验证
由图可知,问题的关键在于找到sub_1280并查看其逻辑图
由逻辑图可知函数逻辑如下图所示
接下来分析crakeme2.exe
首先还是用IDA pro打开该可执行文件
口令应该就在这些字符串当中,接下来用Function Call进行分析
由图可知,问题的关键还是在sub_401280中
打开sub_401280的流程图进行分析
由流程图可知程序逻辑如下图
接下来进行验证
由上图可知结果正确
3.分析一个自制恶意代码样本rada
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
首先提取RaDa.exe摘要的提取md5sum rada.exe
同时结合文件信息作为当前文件的识别信息
(2)找出并解释这个二进制文件的目的;
运行RaDa_unpacked.exe并在Process Explorer中查看strings
可以看出,在运行该文件时
会向http://10.10.10.10/RaDa发送请求,连接RaDa_commands.html进行上传或下载,放入文件C:\RaDa\tmp
在C盘创建文件夹C:/RaDa/tmp;
将文件rada.exe复制到C:\RaDa\bin;
对主机的注册表进行了读写和删除操作;
进行截屏、休眠等操作
(3)识别并说明这个二进制文件所具有的不同特性;
运行会对注册表进行读写和删除操作
能控制主机进行get、put、screenshot、sleep命令
运行时会进行复制
可以通过修改注册表使程序开机自启动
程序启动之后将自己复制到c盘中,并且与10.10.10.10连接,将传输的文件保存到c盘中
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
该文件通过UPX加壳,导致在去壳之前使用strings查看时只能看到乱码,但是去壳之后可以看见一些有效的信息
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
应该是一种后门程序,原因如下:
它不会自主传播、复制
它没有进行伪装来获取权限
它可以获得控制权限并开机自启动,并通过加壳进行伪装
(6)给出过去已有的具有相似功能的其他工具;
与在实验二中通过msfvenom生成的后门程序具有性质类似的功能
(7)可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
可以通过(2)中的步骤查看(即运行RaDa_unpacked.exe后打开ProcessExplorer)
(8)给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。
检测恶意软件是网络安全领域的重要任务,以下是五种常见的恶意软件检测方法,每种方法都进行了详细介绍:
基于特征码的方法
基于特征码的检测技术,是通过对恶意代码的文本内容进行分析,提取二进制、字符串、字节序列、文件名等特征,将这些特征码存入特征库。当检测样本时,通过扫描样本的相关特征和特征库进行匹配,若有匹配的特征则判定该样本与匹配的为同一类型的恶意样本。
优点:这种方法比较简单并且检测速度较快。
缺点:特征提取很难自动完成,需要该领域专家人工判断;只能检测已有恶意代码,难以应对未知威胁;特征库往往泛化能力不足,容易受到利用混淆技术产生的多态恶意程序和变形恶意程序干扰。
静态分析法
静态分析不需要执行代码,一般利用被分析文件的字节特征对代码进行评判,具体特征包括文件结构信息、程序字符串常量、调用函数等,更深层次的会反汇编二进制文件以得到文件指令等信息。
实现方式:
特征检测法:基于特征码的检测技术是静态分析检测技术的一种。
完整性校验:通过对程序文件的完整性进行校验来检测是否被篡改或植入恶意代码。
反编译分析:对二进制文件进行反编译,分析指令和代码结构来识别恶意行为。
优点:静态分析可以准确地捕捉到恶意软件的静态特征,且不需要运行恶意软件,因此相对安全。
缺点:由于特征类型单一,混淆或加壳等技术可以让恶意软件逃过检测,使得检测效果下降。
动态分析法
动态分析是在被分析程序运行的情况下,通过监控记录运行状态和行为,从中抽取动态特征进行检测和分类的方法。
实现方式:
沙箱检测法:在仿真的系统环境下运行恶意软件,监控其行为,如文件操作、网络活动、系统调用等。
行为日志分析:记录恶意软件运行时的行为日志,并进行分析。
优点:动态分析具有更好的有效性和准确率,能够检测到恶意软件在运行时的行为。
缺点:需要恶意软件完整运行,再进行判断,所以恶意软件的检测时效性较差;且对待分析程序缺乏全局认识,通常仅关注程序运行时的小部分行为。此外,攻击者可能让恶意软件避开检测。
启发式检测方法
启发式检测方法是一种发现分析、学习和解决问题的方法,是基于规则估计或有根据的猜测来找到特定问题的解决方案。启发式检测技术一般特指静态启发式检测技术,通过对文件的API调用、操作码(Opcode)、控制流图、动态链接库等特征进行分析,在此基础上反汇编病毒程序和可疑程序,进行基于程序的指令级代码分析,模拟跟踪代码执行的流程,与已知恶意软件活动的代码进行比较进行判别。
优点:能够发现一些基于特征码和静态分析难以检测的恶意软件。
缺点:可能受到恶意软件混淆技术的影响,且启发式规则的制定需要较高的专业知识和经验。
基于机器学习的方法
随着恶意软件的数量剧增,类型也逐渐变得多样和复杂,传统的技术显得效率不足。因此研究者逐渐趋向于使用机器学习技术,来应对恶意软件难以预测的变种和日益庞大的数量。
实现方式:
特征提取:从恶意软件中提取静态特征(如PE头特征、二进制内容特征等)和动态特征(如API调用特征、系统修改特征和网络行为特征等)。
模型训练:使用提取的特征集合训练机器学习模型,如支持向量机、随机森林、神经网络等。
检测与判定:将待检测的恶意样本进行特征提取,并送入已经训练完成的模型中,模型会自动判定测试样本的分类,是否属于恶意样本。
优点:能够自动适应恶意软件的变种和新型攻击方式,具有较高的准确性和灵活性。
缺点:需要大量的恶意软件样本和计算资源来进行模型训练和更新;且无关特征和噪声特征会影响模型的准确性。
四、取证分析实践
Windows 2000系统被攻破并加入僵尸网络
问题: 数据源是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。回答下列问题:
(1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
IRC是Internet Relay Chat的英文缩写,即互联网中继聊天。IRC允许任意的因特网用户之间做即时的交谈,是一种基于客户端-服务器模型的即时通讯协议。
当IRC客户端申请加入一个IRC网络时,它将发送一个特定的消息或命令给IRC服务器以请求加入某个频道或服务器。这个消息通常是一个JOIN命令,后面跟着想要加入的频道名称。例如,如果客户端想要加入名为“example”的频道,它可能会发送类似“JOIN #example”的命令给服务器。
IRC通常使用6667端口进行通信。但是并不是固定的,因为IRC服务器管理员可以根据需要更改服务器使用的端口号。因此,在连接到IRC服务器时,客户端需要知道服务器正在监听的正确端口号。
(2)僵尸网络是什么?僵尸网络通常用于什么?
:僵尸网络是由攻击者或网络犯罪分子通过恶意软件感染数千乃至数百万台计算机和接入互联网的设备而构成的网络,这些被感染的计算机被称为“僵尸计算机”,它们受控于一个或多个控制中心。
僵尸网络被网络犯罪分子广泛用于各种恶意活动,包括:分布式拒绝服务(DDoS)攻击,发送垃圾邮件,网络钓鱼攻击,窃取敏感信息,广告点击欺诈等
(3)蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
将botnet_pcap_file.dat文件拖入wireshark:
输入ip.src == 172.16.134.191 && tcp.dstport == 6667 || tcp.dstport == 6697
进行过滤
查看Destination一列,发现一共出现过5台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为服务器的僵尸网络?
首先使用命令sudo apt install tcpflow
和sudo apt install tcpflow-nox
安装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三个文件
先执行export LC_COLLATE='C'
和export LC_CTYPE='C'
避免字符编码导致计数不准确的问题
通过命令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
查看多少个主机访问了僵尸网络
所以有3457个主机访问了僵尸网络
(5)哪些IP地址被用于攻击蜜罐主机?
输入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 > 2.txt;wc -l 2.txt
将所有的IP获取到一个.txt文件中
以上就是所有用于攻击的IP
共有165个IP
(6)攻击者尝试攻击了那些安全漏洞?
先查看一下botnet_pcap_file.dat文件snort -r botnet_pcap_file.dat
由于大部分是tcp包,所以先筛选一下TCP包
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响应端口为135、139、25、445、4899、80
再筛选一下UDP包
UDP响应端口为137
在wireshark打开botnet_pcap_file.dat,查看135、25端口(tcp.dstport == 135 || tcp.dstport == 25)&& ip.dst == 172.16.134.191
可见端口25和135仅仅进行了TCP三次握手,并没有数据交换
接下来查看139端口tcp.dstport==139 && ip.dst == 172.16.134.191
139端口也没有进行数据交换
接下来查看445端口tcp.dstport==445 && ip.dst == 172.16.134.191
可以发现PSEXESVC.EXE
现在我们查看从蜜罐发往攻击主机的数据包,现在我们把过滤设置为ip.dst==61.111.101.78
找到了Acceptance,且数据包中找到了\PIPE\lsass,攻击者可以进行远程调用访问和管理权限
接下来查看4899端口tcp.dstport==4899 && ip.dst == 172.16.134.191
也只是连接但没有数据交换
现在查看80端口tcp.dstport==80 && ip.dst == 172.16.134.191
可以看到向蜜罐发送了CCCCCCCCCCCCCCCCCCCCCCCCCCC,是缓冲区溢出攻击
还用脚本进行攻击
发现蠕虫c:\notworm
现在查看UDP的137端口udp.port==137 && ip.src == 172.16.134.191
(7)那些攻击成功了?是如何成功的?
根据(6)中的截图和分析得出
攻击成功的端口为:80和4489
没有攻击行为的端口为:135,137,25,445和139
三、问题及解决方案
- 问题1:在Windows的powershell中输入file命令提示
'file' 不是内部或外部命令,也不是可运行的程序或批处理文件。
- 问题1解决方案:经过查找资料发现在Windows环境下运行还要进行安装,所以我将相关文件传到虚拟机上,用linux系统上原汁原味的file命令进行操作
四、学习感悟、思考等
在这次的实验中我又用到了很多很新鲜的工具,IDA Pro不仅可以将程序进行反汇编,同时也是一个功能强大的静态分析工具,可以清楚的了解一个未知程序的运行逻辑,也能清楚的弄明白当前的未知程序作者是怎么设置的输入和输出还有其他在实验中用到的脱壳工具等,让我明白了一个高效的、强大的工具在实际的生活学习中有多么的重要;同时也让我深刻的了解了恶意代码进行恶意行为的逻辑以及我们应该从什么角度来卸下这些恶意代码的伪装,识别他们真正的面目。