20222416 2024-2025-1 《网络与系统攻防技术》实验四实验报告
1.实验内容
1.1 本周学习内容
恶意代码是使计算机按照攻击者的意图运行以达到恶意目的的指令集合。类型有计算机病毒, 蠕虫, 恶意移动代码, 后门, 特洛伊木马, 僵尸程序, Rootkit(内核套件),融合型恶意代码等。分析恶意代码的方式通常有系统监控、静态分析和动态分析等方法。这里展示静态分析目的、使用工具和难度如下:
分析方法 | 目的 | 使用工具 | 难度 |
---|---|---|---|
恶意代码扫描 | 标识已知恶意代码 | 反病毒引擎,VirusTotal | 低 |
文件格式识别 | 确定攻击平台和类型 | file,peid,FileAnalyzer | 低 |
字符串提取 | 寻找恶意代码分析线索 | Strings | 低 |
二进制结构分析 | 初步了解二进制文件结构 | binutils(nm,objdump) | 中 |
反汇编 | 二进制代码->汇编代码 | IDAPro,GDB,VC,… | 中高 |
反编译 | 汇编代码->高级语言 | REC,DCC,JAD,… | 中高 |
代码结构与逻辑分析 | 分析二进制代码组,理解二进制代码逻辑成结构 | IDAPro,Ollydbg,… | 高 |
加壳识别和代码脱壳 | 识别是否加壳及类型;对抗代码混淆恢复原始代码 | UPX,VMUnpacker,手工 | 高 |
本次实验就要使用各类工具来分析恶意代码。
1.2 实践内容
1.2.1 恶意代码文件类型标识、脱壳与字符串提取
对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
1.2.2 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
1.2.3 分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
(2)找出并解释这个二进制文件的目的;
(3)识别并说明这个二进制文件所具有的不同特性;
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
(6)给出过去已有的具有相似功能的其他工具;
(7)可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
1.2.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)那些攻击成功了?是如何成功的?
2.实验过程
2.1 恶意代码文件类型标识、脱壳与字符串提取
下载学习通上的rada.rar文件,使用DIE(Detect It Easy v3.09)查看文件信息
可以看到rada.exe的文件格式是PE32,运行平台是windows95(I386,32位,GUI),加壳工具是UPX
在kali中用strings
查看文件,确实全是乱码
那就使用超级巡警脱壳机脱壳吧
OK脱壳成功!生成了RaDa_unpacked.exe文件。
使用DIE可以看到没有UPX壳了,文件大小变大了
在kali上使用strings命令,可以看到恶意代码的编写作者是Raul Siles && David Perez。
2.2 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
输几个参数测试
猜不出来了
打开IDA Pro分析crackme1.exe
分析函数调用关系
按下“F5”得到main函数的伪代码
分析以上截图可以得出结论:
如果参数是“I know the secret”,则输出“You know how to speak to programs,Mr.Reverse-Engineer”,这就是我们想要的特定信息。
如果参数不是“I know the secret”,输出“Pardon? What did you say?”。
如果参数个数不正确,输出“I think you are missing something.”
输入"I know the secret",果然成功了
接下来是crackme2,还是输几个参数进行测试
猜不出来,这次直接让ida pro生成伪代码看看
经过分析可以得出结论:
如果第一个参数是“crackmeplease.exe”(程序名),第二个参数是“I know the secret”,则输出成功信息,否则输出“Pardon? What did you say?”。
如果第一个参数不是“crackmeplease.exe”,输出“I have an identity problem.”。
如果参数个数不正确,输出“I think you are missing something.”
测试修改文件名为"crackplease.exe",输入参数"I know the secret"
测试成功了!
2.3 分析一个自制恶意代码样本rada
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
使用kali的几个摘要功能,得出的摘要值可以帮助识别同一样本
md5sum RaDa.exe
sha1sum RaDa.exe
sha512sum RaDa.exe
(2)找出并解释这个二进制文件的目的;
使用process explorer分析脱壳后的RaDa(即RaDa_unpacked.exe)。运行Rada_unpacked.exe,这时可能会弹窗出现错误,不要关闭或点击确定,在explorer中找到进程并点开它
观察strings
分析其中的内容,可得到以下信息:
1.HTTP协议连接10.10.10.10\RaDa\RaDa_commands.html。
2.对cgi-bin中(可能是文件夹?)的download.cgi和upload.cgi进行操作
3.在C盘下创建\RaDa\tmp文件夹\RaDa\bin
4.添加了一个注册表项:HKLM\Software\Microsoft\Windows\CurrentVersion\Run\,这个注册表项是控制计算机启动的信息,这样实现了开机自启动rada。HKLM\Software\Microsoft\Windows\CurrentVersion\Run\
是 Windows 操作系统注册表中的一个路径。这里的 HKLM
代表“HKEY_LOCAL_MACHINE”,是注册表中的一个根键,用于存储计算机级别的配置信息。Run
是 CurrentVersion
子键下的一个键,用于存储在 Windows 启动时自动运行的程序列表。在 Run
键下,每个子键的名称对应一个程序或脚本的名称,其默认值(通常是字符串值)包含了启动时执行的程序的路径。
5.添加了一个注册表项:HKLM\Software\VMware, Inc.\VMware Tools\InstallPath。猜想这个操作是为了修改VMtools的安装路径。
6.可以进行DDOS Smurf远程攻击。
7.进行读、写、睡眠等操作。
(3)识别并说明这个二进制文件所具有的不同特性;
可以修改注册表进行自启动等操作;可以连接网络传输文件;可以执行一些类似于读写、休眠、截屏的操作;可以进行DDOS Smurf攻击。
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
UPX加壳技术,可能是非标准的UPX加壳,修改了区段名。我使用upx直接加壳工具无法直接脱壳。如下图所示
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
这个恶意代码是后门程序。它不能传播,所以不是蠕虫;也没有伪装自己,不是木马。而它可以执行一些指令,在一定程度上可以控制主机,更像是后门。
(6)给出过去已有的具有相似功能的其他工具;
实验2的msf和实验3的veil,其它的例如BetterBackdoor之类
(7)可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
可以查出来。用kali中的strings命令查看RaDa.exe可以看到开发者。也可以我们在cmd里输入--help
可以看到一些相关的信息。会弹出一个html,里面有相应的信息
(8)给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法
- 基于特征码的方法: 这种方法主要基于模式匹配的思想,为每种已知恶意代码产生一个唯一的签名特征标记来创建恶意代码库。这些签名包括文件名、内容字符串或字节等不同的属性。检测时,将未知代码的签名特征与恶意代码库进行对比,搜索是否存在相匹配的恶意代码签名。若有吻合,则判定为恶意代码;反之则判断为正常代码。这种方法的优点是检测速度快,对于病毒库中已有的恶意代码,全都能够准确检测出来,误报率较低。缺点是对于未出现过的病毒无能为力,必须不断更新版本。
- 基于启发式分析的方法: 启发式分析方法不依赖于已知恶意软件的数据库,而是通过分析程序的行为和指令模式来识别恶意软件。这种方法可以检测未知的恶意软件,因为它寻找的是恶意软件的典型行为,如非常规读写文件、复制自身到系统目录、修改注册表等。启发式分析的优点是可以检测新出现的恶意软件,但缺点是可能会产生较高的误报率。
- 基于行为分析的方法: 行为分析检测方法通过监控程序的实际运行行为来识别恶意软件。这种方法可以检测到恶意软件的动态行为,如API调用序列、系统资源访问模式等。例如,可以通过堆叠式自动编码器(SAE)深度学习架构模型来分析可执行文件中的API调用序列,或者使用N-Gram方法提取恶意代码的字节序列特征进行静态分析。这种方法的优点是能够检测未知恶意软件,但需要复杂的分析和较高的计算资源。
- 基于签名的检测技术: 这种方法并没有对文件进行深入分析,只是对文件进行了签名计算。它依赖于对文件的特定属性(如哈希值)进行匹配,以确定文件是否为已知的恶意软件。这种方法的优点是检测速度快,但缺点是只能检测到已知的恶意软件,对于新出现的或变种的恶意软件无能为力。
- 沙盒模拟技术: 沙盒技术通过在隔离的环境中运行可疑程序来检测恶意软件。这种方法可以观察程序的运行行为,如文件创建、网络连接、系统调用等,从而判断程序是否具有恶意行为。沙盒技术的优点是可以动态分析恶意软件的行为,但缺点是可能会被恶意软件检测到并采取措施规避检测。
2.4 取证分析实践
Windows 2000系统被攻破并加入僵尸网络
问题: 数据源是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。回答下列问题:
(1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
IRC是一个基于互联网连接和 IRC 客户端的全球聊天系统,它通过 IRC 服务器收发消息。当IRC客户端申请加入一个IRC网络时,会发送一个SERVER
命令或者CONNECT
命令,这些命令用于指定客户端想要连接的服务器。IRC一般使用的TCP端口有:6667:这是IRC最常用的端口,用于明文传输;6697:这个端口用于SSL加密传输。
这些端口允许IRC客户端与服务器之间建立连接,进行数据的加密或非加密传输。
(2)僵尸网络是什么?僵尸网络通常用于什么?
僵尸网络是指黑客采用一种或多种传播手段,将大量主机感染僵尸程序病毒,被感染的主机通过控制协议接收黑客的指令,从而在黑客和被感染主机之间所形成的可一对多控制的网络。僵尸网络的组成一般包括黑客、控制协议、跳板主机、僵尸主机。僵尸网络的控制者通过特定的控制协议与僵尸主机上的客户端通信,从而远程控制僵尸网络上的僵尸主机。
僵尸网络通常用于以下几种活动:
-
DDoS攻击:僵尸网络可用于发起大规模DDoS攻击,通过大量Bots同时向目标服务器发送请求,导致服务器崩溃或不可用。
-
数据窃取与间谍活动:僵尸网络可以用于大规模的数据窃取,包括个人身份信息、企业机密、金融数据等。此外,僵尸网络还可用于长期的间谍活动,持续监控受害者的计算机并窃取敏感信息。
-
分发其他恶意软件:僵尸网络可以作为恶意软件的分发平台,通过感染新的计算机或扩展到其他网络,进一步扩大其控制范围。
-
挖矿:僵尸网络可用于在设备所有者同意或不知情的情况下挖掘加密货币,利用多个受感染设备的计算能力来执行资源密集型的加密货币挖掘操作。
(3)蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
用wireshark打开botnet_pcap_file.dat文件,设置对应的筛选条件(蜜罐主机的IP和IRC的常用端口)
ip.src == 172.16.134.191 && tcp.dstport == 6667
观察各个数据包,可以看到有
209.126.161.29;66.33.65.58;63.241.174.144;217.199.175.10;209.196.44.172 五个IRC服务器。
(4)在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
因为涉及到的主机数量比较多,所以完成这一任务需要在kali上安装tcpflow
安装完成之后使用tcpflow获取该服务器的IRC数据包
tcpflow -r botnet_pcap_file.dat 'host 209.196.44.172 and port 6667'
可以看到生成了三个文件
对文件进行筛选,查看访问过的主机数量
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 "\r" | grep -v "^$" | sort -u | wc -l
1.cat 209.196.044.172.06667-172.016.134.191.01152
: 使用cat命令打开名为209.196.044.172.06667-172.016.134.191.01152的文件,这是刚刚生成的三个文件之一。
2.grep -a “^:irc5.aol.com 353”
: 使用grep工具,带有-a选项,以文本模式搜索匹配指定模式的行。
3.sed "s/^:irc5.aol.com 353 rgdiuggac @ #x[^x]*x ://g"
: 使用sed工具进行替换操作。这将行开头的部分替换为空字符串,清理了行中的特定格式或标识符。
4.tr ’ ’ ‘\n’
: 使用tr工具将空格字符替换为换行符。这样做是为了将原始数据按照空格分隔的单词分割成单独的行。
5.tr -d “\r”
: 使用tr工具删除回车符。
6.grep -v "^KaTeX parse error: Expected group after '^' at position 33
: 用于过滤掉空行。
7.sort -u
: 使用sort工具对行进行排序,并通过-u选项去除重复行,得到唯一的单词列表。
8.wc -l
: 使用wc工具统计行数(单词的数量),输出结果表示单词的总数。
可以看到总共有3461台主机。
(5)哪些IP地址被用于攻击蜜罐主机?
从20222416botnet_pcap_file.dat文件中提取出目标主机地址为172.16.134.191的数据包的源主机地址,并统计不同源主机的数量,并将结果保存到名为20222416.txt的文件中。
tcpdump -n -nn -r 20222416botnet_pcap_file.dat 'dst host 172.16.134.191' | awk -F " " '{print $3}' | cut -d '.' -f 1-4 | sort | uniq | more > 20222416.txt;wc -l 20222416.txt
可以看到一共有165个IP地址被统计到文件中。
(6)攻击者尝试攻击了那些安全漏洞?
筛选TCP和UDP响应端口,读取dat文件,查看哪些端口是开放的
tcpdump -r 20222416botnet_pcap_file.dat -nn 'src host 172.16.134.191' and tcp[tcpflags]== 0x12 | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq
tcpdump -r 20222416botnet_pcap_file.dat -nn 'src host 172.16.134.191' and udp | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq
针对这些端口的包进行分析
TCP 135
正常的连接。
TCP 139
也没看到什么攻击。
TCP 25
正常的连接。
TCP 445
NT Create AndX request
这个包有向主机发送了PSEXESVC.EXE的操作,这个程序通常会被攻击者用作远程主机执行命令。这是攻击的一个安全漏洞。
TCP 4899
4899端口是一个远程控制软件服务端监听的端口,具有远程控制功能。这里主机可能被远程控制了。这也是一个安全漏洞。
TCP 80
这个包内容有关boot.ini,下面也有关于config.sys的包,可能是想修改系统文件。这可能有关缓冲区的漏洞。
UDP 137
全是NBNS包,是正常连接。
(7)那些攻击成功了?是如何成功的?
经过上面的分析,针对端口TCP445,TCP4899,TCP80的攻击可能成功,分别是发送PSEXESVC.EXE文件、远程控制攻击、缓冲区攻击。
3.问题及解决方案
- 问题1:没有tcpflow
- 问题1解决方案:在kali中输入
apt-get install tcpflow
安装 - 问题2:IDA PRO功能不全,缺少生成伪代码的功能
- 问题2解决方案:从网上搜索下载了IDA PRO 9的学习版,功能齐全
4.学习感悟、思考等
本次实验跟随往届的实验过程来做,相对简单顺利。之前几次实验遇到的软件安装问题这次没有遇见,而且在windows主机下能做完大部分的实验内容。一直以来,恶意代码如病毒、蠕虫和僵尸网络等对网络安全构成了巨大威胁。掌握如何识别、脱壳、提取字符串以及分析恶意代码,对于防御和应对这些威胁至关重要。我学习了如何使用工具识别文件格式和类型,这对于理解恶意代码的运行平台和加壳工具至关重要。脱壳技术让我能够看到恶意代码的真实面目,这对于后续的分析和防御策略制定非常关键。
通过字符串提取,我能够发现恶意代码的编写作者,这对于追踪和预防未来的攻击行为具有重要意义。在分析crackme1.exe
与crackme2.exe
的过程中,当看到复杂的函数调用关系时,我觉得逆向工程相当复杂。还好IDA Pro作为一个强大的逆向工程工具,提供了相当强大的功能,特别是伪代码生成的功能帮助我理解了程序的逻辑和结构,寻找特定输入以输出成功信息。这个过程不仅锻炼了我的技术能力,也提高了我的问题解决能力。
在分析自制恶意代码样本rada
时,我对恶意代码有了更深刻的认识,也学习了如何对恶意代码进行分类,并了解了一些常用的检测方法。
通过对Windows 2000系统被攻破并加入僵尸网络的取证分析实践,我熟悉了网络取证在网络安全中的实际应用。通过分析网络数据,我能够追踪攻击者的行为,识别攻击模式。
这次实验不仅提高了我的技术能力,也让我对网络安全有了更深刻的理解。我将继续学习和探索,为维护网络安全贡献自己的力量。