20222428 2024-2025-1 《网络与系统攻防技术》实验四实验报告
1.实验内容
1.恶意代码文件类型标识、脱壳与字符串提取,以获得rada恶意代码的编写作者。在这个过程中我们需要达到以下几个目的:
- 使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
- 使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
- 使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
2.使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
3.分析一个自制恶意代码样本rada,并回答以下问题。
- 提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
- 找出并解释这个二进制文件的目的;
- 识别并说明这个二进制文件所具有的不同特性;
- 识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
- 对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
- 给出过去已有的具有相似功能的其他工具;
- 可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
- 给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。
4.取证分析实践。
Windows 2000系统被攻破并加入僵尸网络
问题: 数据源是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。回答下列问题:
- IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
- 僵尸网络是什么?僵尸网络通常用于什么?
- 蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
- 在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
- 哪些IP地址被用于攻击蜜罐主机?
- 攻击者尝试攻击了那些安全漏洞?
- 那些攻击成功了?是如何成功的?
2.实验过程
2.1恶意代码文件类型标识、脱壳与字符串提取
对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者。在这个过程中我们需要达到以下几个目的:
- 使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具
- 使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理
- 使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁
- 下载目的文件rada.exe,在虚拟机中使用file指令对文件进行简单地查看。
file rada.exe
rada.exe文件一共有四部分内容,1.PE32:这是32位的文件 2.GUI:这个文件是有图形界面 3.Intel 80386:处理器 4.for MS Windows:此文件运行在Windows操作系统上 - 通过PEiD工具进一步了解rada.exe的基本信息。
可以看到文件的入口点、文件偏移、连接器版本、EP段、首字节、子系统、加壳的信息。加壳类型为UPX且版本为0.89.6 - 通过strings指令分析RaDa.exe文件中的可打印字符串。
strings rada.exe
我们可以看到字符串大部分信息为乱码,通过学习得知是因为加壳处理,此时需要进行脱壳。 - 进行脱壳处理并重新分析。
使用超级巡警软件(脱壳工具)进行脱壳操作
再通过之前的string指令分析脱壳后的RaDa_unpacked.exe文件
后面的乱码部分已变成可读取的内容,但从脱壳后得到的字符串中并没有找到作者的信息,只能看到一些函数调用名以及其他的字符串。 - 使用Process Explorer(进程监控)工具,运行RaDa_unpacked.exe文件。
点击Strings
经过查找可以发现作者的名字和文件编写的日期。
2.2使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息
2.2.1分析crackme1.exe
1.执行crackme1.exe,对参数个数进行猜测,依次输入3/2/1个参数,观察程序输出
我们可以看到,只有当输入参数为1个的时候,输出为“Pardon? What did you say?”;而、当输入参数个数为其他任意值的时候,输出结果都是“I think you are missing something.”;
猜测输入参数的个数为1。
2.使用反汇编翻遍与工具IDA Pro Free打开crackme1.exe,点击Strings查看字符串
可以看到第1、3出现过,而第2、4并未出现(猜测其中一个即为正确的口令,另一个为输入正确后的提示)。
3.点击View-Graphs-Function calls,查看函数结构
函数结构里我们发现与printf直接相关的为sub_401280函数,在Functions中查找此函数并进行分析。
将此过程简化为流程图:
正确口令为“I know the secret”进行验证。
2.2.2分析crackme2.exe
1.执行crackme2.exe,对参数个数进行猜测,依次输入0/2/1个参数,观察程序输出
我们可以看到,只有当输入参数为1个的时候,输出为“I have an identity problem.”;而、当输入参数个数为其他任意值的时候,输出结果都是“I think you are missing something.”;
猜测输入参数的个数为1。
2.使用反汇编翻遍与工具IDA Pro Free打开crackme1.exe,点击Strings查看字符串
可以看到第1、3出现过,而第2、4、5并未出现(猜测其中一个即为正确的口令)
3.点击View-Graphs-Function calls,查看函数结构
函数结构里我们发现与printf直接相关的为sub_401280函数,在Functions中查找此函数并进行分析。
将此过程简化为流程图:
验证运行crackmeplease.exe但口令不对时输出“Pardon?What did you say?”
可知此文件需要命名为crackmplease.exe进行运行,口令为:“I know the secret"
将文件复制为crackmeplease.exe,运行crackmeplease.exe输入参数“I know the secret",即可输出成功信息。
2.3分析一个自制恶意代码样本rada
2.3.1对二进制文件进行摘要(这里采用了md5进行摘要)
md5sum rada.exe
改名再进行摘要
mv rada.exe 2428.exe
md5sum 2428.exe
可见摘要值(caaa6985a43225a0b3add54f44a0d4c7)没有改变,摘要值用来标识同一个样本。
2.3.2打开process explorer,双击运行该程序,在进程中找到rada_unpacked.exe,右键选择Properties—Strings查看。
进行分析得:
2.3.3对上述string的分析,我们较为简单的猜测这个程序将会进行以下操作:
- 使用http连接到10.10.10.10主机的一个叫做RaDa_commands.html的网页上,进行一些上传和下载操作,并在受害者C盘中创建文件夹“C:/RaDa/tmp”。
- 将文件rada.exe复制到C:\RaDa\bin\路径下。
- 对主机的注册表进行了读写和删除操作。
可见C:\RaDa\bin\路径下复制了rada.exe,这是修改了注册表并将此任务设置为开机自启动。
2.3.4访问RaDa_commands.html,打开Wireshark进行抓包
发现发送大量TCP包并接受大量ICMP包,但TCP包和ICMP包都是空的可想而知应该为DDoS拒绝服务攻击和ICMP洪泛攻击。
因为此执行文件不进行复制并传播排除蠕虫或病毒,猜测为后门、木马程序。
我们不免想私有地址时用来干什么的?双击string下的私有地址
可见私有地址关联sub_4052C0函数,打开此函数。
分析可知要判断目标主机的IP地址是否在这三个私有网段内,如果是则访问10.10.10.10。
2.3.5回答问题:
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
答:二进制文件的摘要为caaa6985a43225a0b3add54f44a0d4c7
基本信息:PE32 executable(GUI) Intel 80386 ,for MS Windows
(2)找出并解释这个二进制文件的目的;
答:通过杀毒软件的检测可知是一个后门程序。目的是连接到互联网的指定地址与目的主机取得会话连接,使攻击者远程连接被控主机取得一定权限并进行执一些指令。
(3)识别并说明这个二进制文件所具有的不同特性;
答:这个二进制文件被执行时会将自身复制到主机C盘中的指定位置,并创建文件夹用来存放从攻击主机下载到受控主机的文件和从受控主机获取的文件;同时通过修改注册表的方式使得程序能够开机自启动;这种做法具有一定隐蔽性让目标主机难以检测到后门程序的存在。
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
答:实践可知使用了0.89.6版本的UPX壳(压缩壳)。
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
答:通过测试可知这个恶意代码样本不能进行复制,不能自主传播,所以不是病毒或蠕虫。程序可以通过在目的主机上执行来获取目的主机的Shell猜测是后门程序、木马程序。通过恶意样本分析平台进行验证。
(6)给出过去已有的具有相似功能的其他工具;
答:实验二的后门程序获取主机或虚拟机的shell以及权限,使用目的主机进行一系列操作(msfvenom)。
(7)可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
答:可以。1.在本机windows下添加--authors、help等参数然后运行这个程序。2.虚拟机的kali中使用strings命令查看。3.有壳的先进行脱壳再使用Process Explorer查看文件中的字符串。
(8)给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。
1.行为检测码:恶意软件在感染计算机后会表现出一些特殊的行为,如修改系统文件、创建新文件、发送垃圾邮件等。该恶意代码在C盘中创建文件夹并将文件rada.exe复制到C:\RaDa\bin\路径下等异常行为可以通过分析计算机操作记录查看。
2.基于特征码的检测方法:特征码是某种恶意软件才可能会有的标识码(通常是文件里对应的代码或汇编指令的地址)。此方法通过采集恶意软件样本,提取其特征码,检测时将特征码与检测样本比较,判断是否有样本片段与此特征码吻合,从而判定该软件是否为恶意软件。该恶意代码可以通过“RaDa”、“RaDa.exe”、“C:\RaDa\bin”等作为特征码进行查杀。
3.基于系统日志的检测方法
通过对系统日志的分析来发现潜在的问题或异常。系统日志是记录系统运行状态、关键事件和错误信息的重要工具,它包含了大量的系统行为和状态信息(特别需注意与安全相关的日志)。分析系统日志时可见该恶意代码进行C:\RaDa\目录的创建、以及此目录下文件的修改或删除操作记录,通过此纪录查找与RaDa.exe相关的活动。
4.网络流量检测法:恶意软件通常会通过网络与外部服务器进行通信,传输有害信息或接收远程指令。通过监测计算机与外部服务器的网络流量,可以检测该恶意代码寻找与10.10.10.10的HTTP通信并接受大量ICMP包。
5.基于沙箱环境的检测方法:将未知或可疑软件放入一个隔离的虚拟环境中运行,以观察其行为并判断其是否为恶意软件。使用沙箱工具来运行RaDa恶意软件的样本,监控沙箱环境中的文件操作、进程创建等行为,确认软件是否为恶意软件。
2.4取证分析实践
Windows 2000系统被攻破并加入僵尸网络
数据源botnet_pcap_file.dat是Snort收集的蜜罐主机5天的网络数据源,其中去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。
回答问题:
(1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用哪些TCP端口?
答:IRC是一种基于客户端-服务器模型的即时通讯协议,允许用户通过互联网进行实时文本交流。这种协议由芬兰人Jarkko Oikarinen于1988年首创,并经过数十年的发展,现已在全球范围内得到广泛应用。当IRC客户端申请加入一个IRC网络时,它会发送一个特定的消息或命令给IRC服务器,以请求加入某个频道或与其他用户进行交流。然而,具体的消息内容因IRC客户端软件的不同而有所差异,通常都会包含客户端希望加入的频道名、用户名以及可能的密码等信息。
IRC一般使用的TCP6667端口进行通信。
(2)僵尸网络是什么?僵尸网络通常用于什么?
答:僵尸网络是指攻击者出于恶意目的,传播僵尸程序控制大量主机(傀儡主机、肉鸡),并通过一对多的命令与控制信道所组成的网络。
僵尸网络构成了一个攻击平台,利用这个平台可以有效地发起各种各样的攻击行为,如分布式拒绝服务(DDoS)攻击、发送垃圾邮件、窃取用户敏感信息等。
(3)蜜罐主机(IP地址:172.16.134.191)与哪些IRC服务器进行了通信?
使用wireshark打开botnet_pcap_file.dat文件。
设置过滤规则:ip.src == 172.16.134.191 && (tcp.dstport == 6667 || tcp.dstport == 6697)
可见与以下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为服务器的僵尸网络?
输入apt install tcpflow安装tcpflow
使用tcpflow读取.dat文件,并设置过滤条件
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 --text "^: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
可见有3461台主机访问了以209.196.44.172为服务器的僵尸网络
(5)哪些IP地址被用于攻击蜜罐主机?
输入下列命令来获取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> ip2428.txt;wc -l ip2428.txt
查看文件vim ip2428.txt
(6)攻击者尝试攻击了那些安全漏洞?
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
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
1.TCP:
135:RPC(Remote Procedure Call,远程过程调用)服务端口。
139:NetBIOS Session Service(扫描目标计算机的139端口,如果发现有漏洞,可以试图获取用户名和密码)。
25:SMTP(简单邮件传输协议)服务,用于发送电子邮件。
445:通常用于Windows系统中的SMB(Server Message Block)协议,实现文件共享和打印共享等功能。
4899:远程控制软件的监听端口。
80:HTTP服务。
2.UDP:137:使用者向某台计算机的137端口发送一个请求,就可以获取该计算机的名称、注册用户名,以及是否安装主域控制器、IIS是否正在运行等信息。
(7)那些攻击成功了?是如何成功的?
TCP:
1.135:
只有TCP三次握手与四次挥手,攻击失败。
2.139:
先建立TCP连接,再NBSS会话请求请求访问SBM,然后会话请求被目标接受,接着发送SMB请求共享Path: \Pc0191\C,但最后目标主机终止了TCP会话。攻击失败。
3.25:
建立和释放TCP的过程,攻击失败。
4.445:
create andx request的情况,攻击成功。
5.4899:
大量数据交互,攻击成功。
6.80:
向目标成功请求默认网页,攻击成功。
UDP:137:
有Name query response但没什么有用包,攻击失败。
3.问题及解决方案
- 问题1:IDA不能显示字符串
- 问题1解决方案:右键,选择“建立”,“允许的字符串类型”全部选择,然后调试“列表设置”。
- 问题2:没有tcpflow
- 问题2解决方案:通过命令sudo apt-get install tcpflow进行安装。
4.学习感悟、思考等
本次实验利用专业的脱壳工具,成功去除了恶意代码的保护层。在字符串提取阶段,我通过搜索特定的字符串模式,最终找到了rada恶意代码的编写作者,这让我深刻感受到了逆序工程的魅力。使用IDA Pro对crackme1.exe和crackme2.exe进行了静态和动态分析时需要仔细分析程序的逻辑结构和函数调用关系,通过逐步缩小了搜索范围,最终找到了能够触发成功输出的特定输入。这一过程让我对IDA Pro这一逆向分析工具有了更深入的了解。Snort收集的蜜罐主机5天的网络数据源中包含了大量的信息,我通过筛选和分析成功提取出了与攻击相关的关键信息。这一过程不仅锻炼了我的数据分析和处理能力,还让我对网络安全取证有了更深入的认识。