1.实验内容
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)那些攻击成功了?是如何成功的?
1.2 本周学习内容
1.恶意代码的定义
使计算机按照攻击者的意图运行以达到恶意目的的指令集合。
2.恶意代码的类型
计算机病毒、 蠕虫、特洛伊木马、逻辑炸弹、系统后门、Rootkit、僵尸程序等…
3.恶意代码分析技术
(1)静态分析
通过反病毒引擎扫描识别已知的恶意代码家族和变种名
逆向分析恶意代码模块构成,内部数据结构,关键控制流程等,理解恶意代码的机理,并提取特征码用于检测。
(2)动态分析
通过在受控环境中执行目标代码,以获取目标代码的行为及运行结果。
2.实验过程
2.1恶意代码文件类型标识、脱壳与字符串提取。
2.1.1使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具。
·在kali命令行中使用file指令查看
可以看到,这是一个PE32可执行文件,适用于Ms Windows操作系统,采用Intel 80386架构,包含3个部分。"GUI"表示该文件具有图形用户界面。
·使用PEiD工具查看文件信息。
可以看到,rada.exe文件的加壳工具为UPX。同时,也可以看的文件的入口点、EP段、文件偏移、首字节、连接器版本、子系统等具体信息。
2.1.2使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理
·使用PEiD通用脱壳器对RaDa.exe进行处理。
2.1.3使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁
在kali命令行中输入strings RaDa.exe指令,遗憾的是,由于加壳的原因终端输出全都是乱码,无法识别。
继续对脱壳后的RaDa.exe.unpacked.exe文件使用strings指令,可以看到有一部分的输出已经变成明文。
由于输出过长,我将输出复制到了Strings_unpacked.txt文件中,来查找是否有关于作者的蛛丝马迹。
在208行处发现了两个人的名字:Raul siles && David Perez,很可能是该文件的作者。
2.2使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
2.2.1分析crackme1.exe文件
首先,在命令行运行文件,通过更改参数个数与参数内容的方式来对文件执行的输出规则进行观察猜测。
由此可以发现,在命令行执行参数的个数会对crackme1.exe的输出产生影响。当参数个数为2时,程序输出“Pardon? What did you say?”;否则,程序输出“I think you are missing something.”。但目前,并没有发现参数内容的不同会对输出造成什么影响。
在kali命令行中提取文件可打印字符,可以发现,程序中可能一共存储了“四句话”,有两种我们已经见过——说明程序可能仍有其他输出未被我们实现。
在IDA Pro中也可以看到这“四句话”。
在IDA Pro中依次点击Views -> Graphs -> Function calls,查看程序中函数的调用过程。
可以看到,程序中调用了printf函数打印输出字符串,还使用了strcmp函数,猜测是用于字符串的比对,根据比对结果输出不同内容。根据调用关系,我们需要重点关注main函数的执行逻辑。
查看main函数的地址,在右侧00401280地址main函数处查看流程图(依次点击Views -> Graphs -> Flow chart进入流程图界面)。
分析流程图,进行测试核对结果,可以观察到分析结果与实际运行结果相符。
至此,crackme1.exe分析成功。
2.2.2分析crackme2.exe文件
同上,在命令行运行文件,通过更改参数个数与参数内容的方式来对文件执行的输出规则进行观察猜测。
由此可以发现,文件与crackme1.exe类似。在命令行执行参数的个数会对crackme2.exe的输出产生影响。当参数个数为2时,程序输出“I have an identity problem.”;否则,程序输出“I think you are missing something.”。但目前,并没有发现参数内容的不同会对输出造成什么影响。
在IDA Pro中提取文件可打印字符,可以发现,程序中可能一共存储了“五句话”。接下来打开函数调用界面分析程序的具体执行逻辑。
分析思路与工具使用方法与上文相同,不再赘述。
根据main函数的地址,找到并打开函数调用流程图查看。
通过分析,可以得到以下结论:命令行参数第一个参数为crackmeplease.exe且第二个参数为"I know the secret"时,可以得到最终的输出,于是把crackme2.exe改名为crackmeplease.exe后进行运行
(此处命令行样式变了是因为我用的别的同学电脑进行的本项测试,由于我的电脑中命令行运行文件要输入.\才能运行,此时命令行第一个参数就改变了,无法得出正确结果,所以只能借用同学电脑)
就此我们可以推断出,当第二个参数对比相同后,程序将输出We have a little secret: Chocolate.
至此,crackme2.exe文件分析结束。
2.3分析一个自制恶意代码样本rada,并回答问题
2.3.1提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息
在网站对文件进行摘要,摘要值如下。
https://www.lddgo.net/encrypt/hash (所用网站)
2.3.2 找出并解释这个二进制文件的目的
在虚拟机Windows XP中打开这个程序,于Process Explorer中查看由20222411ada.exe所创建的进程。
双击进程,查看具体信息。仔细观察字符串一栏可以发现不少信息。
->http://10.10.10.10/RaDa 和 RaDa_commands.html表示10.10.10.10下的一个网页。猜测可能会跳转到该网页。
->出现了download.cgi和upload.cgi文件,以及新创建的C:\RaDa\tmp和C:\RaDa\bin路径,猜测可进行上传下载操作,并存到C盘中。实际上在运行RaDa.exe后,C盘中出现了C:\RaDa\tmp和C:\RaDa\bin两个新文件夹。
->HKLM\Software\Microsoft\Windows\CurrentVersion\Run:
这是 Windows 注册表中的一个路径,具体为 "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run"。在这个路径下,存储着系统启动时需要自动运行的程序列表。程序可能对该列表进行了修改。
->出现了“Starting DDos Smurf remote attack...”,猜测可能是会进行DDoS攻击(分布式拒绝服务攻击)。
->对猜测进行验证,打开Wireshark抓包(见上图2),输入筛选条件ip.dst == 10.10.10.10。确实可以发现,虚拟机向10.10.10.10发送了大量TCP包。猜测可能是RaDa.exe想连接10.10.10.10,并访问RaDa_commands.html,并且构成DDoS攻击。
由于出现了--help,推测这些是运行RaDa.exe时可添加的参数。下图执行了20222411RaDa.exe.unpacked.exe --gui命令,进行了验证。
出现了get、put、screenshot、sleep等字段,猜测有使主机截屏、睡眠等功能。
2.3.3识别并说明这个二进制文件所具有的不同特性
->该文件被运行后,会在主机C盘自动创建文件夹,修改注册表,添加自启动项。
->该文件被运行后,可执行put、get、screenshot、sleep等命令。
->该文件被运行后,将请求连接 http://10.10.10.10/ 网页,获得来自攻击者的指令。
->该文件被运行后,会发起DDoS Smurf攻击。
2.3.4识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
由实验第一部分得知,文件使用UPX加壳。
2.3.5对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
该恶意代码不会传播且没有伪装行为与欺骗行为,没有隐藏恶意目标,所以不是木马、病毒以及蠕虫。但这个程序可以获得控制权限,所以我认为它属于后门程序。
2.3.6给出过去已有的具有相似功能的其他工具
实验二中我曾用msfvenom生成过的后门文件Backdoor.exe与该程序的功能类似。
2.3.7可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
可以,作者是Raul Siles和David Perez。在Windows下执行命令20222411Rada_unpacked.exe --authors,即可看到软件的作者。
2.3.8给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。
- 基于特征码的检测方法
原理:基于特征码的检测方法是通过扫描目标文件或内存中的二进制数据,查找与已知恶意软件特征码相匹配的模式。这些特征码通常是恶意软件代码中具有唯一性或代表性的字节序列。
实现方式:使用反病毒软件或恶意软件检测工具,这些工具内置了一个庞大的特征码数据库。当扫描到与数据库中特征码匹配的数据时,即判定为恶意软件。
优缺点:该方法检测速度快、准确率高,但只能检测已知的恶意软件,对于新的或变种的恶意软件可能无法识别。 - 行为监测方法
原理:恶意软件在感染计算机后会表现出一些特殊的行为,如修改系统文件、创建新文件、发送垃圾邮件等。行为监测方法通过分析计算机的行为和操作记录,检测出是否存在这些异常行为,从而判断是否有恶意软件的存在。
实现方式:通过监控系统的关键位置(如注册表、系统文件夹等)以及网络流量,分析异常行为模式,并触发警报或采取相应措施。
优缺点:该方法能够检测未知的恶意软件,但可能会受到正常软件行为的干扰,导致误报。 - 网络流量监测方法
原理:恶意软件通常会通过网络与外部服务器进行通信,传输有害信息或接收远程指令。网络流量监测方法通过监测计算机与外部服务器的网络流量,检测出是否存在恶意通信。
实现方式:使用网络流量分析工具或防火墙,监控并分析进出计算机的网络数据包,识别异常的网络行为或通信模式。
优缺点:该方法能够实时检测网络中的恶意活动,但可能需要较高的技术水平和资源投入。 - 基于签名的检测方法
原理:基于签名的检测方法类似于基于特征码的检测,但它更多地关注于文件的整体结构或特定部分的签名。这些签名可以是文件的哈希值、特定区域的字节序列等。
实现方式:通过计算目标文件的签名,并与已知的恶意软件签名数据库进行比对,从而判断文件是否恶意。
优缺点:该方法能够检测一些变种或加密的恶意软件,但同样依赖于已知的签名数据库,对于新的恶意软件可能无法识别。 - 沙盒模拟方法
原理:沙盒模拟方法将待检测文件置于一个模拟的、可控的虚拟环境中运行,通过分析其行为以及函数调用来判断其是否恶意。
实现方式:使用沙盒技术创建一个隔离的虚拟环境,将待检测文件在其中运行,并监控其行为和函数调用。如果文件表现出恶意行为(如修改系统文件、创建恶意进程等),则判定为恶意软件。
优缺点:该方法能够检测未知的恶意软件,并模拟其在实际环境中的行为。但运行沙盒环境可能需要较高的资源投入,且对于某些复杂的恶意软件可能无法完全模拟其行为。
2.4取证分析实践:Windows 2000系统被攻破并加入僵尸网络
2.4.1IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用哪些TCP端口?
(以下内容部分来自网络资料)
1)IRC 是 Internet Relay Chat 的缩写,是一种实时的互联网聊天协议,允许用户在各种主题的聊天室中进行交流。
2)当 IRC 客户端申请加入一个 IRC 网络时,将发送一条格式为 "PASS
3)IRC服务器明文传输通常在6667端口监听,也会使用 6660—6669 端口。当攻击者滥用IRC构建僵尸网络时,可能使用任意的端口构建IRC僵尸网络控制信道。
2.4.2僵尸网络是什么?僵尸网络通常用于什么?
僵尸网络是由一组被黑客控制的计算机或其他网络连接设备组成的网络。这些设备通常被感染了恶意软件,使黑客可以远程控制它们,而所有这些设备一起形成了一个庞大的网络,被称为僵尸网络。
僵尸网络通常被用于进行大规模的网络攻击,如分布式拒绝服务(DDoS)攻击。在这种攻击中,黑客可以通过僵尸网络向特定目标发送大量的请求,使目标服务器无法正常工作,从而导致服务中断或不可用。此外,僵尸网络也可以被用于发送垃圾邮件、进行网络钓鱼和其他恶意活动。
2.4.3蜜罐主机(IP地址:172.16.134.191)与哪些IRC服务器进行了通信?
在kali虚拟机上打开数据源botnet_pcap_file.dat,选择菜单栏中统计功能,打开Destination and Ports界面。输入筛选条件ip.src == 172.16.134.191 && tcp.dstport == 6667,可查看结果。即共有五台服务器参与了通信,IP地址为66.33.65.58、63.241.174.144、217.199.175.10、209.196.44.172、209.126.161.29。
2.4.4在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
在命令行输入指令tcpflow -r botnet_pcap_file.dat 'host 209.196.44.172 and port 6667',对数据包进行筛选分流。所生成的结果存储与report.xml文件中。
输入该命令即可获得访问以209.196.44.172为服务器的僵尸网络的主机数。
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
对于上述命令的解释:
cat 209.196.044.172.06667-172.016.134.191.01152: 这部分命令尝试从指定的 IP 地址和端口范围读取数据流。
grep --text "^:irc5.aol.com 353": 接着使用 grep 命令来筛选出包含特定模式 ^:irc5.aol.com 353 的行,这表示是 IRC 服务器发送的频道信息。
sed "s/^:irc5.aol.com 353 rgdiuggac @ #x[^x]x 😕/g": 使用 sed 命令来替换行中的特定模式,这样是为了提取有用信息或过滤掉不必要的内容。
tr ' ' '\n' | tr -d "\15": 使用 tr 命令将空格转换为换行符,并删除控制字符。
grep -v "^$": 使用 grep 命令过滤掉空行。
sort -u: 使用 sort 命令对结果进行排序并去重。
wc -l: 最后使用 wc 命令统计行数,计算最终结果的数量。
得到的结果是,共有3461个主机访问过服务器。
2.4.5哪些IP地址被用于攻击蜜罐主机?
输入下述指令,使用tcpdump指令查找与蜜罐主机进行通信的IRC服务器。
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 > ipaddr.txt;wc -l ipaddr.txt
对于上述命令的解释:
tcpdump
:tcpdump是一个开源的网络数据包分析工具,可以在Linux和其他类Unix系统上运行。它可以捕获网络接口上的数据包,并将其显示或保存下来,用户可以使用tcpdump来查看网络流量、分析网络问题、调试网络应用程序等。
-n
: 该选项令 tcpdump
在输出时不要将网络地址转换为主机名。
-nn
: 该选项令 tcpdump
在输出时不要将端口号转换为服务名称。
-r botnet_pcap_file.dat
: 使用 -r
选项指定要读取的数据包文件为 botnet_pcap_file.dat
。
dst host 172.16.134.191
: 这是过滤器规则,指定只输出目标主机地址为 172.16.134.191
的数据包。
awk -F " " '{print $3}'
: 使用 awk
工具,以空格为分隔符,提取每行的第三列,即 IP 地址。
cut -d '.' -f 1-4
: 使用 cut
工具,以 .
为分隔符,仅保留 IP 地址的前四个字段(即前三个点分十进制的部分)。
sort
: 对提取出的 IP 地址进行排序。
uniq
: 去除重复的 IP 地址。
more
: 分页显示结果。
> ipaddr.txt
: 将结果输出到名为 ipaddr.txt
的文件中。
wc -l ipaddr.txt
: 使用 wc
命令统计 ipaddr.txt
文件中的行数,即统计提取出的唯一 IP 地址数量。
打开ipaddr.txt,可以看到所有攻击蜜罐主机的IP地址,共165个。
2.4.6攻击者尝试攻击了哪些安全漏洞?
继续使用tcpdump工具,查看攻击者扫描了哪些TCP和UDP端口,且这些端口是开放的、响应的。
命令如下:
·对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
·对UDP进行筛选: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
结果如图所示,tcp有135、139、25、445、4899、80六个端口,udp有137端口。
2.4.7哪些攻击成功了?如何成功的?
接下来,对以上各个端口进行Wireshark抓包分析。
1)135端口
攻击者仅测试了135端口的开放情况。
2)139端口
可以看到没有异常数据交流。
3)25端口
同135端口,攻击者仅通过TCP三次握手测试了25端口的开放情况。
4)445端口
在该端口的数据流中,我发现了一些端倪。
首先,该端口出现了SVCCTL协议的通信。svcctl漏洞是一个安全漏洞,允许匿名用户连接到Windows服务控制管理器(SCM),进而可以枚举已安装或正在运行的服务。攻击者可以利用这个漏洞来匿名地启动或停止Windows服务,具体的操作取决于服务的安全描述符(Security Descriptor)。这种漏洞会导致安全性问题和系统稳定性问题。
其次,我观察到了psexec.exe的运行。攻击者通过445端口向蜜罐主机发送含PSEXESVC.EXE的数据包,且将PSEXESVC.EXE地址改到系统目录下,最后利用SVCCTL漏洞获取目标主机。下图为蜜罐主机发往攻击主机的数据包。
5)80端口
在80端口的数据包中出现了蠕虫攻击的字段。
3.问题及解决方案
- 问题1:在vmware安装Windows xp系统后,建立共享文件夹无法映射到文件管理器中
- 问题1解决方案:在Windows xp中安装vmtools
- 问题2:分析crackme2.exe后,要验证时,由于我的电脑中命令行运行文件要输入.\才能运行,此时命令行第一个参数就改变了,无法得出正确结果
- 问题2解决方案:借用同学电脑,ta的电脑命令行运行文件直接输文件名即可
4.学习感悟、思考等
各种工具如IDA pro、wireshark确实很强大,这让我们进行网络攻防的时候更加方便快捷。这次实验与以往不同,以往我们做的更多时攻击,这次我们更多的是在做分析和防御。防御确实比攻击难得多,就像分析两个crackme文件一样,是一个解谜游戏,它很复杂,需要你去找到各种蛛丝马迹。同时我也意识到,魔高一尺道高一丈,我们要加强学习,把攻击者抵挡在外。