20222427 2024-2025-1 《网络与系统攻防技术》实验四实验报告

1.实验内容

1.1 本周学习内容

  • 学会了有关恶意代码分析的技术的基础知识,包括静态分析与动态分析。

  • 尝试运用静态分析方法去实现一些目的行为。

  • 学习了有关于信息收集的有关知识,包括相应的定义、收集方式以及实现收集的技术。

1.2 实验内容

  1. 恶意代码文件类型标识、脱壳与字符串提取

  2. 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。

  3. 分析一个自制恶意代码样本rada,并撰写报告,回答问题。

  4. Windows 2000系统被攻破并加入僵尸网络的取证分析实践。

2.实践过程

2.1 恶意代码文件类型标识、脱壳与字符串提取

2.1.1 使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具

1.使用file指令查看RaDa.exe的文件格式,结果如下。

“PE32”说明是一个32位的PE文件,“(GUI) Intel 80386”说明运行在Intel 80386 GUI上,“MS Windows”说明针对的操作系统是Windows。

2.使用PEID查看加壳工具

我在分析该文件的加壳工具的时候是使用PEID对程序检查是否存在壳
识别结果为“UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo”,可知该程序加的是UPX的壳,版本号是0.89.6。

2.1.2 使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理

使用超级巡警脱壳机进行脱壳,脱壳后程序为RaDa_unpacked.exe。

2.1.3 使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁

  1. 使用strings命令分析

使用strings命令分析脱壳后的rada恶意代码样本(即RaDa_unpacked.exe),分析结果如下图所示。

可以发现rada恶意代码的编写作者是Raul Siles && David Perez

2.2 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息

2.2.1分析crackme1.exe信息

使用file命令查看crackme1.exe的文件信息

  1. 可知crackme1.exe为windows系统下运行的32位可执行程序,没有图形界面,仅使用控制台操作。

  2. 运行程序并试探输入格式

希望通过特定输入使crackme1.exe输出成功信息,首先要确定“特定输入”可能包含几个参数。多次运行crackme1.exe并尝试不同的参数个数,通过返回结果判断正确的参数个数(不含程序名)可能是一个。

  1. 利用IDA查看crackme1.exe包含哪些字符串

可知共有4种字符串,目前我们试探出其中两种为返回情况:“I think you are missing something.”是“参数数量不对”时的返回情况、“Pardon? What did you say?”是“参数数量对但内容不对”的返回情况。

4.利用IDA查看crackme1.exe的函数调用图

选择“View”→“Graphs”→“Function calls”,查看函数调用图。可以看到,sub_401280函数可以调用_fprintf和_printf。据此,我们判断该函数中包含选择输出哪些信息的逻辑结构。

5.得到正确结果

2.2.2 分析crackme2.exe信息

对crackme2.exe的分析过程与crackme1.exe类似。

  1. 使用file命令查看crackme2.exe的文件信息

crackme2.exe同样为windows系统下运行的32位可执行程序、没有图形界面仅使用控制台操作。

  1. 运行程序并试探输入格式

通过返回结果判断正确的参数个数(不含程序名)可能是一个。

  1. 利用IDA查看crackme2.exe包含哪些字符串

可以看到共有5种字符串,目前我们试探出其中两种为返回情况:“I think you are missing something”是“参数数量不对”时的返回情况、“Pardon? What did you say?”是“参数数量对但内容不对”的返回情况。

  1. 利用IDA查看函数调用图

可以看到,sub_401280函数可以调用_fprintf、puts、putchar。据此判断该函数中包含选择输出哪些信息的逻辑结构。

  1. 反汇编

