20222418 2024-2025-1 《网络与系统攻防技术》实验四实验报告
1.实验内容
一、恶意代码文件类型标识、脱壳与字符串提取
对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
二、使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
三、分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
(2)找出并解释这个二进制文件的目的;
(3)识别并说明这个二进制文件所具有的不同特性;
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
(6)给出过去已有的具有相似功能的其他工具;
(7)可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
(8)给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。
四、取证分析实践
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.实验过程
一、恶意代码文件类型标识、脱壳与字符串提取
对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
file命令是Linux系统中可用于检查文件类型的常用命令。它通过读取文件的内容或元数据来判断文件的类型,比如文本文件、二进制文件、可执行文件等。
那就先用file RaDa.exe
命令来检查一下文件类型:
检测后得到了输出信息为:“RaDa.exe: PE32 executable (GUI) Intel 80386, for MS Windows, 3 sections”。
这说明RaDa.exe是一个32位的PE文件(PE32),具有图形用户界面(GUI)可以在Intel 80386处理器或兼容的处理器上运行(Intel 80386),是针对Microsoft Windows操作系统设计的(for MS Windows),并且被分为了三个节(3 section)。
PE文件是一种Windows操作系统下可执行文件的格式,全称为Portable Executable。PE文件是一种用于存储程序代码、数据和资源的文件格式,它是Windows操作系统中常见的可执行文件格式之一。
PE文件包含了程序的代码段、数据段、资源和其他元数据,如导入表、导出表、重定位表等。它还包含了程序运行所需的头部信息,用于告诉操作系统如何加载和执行这个程序。
PE文件格式具有一定的结构,通常包括DOS头部、PE头部、节表等部分。DOS头部用于兼容DOS系统,在Windows系统中并不直接使用。PE头部包含了PE文件的基本信息,如文件类型、节表偏移等。节表则描述了文件中各个节的信息,如代码段、数据段等。
接下来我们用PEiD来侦测一下这位RaDa.exe选手:
PEiD(PE Identifier)是一款文件格式和类型识别工具,主要用于检测PE(Portable Executable)格式的文件是否被加壳或者含有其他反调试、反静态分析的技术。
从图中可以看到文件的入口点,文件偏移,PE段,以及它用了0. 89. 6的UPX压缩壳。
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
脱壳前我先用了strings RADA.exe
命令对文件进行分析。
strings 命令是 Linux 中的一个实用工具,用于从二进制文件中提取可打印的字符串。它通常用于分析可执行文件、库文件或其他类型的二进制数据,以查找嵌入其中的文本信息。这些文本信息可能是程序中的调试信息、字符串常量、错误消息等。
可以看到去壳前出来的是一堆乱码。
用脱壳软件进行处理:
(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
脱壳后我再用strings命令提取字符串,发现了能看懂的相关信息,其中能发现编写作者:
二、使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
(1)分析crackme1.exe
首先先运行一下这个文件,看有什么反馈。
可以看到改变输入后有Pardon……?和……missing sth.两种提示语,都代表着输入不正确。
于是我打算用IDA查看它。同样用file命令查看文件类型,在打开时选择对应文件类型(PE):
打开后,我点进了主函数,得到以下几个调用图,主体部分是两个判断语句。看第一个条件判断可知如果参数个数不为2,就会输出“…… missing something.”。
之前出现过的两种报错信息都返回了loc_401327,重新开始循环。
然而还有一种情况,“You know how to……”似乎是正确输入后的结果。而在loc_401202中能看到进入这里的条件是输入的第二条指令与“I know the secret”进行比较,结果一边指向Pardon? ,一边指向“You know”。
这下我们知道了应该怎样正确运行它,果然成功了。
(2)分析crackme2:
同样先运行文件感受一下:
用IDA打开后,得到以下调用图。同样的,当参数个数不为2,就会输出“…… missing something.”。
按照之前的思路来分析,我发现当第一个参数不是“crackmeplease.exe”时,输出“I have an identity problem.”,第二个参数如果不是“I know the secret”,则会输出“Pardon? ”。只有当第一个第二个参数都正确输入时,才输出成功信息。
第一个参数一般是文件名,我把文件改成指定信息,再尝试就成功得到了巧克力🍫。
三、分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
之前我已经用file命令查看过这个文件了,现在利用md5sum命令查看摘要。
(2)找出并解释这个二进制文件的目的;
之后我打算用Process Explorer找到RaDa并打开,但很明显我的windows主机并不能让它运行。
通过查找资料,我发现很多人都是在windows xp上进行实验的,然而我并没有提前准备windows xp实验环境。
实在没办法,我打算到做网络安全协议实验时准备的Windows server 2016试试,没想到成功了(具体步骤见问题及解决方案)。
点开脱壳后的RaDa.exe,点击字符串,仍然是一堆乱码。
在虚拟机上对其进行脱壳,重新用Process Explorer找到脱壳后的程序,双击点开,点击字符串查看。
通过分析显示的字符串,可以得到以下信息:
-
对download.cgi和upload.cgi进行某些操作
-
访问10.10.10.10/RaDa这个链接,并从RaDa_commands.html中获取相应的指令。
-
在系统的C盘根目录下创建了一个名为RaDa的文件夹,其中有tmp和bin两个文件,其中bin中的文件即为RaDa.exe,推测程序运行后会自动将自己复制到C:\Rada\bin目录中。
-
添加了一个注册表项:
HKLM\Software\Microsoft\Windows\CurrentVersion\Run\,这个注册表项是控制计算机启动的信息,这样实现了开机自启动rada。 -
添加了一个注册表项:
HKLM\Software\VMware, Inc.\VMware Tools\InstallPath该位置的注册表项可控制远程桌面上的客户端驱动器重定向行为。猜想这个操作是为了实现远程控制桌面。 -
该位置的字符串显示发起DDOS Smurf远程攻击。
-
注册表进行读、写、删操作。
(3)识别并说明这个二进制文件所具有的不同特性;
-
修改系统,添加了注册表,可以开机自启动。
-
可以远程控制。
-
可以控制桌面,并且可以进行读写删操作。
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
使用了压缩壳技术,直接查看会是乱码。
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
是后门程序,因为他不会传播也没有伪装,但可以远程控制,而且还能实现开机自启动。
(6)给出过去已有的具有相似功能的其他工具;
实验二中的msfvenom能生成后门文件,veil的evasion也可以。
(7)可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
可以,上面的实验过程中就能查看到文件的作者,需要对文件进行脱壳后查看。
(8)给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。
- 基于特征码的方法
基于特征码的检测方法是恶意软件检测中最常见且有效的方法之一。它通过比对计算机系统中的文件和程序与已知恶意软件的特征码数据库(病毒库)来判断是否存在恶意软件。这些特征码通常是恶意软件代码中特有的、能够唯一标识该恶意软件的字符串或二进制序列。当扫描工具检测到与特征码数据库中某个特征码匹配的文件或程序时,就会将其标记为恶意软件并进行相应的处理。
- 行为监测法
行为监测法通过分析计算机的行为和操作记录来检测是否存在异常行为,从而判断是否有恶意软件的存在。恶意软件在感染计算机后往往会表现出一些特殊的行为,如修改系统文件、创建新文件、发送垃圾邮件等。行为监测法能够实时监测计算机系统的行为,并根据预设的规则和阈值来判断这些行为是否异常。如果检测到异常行为,系统就会发出警报并采取相应的措施。
- 网络流量监测法
恶意软件通常会通过网络与外部服务器进行通信,传输有害信息或接收远程指令。网络流量监测法通过监测计算机与外部服务器的网络流量来检测是否存在恶意软件。这种方法能够实时监测网络流量的变化,并分析流量的来源、目的地以及内容等信息。如果检测到异常的网络流量,如大量的数据发送或接收、与已知恶意服务器的通信等,系统就会认为可能存在恶意软件并采取相应的防护措施。
- 启发式扫描法
启发式扫描法是一种基于特征库但不同于特征码静态扫描的动态分析方法。它依赖于特征库中的恶意行为模式,但并不依赖于具体的特征码。启发式扫描法会实时检测系统中存在的进程,并监控这些进程的行为。当进程作出一些敏感行为时(如修改注册表、格式化磁盘等),启发式扫描法会为该进程累积权值。不同的行为对应了不同的权值,当一个进程权值达到设定的阈值时,系统就会认为该程序存在恶意行为并进行相应的处理。
- 沙盒模拟法
沙盒模拟法是一种将待检测文件置于模拟的、可控的虚拟环境中运行的方法。通过分析文件在虚拟环境中的行为以及函数调用来判断其是否具有威胁性。沙盒模拟法能够避免恶意软件对真实系统的影响,并收集其行为数据以供分析。这种方法在检测未知的恶意软件时特别有效,因为它能够模拟出恶意软件在真实环境中的行为并进行分析。
四、取证分析实践
Windows 2000系统被攻破并加入僵尸网络
问题: 数据源是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。回答下列问题:
(1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
IRC是Internet Relay Chat的英文缩写,中文一般称为互联网中继聊天。它是由芬兰人Jarkko Oikarinen于1988年首创的一种网络聊天协议。
当IRC客户端申请加入一个IRC网络时,会发送一个连接请求消息到服务器。这个连接请求消息中通常包含了客户端希望使用的昵称(nickname)以及其他可能的连接参数。
IRC一般使用的TCP端口包括6667、6668、6669等,但也可能使用其他端口。这些端口是IRC客户端与服务器进行通信的通道。
(2)僵尸网络是什么?僵尸网络通常用于什么?
僵尸网络(Botnet)是指采用一种或多种传播手段,将大量主机感染bot程序(僵尸程序)病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络。
僵尸网络通常被用于发起大规模的网络攻击,如分布式拒绝服务攻击(DDoS)、发送海量垃圾邮件等。此外,黑客还可以通过控制僵尸网络中的计算机来窃取敏感信息、进行网络钓鱼等不法活动。
(3)蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
蜜罐(Honeypot)是一种安全机制,旨在诱使攻击者入侵、攻击或探测计算机系统、网络或应用程序,从而收集有关攻击者行为和策略的信息,以及提高对抗网络攻击的能力。蜜罐通常是一个看似有漏洞或价值的系统、网络或应用程序,但实际上是由安全专家部署和监控的虚拟或实体资源。攻击者可能会对蜜罐进行攻击,试图入侵、获取权限或进行其他恶意活动,而安全团队则可以监视并分析这些攻击行为。
用wireshark打开botnet_pcap_file.dat文件,设置过滤条件为ip.src == 172.16.134.191 && tcp.dstport == 6667 and tcp.flags == 0x2
(筛选出从IP地址为172.16.134.191的设备发出的、目的端口为6667的、且TCP标志为SYN尝试建立连接的数据包),得到如下结果:
可以看出,蜜罐主机与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为服务器的僵尸网络?
下载tcpflow进行读取查看:
TCPflow是一款功能强大的基于命令行的免费开源工具,它专门用于捕获TCP数据流,并将其保存为易于分析的格式。其主要功能有:
捕获和存储TCP数据:TCPflow能够捕获通过TCP连接传输的数据,并将其存储在文件中,以便于后续的分析和调试。
数据流分离:每个TCP流都会被存储在单独的文件中,这使得后续的独立分析变得更加容易。
支持多种操作系统:TCPflow可以在多种操作系统上编译和运行,包括Linux、Windows和macOS等。
TCP流重构:TCPflow能够正确重构数据流,即使在网络传输过程中数据被分片或乱序交付,也能按照正确的顺序重新构建。
HTTP解析:TCPflow可以自动解析HTTP响应,并生成相应的文件,这对于分析HTTP会话内容非常有用。
使用tcpflow工具读取名为botnet_pcap_file.dat的pcap文件,过滤规则tcpflow -r botnet_pcap_file.dat 'host 209.196.44.172 and port 6667'
指定了只匹配目标主机地址为209.196.44.172且目标端口号为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
cat 209.196.044.172.06667-172.016.134.191.01152
cat命令用于显示文件内容,209.196.044.172.06667-172.016.134.191.01152是tcpflow上一步已经生成的一个包含与IRC服务器通信数据的文件。
grep -a "^:irc5.aol.com 353"
grep命令用于搜索包含特定模式的行。
-a选项通常用于确保grep以文本模式处理二进制文件(尽管在这个上下文中可能不是必需的,因为tcpflow的输出通常是文本)。
"^:irc5.aol.com 353"是一个正则表达式,用于匹配以:irc5.aol.com 353开头的行。在IRC协议中,353是一个回复代码,用于列出当前频道中的用户。
sed "s/x]x 😕/g"
sed命令用于文本替换。
这个特定的sed表达式用于删除匹配行的开头部分,直到频道名称之前的冒号。注意,rgdiuggac和#x[^x]x是示例,实际内容可能不同。这个表达式的目的是提取频道中的用户列表。
tr ' ' '\n' | tr -d "\r" | grep -v "^$" | sort -u | wc -l
tr ' ' '\n':将空格替换为换行符,这样每个用户(或昵称)都会单独占一行。
tr -d "\r":删除回车符(如果存在)。
grep -v "^$":排除空行。
sort -u:对行进行排序并删除重复项。
wc -l:计算行数,即唯一用户的数量。
最终统计出访问以209.196.44.172为服务器的僵尸网络的主机数为3461台。
(5)哪些IP地址被用于攻击蜜罐主机?
从botnet_pcap_file.dat文件中提取出目标主机地址为172.16.134.191的数据包的源主机地址,并统计不同源主机的数量,并将结果保存到名为20222418hs.txt的文件中。
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 > 20222418hs.txt;wc -l 20222418hs.txt
然后用cat命令打开文件,发现共有165太主机被用于蜜罐攻击。
(6)攻击者尝试攻击了那些安全漏洞?
使用wireshark的“统计-协议分级”:发现有tcp包和udp包,其中tcp是主要的。
分别筛选TCP和UDP响应端口,读取dat文件,查看哪些端口是开放的:
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:从指定的PCAP文件读取数据包。
-nn:禁止名称解析,即不将IP地址解析为主机名,不将端口号解析为服务名。
'src host 172.16.134.191' and tcp[tcpflags]== 0x12:过滤条件,选择源IP地址为172.16.134.191且TCP标志位为0x12(SYN-ACK)的数据包。0x12表示SYN和ACK标志位都被设置,这通常出现在TCP三次握手的第二步。
cut -d ' ' -f 3:使用空格作为分隔符,提取第三字段,这通常是目的IP地址。但在这个上下文中,由于我们只关心源主机发出的数据包,这个字段可能不是最终想要的(可能是为了后续处理而保留的,但下面会覆盖这一步)。
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
与第一个命令类似,但过滤条件改为选择源IP地址为172.16.134.191且协议为UDP的数据包。
以上端口是开放的,因此之后需要针对这些端口进行分析。
(7)那些攻击成功了?是如何成功的?
这里按照上面所说的,逐个端口查看分析。
- tcp135端口,发现是普通连接并没有进行攻击
- 139端口,多个IP尝试和蜜罐主机在此端口建立连接,但都被蜜罐主机识别并发送RST数据包
- 25端口,也没有攻击
- 445端口此时不再是简单的连接,出现了SMB网络文件系统协议、SAMR结构网格自适应等协议
SMB(Server Message Block)网络文件系统协议是一种用于文件共享、打印服务以及其他资源访问的网络协议。
SMB协议允许在局域网(LAN)或广域网(WAN)上共享文件、打印机和其他资源。它支持客户端访问和修改远程服务器上的文件和目录,使得网络上的不同计算机之间可以方便地共享数据和资源。此外,SMB协议还支持网络打印机的共享和管理,以及跨平台的文件共享服务。尽管SMB协议在不断发展和改进中提高了安全性,但仍然存在一些潜在的安全风险,例如早期的SMB1版本存在严重的漏洞和弱点,容易被黑客利用进行攻击。
SAMR,全称是(block)Structured Adaptive Mesh Refinement,即结构网格自适应,是基于结构化网格块的自适应加密体系的通称。
有61.111.101.78向蜜罐主机发送PSEXESVC.EXE,
PsExec通常会被攻击者用作远程主机执行命令,客户端执行psexec.exe后若服务器认证成功,会将psexesvc.exe上传到服务端的ADMIN$目录并作为服务运行,在执行完命令后删除对应的服务和psexesvc.exe。
psexec建立连接之后目标机器上会被安装一个“PSEXESVC”服务。但是psexec安全退出之后这个服务会自动删除(在命令行下使用exit命令退出)。
- 4899端口是一个远程控制软件服务端监听的端口,具有远程控制功能,通常杀毒软件是无法查出它来的。可能被黑客用此来进行远程控制。
- 80端口,发现了传递大量的NNNNNN的内容,有可能是为了实现缓冲区溢出攻击或者蠕虫攻击
- udp的137端口,发现了大量NBNS协议包
NBNS(NetBIOS Name Service)协议是用于在局域网中解析 NetBIOS 名称与 IP 地址之间映射关系的服务,通常工作在UDP的端口137上。它主要用于 Windows 网络中,通过将计算机名(NetBIOS 名称)解析为IP地址,使计算机能够相互通信和识别。
3.问题及解决方案
-
问题1:Windows主机上RaDa.exe无法运行。
-
问题1解决方案:尝试使用windows server完成实验。
按照参考资料一进行设置共享文件夹,果然成功在IDA里找到了。
-
问题2:wireshark识别不了.dat文件。
-
问题2解决方案:上网查找资料以为需要预处理文件或者wireshark用错了功能,一直解决不了😭, 后来某一次尝试无果之后拍脑袋灵光一现把.dat文件拖进去就好了。
4.学习感悟、思考等
这次实验相对来说更容易理解每一步在干什么,比较明确顺利(这只是相对来说因为真的不知道会卡在什么莫名其妙的地方比如打不开.dat文件),但用到的工具非常的多,我在过程中也查询了大量的资料,争取搞清楚自己一直在干些什么,为什么。很多资料也以引用的形式写在了这篇随笔里,这也真的很耗费时间😤。此外,我还第一次试了博客园页内跳转,收获++。