20222405 2024-2025-1 《网络与系统攻防技术》实验四实验报告
1.实验内容
(1)恶意代码文件类型标识、脱壳与字符串提取
(2)使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
(3)分析一个自制恶意代码样本rada,并撰写报告,回答问题
(4)取证分析实践
2.实验过程
2.1 恶意代码文件类型标识、脱壳与字符串提取
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具
先下载目的文件RaDa.exe,然后对文件进行初步分析。
输入命令file RaDa.exe
如图所示,关于RaDa.exe文件的内容可以分为四个部分。PE32表明这是一个32位的可执行文件格式,意味着它能够在32位操作系统上运行。GUI表示该文件具备图形用户界面,使得用户能够通过图形化方式进行交互。Intel 80386指明该文件设计用于Intel 80386及其兼容处理器,显示了其处理器架构的要求。for MS Windows指的是该程序专为Windows操作系统开发。
再使用PEiD工具打开RaDa.exe,可以看到其基本信息
可以看到加壳类型是upx,还有一些其他的信息
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理
使用命令strings rada.exe
查看RaDa.exe文件中的可打印字符串,但是由于加壳导致结果都是乱码
用超级巡警脱壳机软件对RaDa.exe进行脱壳操作,脱壳后保存文件rada_unpacked.exe到原目录
再重新使用strings rada_unpacked.exe
指令查看脱壳后文件的可打印字符串
虽然前面的一些内容还是乱码,但是后面的乱码部分已经变成可读的内容了
寻找了一下没有找到作者信息,只找到了一些函数名
(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
使用Process Explorer工具打开RaDa_unpacked.exe文件
找到进程RaDa_unpacked.exe
右键选择Properties,进入Strings界面
成功找到作者信息及编写时间
也可使用IDA Pro打开RaDa_unpacked.exe
打开Strings界面
也可以成功找到作者信息
2.2 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息
下载crackme1.exe和crackme2.exe
先用file指令看一下文件信息
file crackme1.exe
console表示该文件是一个控制台应用程序,即运行时在命令行界面中进行输入和输出
使用命令行执行crackme1.exe并对参数个数进行猜测,观察程序输出
可以看出程序应该需要1个参数
使用IDA Pro打开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界面的view中找到graphs并打开Function Call查看函数调用图
找到输出函数所在位置
找到sub_401280的函数流程图
分析一下图中流程图可以知道sub_401280先判断参数个数,若不是参数个数不正确则输出"I think you are missing something.",若参数个数正确且参数不为"I know the secret"则输出"Pardon?What did you say?",若参数个数正确且参数为"I know the secret"则输出"You know how to speak to programs,Mr.Reverse—Engineer",所以我们的猜测正确
接下来分析crackme2.exe
先用IDA Pro打开crackme2.exe
查看Strings界面
猜测口令和输出就在这些字符串里
打开Function Call进行分析
这里也调用了printf函数
打开流程图进行分析
可以看到crackme2.exe和crackme1.exe总体上差不多,只是在crackme1.exe的基础上增加了对于程序名的判断,只有当程序名为crackmeplease.exe的时候才能被执行,否则就会提示“I have an identity problem.”。最后的输出变为"We have a little secret:Chocolate"
先输入命令copy crackme2.exe crackplease.exe
复制一份名为crackplease.exe的文件
再输入命令crackplease.exe “I know the secret”
即可得到正确输出
2.3 分析一个自制恶意代码样本rada
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息
输入命令md5sum rada.exe
得到rada文件的摘要值
再输入命令file rada.exe查看文件信息
以上可以作为识别同一样本的信息
(2)找出并解释这个二进制文件的目的
打开Process Explorer并运行RaDa_unpacked.exe
在strings页面查看文件中的字符串
图中可以看出这个文件使用http连接到10.10.10.10并进行数据传输;在C盘创建文件夹C:/RaDa/tmp;将文件rada.exe复制到C:\RaDa\bin;对主机的注册表进行了读写和删除操作;还有截屏、休眠等操作
(3)识别并说明这个二进制文件所具有的不同特性
这个文件通过修改注册表使程序开机自启动,该程序启动之后将自己复制到c盘中,并且与10.10.10.10连接,将传输的文件保存到c盘中
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
UPX加壳
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
后门程序,它可以获得控制权限并开机自启动,并通过加壳进行伪装
(6)给出过去已有的具有相似功能的其他工具
实验二中msfvenom生成的后门程序
(7)可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
IDA Pro打开RaDa_unpacked.exe
查看Strings页面
右键打开setup并只勾选Unicode
找到--author
双击进行分析
打开对应流程图
可以看出由sub_40AAA0判断输出Unknown argument还是Authors:Raul Siles & David Perze, 2004
查看sub_40AAA0
看到select语句判断程序是否在Vmware运行,若是则输出Unknown argument: --authors,否则输出Authors:Raul Siles & David Perze, 2004
可以调查作者,在非VMware的虚拟机输入--authors参数可以查看作者,或者通过IDA Pro或者Process Explorer查看strings也可以
(8)给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法
- 基于特征码的检测方法
通过识别已知恶意程序的特征码来检测后门。特征码是对恶意代码或可疑代码段的唯一标识,大多数防病毒软件使用这种方法来扫描系统中可能的恶意文件。
具体过程:
收集已知恶意代码的特征码,这些特征码可能是文件的哈希值、特定字节序列或字符串。
将这些特征码与系统中文件的哈希值或字节序列进行比对。
如果文件中包含已知特征码,则将其标记为可能的后门程序。
优点:快速且准确,适合检测已知后门。
缺点:无法检测未知后门或稍作修改的变种。
- 行为分析检测方法
通过监控程序在系统中的行为来判断是否存在后门程序。通常,后门程序会执行特定的恶意操作,如建立远程连接、读取敏感信息等。
具体过程:
设置行为监控系统,监视程序的进程创建、网络连接、文件读取、写入等行为。
预设一些异常行为的判定标准,如网络通信的频率、访问的IP地址范围等。
识别出符合后门特征的异常行为,进一步分析其合法性。
优点:能有效检测未知的后门程序。
缺点:可能出现误报,并需要高性能监控系统支持。
- 基于沙盒环境的检测方法
沙盒检测方法是将程序在隔离的环境中运行,观察其行为以判断是否具有后门特性。该方法适合检测未知或变种后门。
具体过程:
创建一个虚拟的隔离环境(沙盒),可以是虚拟机或虚拟容器。
在沙盒中运行目标程序,监视其行为,包括系统调用、网络访问等。
分析运行结果,判断程序是否试图与外部主机通信、获取敏感信息等行为,若有则可能是后门程序。
优点:对未知的后门程序有较高的检测成功率。
缺点:沙盒检测时间较长,且某些后门具备反沙盒特性,难以在沙盒中检测到。
- 基于流量分析的检测方法
后门程序通常会与攻击者的服务器通信,流量分析方法通过检测网络流量中的异常行为,识别潜在的后门程序。
具体过程:
设置流量监控系统,监视系统或网络的进出数据包。
分析数据包的流量特征,包括访问的目的IP地址、端口、数据包大小、传输协议等。
根据设定的规则,如不常见的协议使用、非正常工作时间的流量等,识别异常连接。
将异常连接的主机进一步分析,确认是否有后门。
优点:能够检测出在系统中隐藏的、未被防病毒软件检测到的后门程序。
缺点:对网络资源消耗大,且需要大量数据分析以识别正常和异常流量。
- 基于哈希比对的检测方法
哈希比对方法主要用于检测文件的完整性,判断是否被篡改而植入后门程序。
具体过程:
计算系统文件或程序的哈希值,生成当前文件的指纹。
将这些哈希值与已知良性文件的哈希值库进行比对。
如果文件的哈希值与已知良性文件不一致,则说明文件被篡改,有可能被植入后门。
优点:快速有效,能够检测已知程序是否被篡改。
缺点:仅适用于已知文件的检测,对未知文件或新文件无法检测。
2.4 取证分析实践
数据源是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。回答下列问题:
(1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
IRC是一种实时通讯协议,广泛用于聊天、讨论和信息共享。它支持通过网络在不同的计算机之间传输消息,通常用于创建聊天室或私聊。IRC协议由客户端与服务器进行通信,客户端通过连接到IRC服务器加入一个或多个聊天室并进行交流。
当IRC客户端申请加入一个IRC网络时,通常会发送一条NICK消息来指定客户端的昵称,接着发送USER消息来提供关于该用户的信息。例如:
NICK:用于设置客户端的昵称(例如:NICK chuzhehao)。
USER:提供客户端的用户名、主机名、服务器名和真实姓名(例如:USER chuzhehao 0 * :Chuzhehao)。
之后,客户端可能会向IRC服务器发送JOIN消息来加入一个指定的频道(例如:JOIN #chuzhehao_channel)。
IRC协议一般使用以下TCP端口:
一般端口号为6667,也会使用6660-6669,6697是IRC使用SSL/TLS加密的端口。
(2)僵尸网络是什么?僵尸网络通常用于什么?
僵尸网络(Botnet)是由大量被恶意软件感染并被远程控制的计算机或设备组成的网络。这些计算机通常被攻击者控制后,成为“僵尸”,在用户不知情的情况下执行攻击者的命令。僵尸网络通过控制成千上万的受感染设备,能够进行大规模的恶意活动。
僵尸网络通常用于:
分布式拒绝服务攻击(DDoS)、发送垃圾邮件、数据盗窃、传播其他恶意软件等
(3)蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
使用wireshark打开数据包
输入ip.src == 172.16.134.191 && tcp.dstport == 6667 || tcp.dstport == 6697
进行过滤
查看所有地址
除蜜罐主机(IP地址:172.16.134.191)外,还有66.33.65.58、63.241.174.144、217.199.175.10、209.196.44.172和209.126.161.29这五个地址
所以与蜜罐主机通信的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
得到一个txt文件
可以看到共有165个IP
(6)攻击者尝试攻击了那些安全漏洞?
输入命令snort -r botnet_pcap_file.dat
查看信息
发现绝大部分是TCP包,很小一部分是UDP包
输入命令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、139、25、445、4899、80
UDP响应端口为137
使用wireshark打开botnet_pcap_file.dat
筛选条件设置为(tcp.dstport == 135 || tcp.dstport == 25)&& ip.dst == 172.16.134.191
可以看到25端口和135端口仅仅进行了TCP三次握手,并没有数据交换
接下来把筛选条件设置为tcp.dstport==139 && ip.dst == 172.16.134.191
发现也只是进行连接,没有数据交换
把筛选条件设置为tcp.dstport==445 && ip.dst == 172.16.134.191
发现了PSEXESVC.EXE
过滤条件设置为ip.dst==61.111.101.78查看从蜜罐发往攻击主机的数据包,看到了Acceptance,且数据包中找到了\PIPE\lsass,攻击者可以进行远程调用访问和管理权限
回看对蜜罐接收到的报文,发现了大量与 SVCCTL 相关的通信。通过查询得知,Windows 系统中的 SVCCTL 接口用于与服务控制管理器(SCM)交互。该接口存在的漏洞允许匿名用户连接到 SCM,并查看系统中所有安装和运行的服务。
把筛选条件设置为tcp.dstport==4899 && ip.dst == 172.16.134.191
也只是连接但没有数据交换
把筛选条件设置为tcp.dstport==80 && ip.dst == 172.16.134.191
可以看到向蜜罐发送了CCCCCCCCCCCCCCCCCCCCCCCCCCC,是缓冲区溢出攻击
还用脚本进行攻击
发现蠕虫c:\notworm
看下蜜罐的回复
说明80端口的攻击都失败了
把筛选条件设置为udp.port==137 && ip.src == 172.16.134.191
用于"NetBIOS Name Service"(NetBIOS名称服务),没有数据交换
(7)那些攻击成功了?是如何成功的?
来自61.111.101.78的攻击利用了Dv1dr32蠕虫,通过向目标主机的445端口发送包含PSEXESVC.EXE的数据包并将其写入系统目录来实施攻击。蠕虫利用SVCCTL接口的漏洞,连接服务控制管理器(SCM),获取目标主机的服务信息,实现对系统的控制。
3.问题及解决方案
问题1:出现下图中的报错,关闭窗口后在Process Explorer中提示Path:拒绝访问
问题1解决方案:不要关闭图中的报错窗口,直接打开Process Explorer就可以查看信息
问题2:系统提示找不到tcpflow命令
问题2解决方案:输入命令sudo apt install tcpflow
和sudo apt install tcpflow-nox
安装tcpflow即可
4.学习感悟、思考等
在本次恶意代码检测与分析实践中,我加深了对后门程序、木马、僵尸网络的理解,并通过工具如PEID、IDA进行脱壳操作,掌握了分析恶意代码的基本方法。尽管实验内容复杂,需要对汇编语言和各种工具的熟练掌握,但我通过实践解决了不少困难,特别是在数据分析和工具使用上。通过Wireshark数据包分析,我提升了对潜在攻击意图的识别能力。