反汇编得到如下代码:
int __cdecl main(int argc, const char **argv, const char **envp)
{
void *v3; // esp
unsigned int i; // [esp+14h] [ebp-4h]

v3 = alloca(16);
__main();
if ( argc == 2 )
{
if ( !strcmp(*argv, "crackmeplease.exe") )
{
if ( !strcmp(argv[1], "I know the secret") )
{
for ( i = 0; i <= 0x21; ++i )
putchar((char)(byte_403080[i] ^ 0x42));
puts(Buffer);
return 0;
}
else
{
fprintf(&__iob[2], "Pardon? What did you say?\n");
return 3;
}
}
else
{
fprintf(&__iob[2], "I have an identity problem.\n");
return 2;
}
}
else
{
fprintf(&__iob[2], "I think you are missing something.\n");
return 1;
}
}
可以看出,要想得到正确的结果,输入的第一个参数是:crackmeplease.exe,第二个参数是:“I know the secret”。

  1. 得到正确结果

2.3 分析自制恶意代码样本rada,并回答问题

2.3.1 提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息

  1. RaDa.exe的摘要

我们使用Certutil来计算RaDa.exe的摘要,在所在目录打开cmd并输入如下命令。

certutil -hashfile RaDa.exe
certutil -hashfile RaDa.exe MD5
certutil -hashfile RaDa.exe SHA256

RaDa.exe的摘要分别如下:
MD5:caaa6985a43225a0b3add54f44a0d4c7
SHA1:4164423ece62c5c4c287f8c2003b84e4e3a6cfda
SHA256:13c2379e9d9f679396e21a3391804cc834892f25691381b6d078d07b56d38f90

  1. 其他基本信息

用file命令用来识别文件类型,这是一个windows系统下运行的32位可执行程序。(前面已展示,此处便不再展示)

2.3.2 找出并解释这个二进制文件的目的

打开process explorer进行监听,运行RaDa_unpacked.exe,查看Strings。

可知该二进制文件有以下行为:

  1. 通过HTTP协议请求10.10.10.10\RaDa\RaDa_commands.html。

  2. 在C盘中创建一个RaDa文件夹,包含tmp和bin两个子文件夹,其中将RaDa.exe复制在bin子文件夹中。

  3. 对注册表进行读、写和删除。添加2个注册表项,路径为分别为HKLM(即HKEY_LOCAL_MACHINE)\Software\Microsoft\Windows\CurrentVersion\Run\和HKLM\Software\VMware, Inc.\VMware Tools\InstallPath。
    其中HKLM(即HKEY_LOCAL_MACHINE)\Software\Microsoft\Windows\CurrentVersion\Run里名称为RaDa,类型为REN_SZ,数据内容为C:\RaDa\bin

  4. 疑似产生DDOS Smurf攻击。

  5. 与一些指令相关,如put、get、screenshot、sleep。

2.3.3 识别并说明这个二进制文件所具有的不同特性

  1. 当文件被执行时,其将自身安装到系统中,并修改注册表使得系统自启动该文件。

  2. 文件被执行后,将通过浏览器上网,请求页面并获得来自攻击者的指令。

  3. 实现远程操控。

  4. 文件运行使,支持put上传、get下载、screenshot截屏、sleep挂起等指令。

2.3.4 识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术

文件使用UPX进行了加壳。

2.3.5 对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由

个人认为只是一个后门程序。首先该文件并不具备自我复制的特性,没有在计算机系统内传播,这两点不符合病毒的特性;其次不存在伪装成正常软件欺骗使用者下载的行为,窃取计算机内的信息,这两点也不符合蠕虫的特性。最后,它可以接收指令、操控目标主机,符合后门程序的特征。

2.3.6 给出过去已有的具有相似功能的其他工具

  1. msfvenom

  2. bobax

2.3.7 可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?

可以。不在VMware中运行,在Windows的命令提示符中,输入RaDa.exe --authors即可查看作者。

2.3.8 给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。

  1. 基于特征码检测

原理:基于特征码的检测方法是通过比对后门软件的特征码与已知恶意软件的特征码库来识别后门软件。

使用:将可执行文件或其他可运行的脚本扫描运行时,使用相应的杀毒软件将其与已有的病毒库中的特征码进行比对,判断是否是后门软件。

  1. 监视注册表

原理:通过监视注册表的变化来检测后门软件的安装和运行。

使用:利用注册表监视工具实时监控文件和注册表的变化。当检测到注册表被未知或可疑地修改时,分析这些变化是否与后门软件有关。

  1. 网络抓包分析

原理:通过抓包工具分析网络流量,检测后门软件的通信行为。

使用:使用抓包工具(如Wireshark)来捕获网络流量;分析捕获的网络流量,查找与后门软件通信相关的数据包。根据数据包的源IP、目的IP、端口号、传输的数据内容等信息来判断是否存在后门软件。

  1. 行为分析检测

原理:通过监控各个软件的行为来检测后门软件。

使用:运行可疑文件,实时监控其行为,如果该软件存在可疑行为(如:修改注册表、释放新文件等),进一步分析该软件是否是后门软件。

  1. 使用免杀测试工具

原理:将待检测软件上传到免杀测试平台,可以了解该软件是否被多个检测引擎识别为恶意软件。

使用:将待检测软件上传到免杀测试工具中(如 VirusTotal、VirusScan);等待完成扫描并返回结果;分析扫描结果,查看是否有多个检测引擎识别该软件为恶意软件。

2.4 取证分析实践:Windows 2000系统被攻破并加入僵尸网络

Windows 2000系统被攻破并加入僵尸网络
数据源botnet_pcap_file.dat是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。回答下列问题。

2.4.1 IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?

  1. IRC即Internet Relay Chat,互联网中继聊天,是一种客户端-服务器架构的、实时的、分布式的多用户聊天系统。它允许客户端用户可以加入特定的频道(channel)与该频道中的所有用户聊天,也可以采用私聊的方式。特点是速度非常之快,聊天时几乎没有延迟的现象,并且只占用很小的带宽资源。

  2. IRC客户端申请加入一个IRC网络时将发送JOIN信息,包括三种信息:口令、昵称和用户信息。

  3. 通常在6667、6697端口监听。

2.4.2 僵尸网络是什么?僵尸网络通常用于什么?

  1. 僵尸网络是指攻击者出于自身恶意,传播僵尸程序控制大量主机(肉机),并通过一对多的命令与控制信道所组成的网络。

  2. DDOS攻击、发送恶意邮件、占用大量资源等。

2.4.3 蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?

使用Wireshark打开数据源botnet_pcap_file.dat,设置过滤条件ip.src == 172.16.134.191 && tcp.dstport == 6667,过滤出蜜罐主机尝试连接6667端口的SYN包。
可知,蜜罐主机与5台IRC服务器进行了通信:209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10、209.196.44.172。


2.4.4 在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?

  1. 使用tcpflow进行分流处理

首先获取在209.196.44.172与172.016.134.191之间的所有的IRC数据包。在kali终端中输入如下命令:

apt-get install tcpflow#安装
tcpflow -r botnet_pcap_file.dat 'host 209.196.44.172 and port 6667' # 进行抓包,-r读取该数据包

可以得到三个文件:209.196.044.172.06667-172.016.134.191.01152、172.016.134.191.01152-209.196.044.172.06667、report.xml。


  1. 观察不同昵称出现个数

我们要知道的是有多少不同的主机访问了以209.196.44.172为服务器的僵尸网络,所以我们使用如下命令来获取访问该服务器的主机数量:

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# grep获取昵称输出行;sed去除前缀(有可能无法匹配);tr -d将空格转换为换行;tr去除“\r”;grep -v去除空行;sort -u排序并去除重复;wc -l获得行数

2.4.5 哪些IP地址被用于攻击蜜罐主机?

  1. 找出所有连接蜜罐主机的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> 20222427ip_list.txt;wc -l 20222427ip_list.txt



由图可见一共有165个IP地址被用于攻击蜜罐主机。

2.4.6 & 2.4.7 攻击者尝试攻击了那些安全漏洞?那些攻击成功了?是如何成功的?

  1. 使用wireshark了解网络流分布情况

使用Wireshark打开数据源botnet_pcap_file.dat,选择“统计”→“协议分级”,大致了解网络流分布情况。
可发现其中包含IP包,186个为UDP协议,54350个为TCP协议。
UDP协议中包含NetBIOS、Data等,TCP中包含NetBIOS Session、HTTP、Data、IRC等。

  1. 筛选TCP端口

由于TCP包数目较多,我们先对TCP端口进行筛选。使用指令tcpdump -r botnet_pcap_file.dat -nn 'dst host 172.16.134.191' and tcp[tcpflags]== 0x2 | cut -d ' ' -f 5 | more | cut -d '.' -f 5 | cut -d ':' -f 1 | sort | uniq
可知,攻击者扫描了90个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 其中开放并响应的有135、139、25、445、4899、80。


  1. 筛选UDP端口

和筛选TCP端口类似,可获得3个UDP端口:137、1434、28431。其中开放并响应的是137。

使用指令:
tcpdump -r botnet_pcap_file.dat -nn 'dst host 172.16.134.191' and udp | cut -d ' ' -f 5 | more | cut -d '.' -f 5 | cut -d ':' -f 1 | sort | uniq
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 | more

  1. TCP135端口

只进行了三次握手的过程,没有数据交换,可能只是进行了connect扫描。

  1. TCP139端口

大部分连接没有传递具体内容,主要是SMB(空会话连接)。

  1. TCP25端口

和135端口一样只进行了三次握手,没有具体的攻击行为。

7.TCP445端口

在No.33280的报文中发现了“PSEXESVC.EXE”,这个文件主要是一种通过IRC进行通信的Dv1dr蠕虫。这里发生了蠕虫攻击。后面的报文中包含主机响应,攻击成功。

  1. TCP4899端口

4899端口是一个远程控制服务端监听的端口,经常被黑客用来控制被控机。且这类软件一般不会被杀软查杀,比后门更安全。这里发生了远程控制,表示攻击成功。

  1. TCP80端口

存在缓存区溢出攻击,通过缓冲区溢出获得命令行。

在报文中,我还发现c:\notworm”,这也是一个蠕虫攻击。

此外,通过观察数据包,还可以发现该端口为获得相应的权限持续使用脚本攻击IIS服务器的漏洞。

  1. UDP137端口

观察数据包知道此处是在进行NetBIOS查点。

  1. UDP1434端口

这里存在SQL slammer蠕虫攻击。

  1. UDP28431端口

是正常情况,没有什么攻击。

3.学习中遇到的问题及解决

  • 问题1:下载2个crackme.exe文件时遇到“打开前请确保确认”,阻止我继续下载。

  • 问题1解决方案:通过在网上查询资料,得知可以通过人工设置,对相应的文件进行信任设置即可解决该问题。

  • 问题2:使用wine指令下载exe文件时提示错误(err)。

  • 问题2解决方案:通过网上查询资料得知,该问题貌似是Linux系统自己会报的错,是一种正常情况,不用在意。

  • 问题3:在抓取数据包的时候不知道什么是攻击的具体报文。

  • 问题3解决方案:通过再网上查询资料,一个个去辨别数据包的报文,得知了本次实验所涉及到的蠕虫攻击的具体数据包。

4.实践总结

在本次的实验中,我对静态分析恶意代码技术有了一定的了解与应用,并且体验了从恶意代码的分析到取证分析的整个过程。

首先,在恶意代码文件类型标识、脱壳与字符串提取的实验环节,通过文件格式和类型识别工具,我了解了rada文件的内容,包括时间和作者等。对于IDA Pro的使用我感觉有一些难度,一开始我甚至都不知道该如何使用该工具,并且我对汇编语言还处于十分陌生的阶段,导致我对相应的信息都看不懂。最后,因为大二就学过抓包,所以使用Wireshark分析单个数据包还是不难的,但观察发包的全部过程再结合网络攻防的知识还是有点挑战的。

通过这次实验,我不仅学会了如何使用各种工具进行网络攻防操作,还认识到了网络安全的重要性以及恶意代码的危害性。

参考资料

posted @ 2024-11-02 14:51  20222427夏文韬  阅读(19)  评论(0编辑  收藏  举报