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系统被攻破并加入僵尸网络
1.2 本周所学
对于恶意代码的分析技术,包括静态分析与动态分析中的快照对比、动态行为监控、网络监控、沙盒、动态跟踪测试等技术的原理,学会使用如PEID、IDA Pro、Process Explorer等一些分析软件,除此之外还有网络扫描与网络踩点(google hacking)的概念及其技术实现。
2.实验过程
2.1恶意代码文件类型标识、脱壳与字符串提取
2.1.1分析rada样本的文件格式、运行平台和加壳工具
在将RaDa.exe文件传入虚拟机后,在虚拟机命令行中输入file RaDa.exe
查看文件基本信息,
PE32 executable:这表明 RaDa.exe 是一个可移植可执行文件(Portable Executable,简称PE)。PE32 表示这是一个32位的PE文件。
GUI:这表示该可执行文件包含图形用户界面(Graphical User Interface),意味着它是一个图形界面程序,而不是命令行工具。
Intel 80386:这表明该文件是为基于Intel 80386微处理器的系统设计的。
for MS Windows:表示该可执行文件是运行在windows系统中的。
3 sections:这表示该可执行文件由三个不同的节(sections)组成。
注:在PE文件中,节是用来组织代码、数据和其他资源的单位。每个节都有特定的属性和用途,例如代码节可能包含程序的可执行指令,数据节可能包含变量和常量等。
此时在虚拟机命令行中输入strings RaDa.exe>
分析目标文件,发现得出的可识别字符串都是乱码,极有可能加了壳。
在PEiD软件中放入下载好的RaDa.exe进行分析
可见,该PE文件已被UPX加壳过。
2.1.2对rada样本进行脱壳处理
将RaDa.exe文件放入脱壳软件中,可得脱壳后的新PE文件RaDa_unpacked.exe,如图
2.1.3利用字符串提取工具对脱壳后的样本进行分析
此时在虚拟机命令行中输入strings RaDa_unpacked.exe>
分析脱壳后的目标文件
可见,部分内容已能被识别,比如图中出现了该PE文件作者?的[c] Raul Siles && David Perez的字符串。
2.2 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息
2.2.1对于crackme1.exe
在将crackme1.exe文件传入虚拟机后,在虚拟机命令行中输入file crackme1.exe
,首先查看文件的基本信息,
可知该文件也是一个32位的PE文件,运行在windows系统上,具有7个节,但非图形界面程序,因此应为命令行工具,
将crackme1.exe文件放入IDA Pro软件中的PE Executable界面,得到图形化反汇编窗口如图,图中我简单标注了窗口的序号,以便区分讲解
可见该程序在实际执行过程中对于所有有效参数存在三种屏幕输出结果,
分别是
- "I think you are missing something.\n"
- "Pardon? What did you say?\n"
- "You know how to speak to programs, Mr. "..
此时我们在主机命令行中测试该程序,并使用不同的输入参数测试该程序的返回值,得到如下结果
此时结合上面我们执行该程序时得到的所有返回值,我们可以得知输出的结果1与2应该不是我们要找的成功输入的返回结果,所以我们的目标即找到能使程序输出结果3的输入参数。
对于所得的图形化反汇编窗口,我们可以发现若要使程序输出结果3,也即成功执行窗口5所代表的代码,那么程序的执行必须经过窗口2,
此时观察窗口2的汇编代码,可知其运行逻辑为
首先获取 arg_4 参数(从窗口1中可知即第一个输入的参数)指向的值,并通过strcmp函数将其与字符串 "I know the secret" 进行比较。如果两者相等,程序将跳转到 loc_401310 标签处继续执行,也就是执行窗口5的代码段。
所以我们应该输入的参数应为I know the secret
吗?
显然不是,正确输入应为"I know the secret"。
若是看不懂汇编代码,此时还有一种方法有助于找到目标参数
按view->Open subviews->Generate pesudocode依次点击导航栏上的图标,
或者直接在显示全程序反汇编结果的主界面(即上面给出的界面)按f5
即可得到反编译c语言代码
从该c语言代码我们同样可知目标参数应为"I know the secret"。
2.2.2对于crackme2.exe
分析过程类似,
此处简化分析过程,直接上反编译结果
可见若要该程序输出目标信息,那么必须满足第一个命令行输入参数为"crackmeplease.exe",第二个参数为"I know the secret",不能出现第三个参数
那么问题来了。我们执行该程序第一个参数比为该程序程序名用以指向该程序,因此对于程序crackme2.exe来说,我们不可能找到目标输出信息,因为其第一个参数必为crackme2.exe
除非我们给程序改名!
于是我们将程序crackme2.exe改名为crackmeplease.exe,以符合目标执行代码执行路线的第一个执行条件,同时让crackmeplease.exe作为第一个参数的情况下能让该程序正常运行。
于是我们输入在命令行中输入"crackmeplease.exe" "I know the secret"
事实证明,crackmeplease.exe可以不加双引号。
2.3 分析一个自制恶意代码样本rada,并撰写报告
2.3.1提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息
在虚拟机命令行中输入file RaDa_unpacked.exe
查看脱壳后RaDa文件的基本信息。
可以得到这一程序是32位的运行在windows系统上的图形界面PE文件,支持80386指令集,由4个不同的节组成。
再于虚拟机中输入md5sum RaDa_unpacked.exe
获取该程序的md5哈希值,由图可知为847c2a1dcfe8347afd8cf76d99217c5b
2.3.2找出并解释这个二进制文件的目的
将脱壳后的RaDa文件拖入IDA中,查看其反汇编代码,我们可以发现该程序在运行中会执行这几个可疑的操作
比如
中出现了这些字符串
http://10.10.10.10/RaDa
:这是一个URL,可能用于与远程服务器通信。
RaDa_commands.html
、cgi-bin
、download.cgi
、upload.cgi
:顾名思义,这些字符串可能与Web服务或脚本相关,用于执行命令、下载或上传文件。
C:\RaDa\tmp
、C:\RaDa\bin
:这些是文件路径,可能用于存储临时文件或可执行文件。
HKLM\Software\Microsoft\Windows\CurrentVersion\Run
:这是一个Windows注册表路径,通常用于设置程序在系统启动时自动运行。
是不是觉得一条一条查反汇编代码太过繁琐了?
其实我们还可以直接点击运行RaDa_unpacked.exe,此时程序会跳出一个弹窗,不要关闭或确认,保证该进程处于执行的状态。
然后打开ProcessExplorer程序,查找RaDa_unpacked.exe的进程,然后双击该进程,点击弹出的文件导航栏中的strings。
即可直接过滤掉其他的代码,快速发现文件中一些可以字符串的汇总了。
注:kali虚拟机命令行中的strings工具实际上不能识别出那么多PE中展示出的字符串。
可见,除了上述通过IDA反汇编分析出的那些可疑操作外,还有
Starting DDoS Smart remote attack...
:表明程序可能涉及到分布式拒绝服务攻击(DDoS)
Vscript.Shell、RegWrite、RegRead、RegDelete
:这些与Windows脚本宿主和注册表操作有关,后门程序可能会使用这些功能来执行命令或修改系统设置。
--gui、--invisible、--noinstall
:这些参数可能用于控制程序的可见性和安装行为,以避免被用户发现
经验证,对于该程序确实存在一些控制参数或者说指令。比如在命令行中输入RaDa.exe --authors
执行带--authors参数的RaDa程序时,程序会弹出显示作者信息的一个窗口。
在C:\RaDa\bin、C:\RaDa\tmp路径上确实生成了相关文件夹,甚至C:\RaDa\bin路径下还生成了一个新的RaDa.exe文件。
综上,这些可疑的字符串表明程序可能会执行包括网络通信、文件操作、注册表修改、命令和控制、脚本执行等操作,而这些都是后门程序的典型特征。因此,我们可以合理推断这段代码属于一个后门程序,或者说是一个后门程序的一部分。
2.3.3识别并说明这个二进制文件所具有的不同特性
结合2.3.2
我们可知该程序具有如下特性
远程通信能力:程序可能具备与远程服务器通信的能力。
远程Web服务交互:程序可能与Web服务交互,执行服务器传来的命令、下载文件或上传数据。
文件系统操作:程序可在本地文件系统中创建或操作文件,用于存储临时数据或可执行文件。
自动启动能力:程序可能修改注册表以实现在系统启动时自动运行。
脚本执行修改系统配置:Vscript.Shell、RegWrite、RegRead、RegDelete 表明程序可能执行某些脚本或修改系统配置。
潜在的DDoS攻击能力(没试过):程序可能具备发起分布式拒绝服务攻击的能力。
2.3.4识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
主要是upx压缩壳操作,使得在未被脱壳前程序被分析的结果是被压缩的代码,无法准确静态识别程序的功能特点与执行目标。
2.3.5对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
既非病毒也非蠕虫,实为后门程序。
因为其不表现出大量自我复制与传播的特点,仅仅在c盘目录下生成一个RaDa文件夹与相关程序文件,没有主动向其他主机或在宿主机的其他位置大量复制,不属于蠕虫与病毒
没有伪装成一个正常的程序,不属于木马
能够不依附于宿主机独立运行,接受远程指令进行操作,所以属于后门程序。
2.3.6给出过去已有的具有相似功能的其他工具
在实验二中使用的msf工具,用于生成后门程序获取目标主机的某些权限。
2.3.7可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
可以,在前面的步骤中已经查到了该程序的作者,比如在kali虚拟机中通过strings分析,还有通过IDA反汇编查找、以及PE中字符串的提取这三种方式均可获取开发作者的名字。
当然上述方式都是有条件的的
- 该文件并未被加壳压缩或加密处理
- 作者确实在程序中留下自己的信息
2.3.8给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法
基于特征码的检测:
这种方法依赖于已知恶意软件的特征码或签名(特征码是一段独特的二进制代码,通常与恶意软件的行为或结构相关联)。安全软件会将扫描到的文件与数据库中的特征码进行比对,以识别已知的恶意软件。
启发式分析:
启发式分析通过分析程序的行为模式来识别恶意软件。也就是说这种方法不依赖于已知的特征码,而是根据一系列规则来判断程序是否表现出恶意行为。
行为监控和分析:
这种方法通过监控程序在系统上的实时行为来检测恶意活动。这包括文件的创建、修改、删除,网络连接的建立,以及对系统资源的访问等。
静态代码分析:
静态代码分析是在不运行程序的情况下,通过分析程序的源代码或二进制代码来识别潜在的恶意行为。这包括检查代码中的可疑模式、函数调用、API使用等。
动态链接库(DLL)注入和API钩子检测:
这种方法通过监控程序对DLL的加载和API调用来检测恶意行为。因为恶意软件经常通过注入DLL或挂钩API来隐藏其活动或篡改系统功能。
2.4 取证分析实践
2.4.1IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
IRC是Internet Relay Chat的缩写,意为互联网中继聊天,是一种允许用户通过互联网进行实时文本交流的协议。
其中IRC网络由多个服务器组成,这些服务器相互连接,形成一个大型的聊天网络。用户可以通过IRC客户端软件连接到IRC服务器,加入不同的聊天室(也称为频道)进行交流。
IRC通常使用TCP端口6667进行通信。
然而,由于6667端口可能会被网络防火墙或路由器阻止,IRC服务器也可能使用其他端口,如6660到6669,或者使用动态端口。
2.4.2僵尸网络是什么?僵尸网络通常用于什么?
僵尸网络(Botnet)是由多个受感染的计算机、设备或服务器组成的网络,这些设备通常被称为“僵尸”或“肉鸡”(Bots)。这些僵尸设备被恶意软件(通常称为僵尸程序或Bot程序)控制,而设备的所有者通常并不知情。僵尸网络的控制者,也被称为Botmaster,可以远程指挥这些设备执行各种操作。
僵尸网络通常用于以下目的:
-
分布式拒绝服务攻击(DDoS):攻击者可以指挥大量僵尸设备同时向目标服务器发送请求,导致服务器过载,从而无法正常服务合法用户。
-
垃圾邮件发送:僵尸网络可以被用来发送大量的垃圾邮件,这些邮件可能包含恶意链接或附件,用于传播更多的恶意软件或进行网络钓鱼。
-
数据窃取:僵尸程序可以窃取设备上的敏感信息,如登录凭证、财务信息、个人数据等,并将这些信息发送给攻击者。
-
点击欺诈:僵尸网络可以被用来模拟点击广告,从而为攻击者或其同伙产生不正当的广告收入。
-
恶意软件分发:僵尸网络可以被用来分发更多的恶意软件,如勒索软件、键盘记录器、间谍软件等,以进一步扩大僵尸网络的规模。
-
网络钓鱼:僵尸网络可以被用来创建钓鱼网站或发送钓鱼信息,诱使用户泄露敏感信息。
2.4.3对于botnet_pcap_file.dat文件,其中蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
首先将botnet_pcap_file.dat文件以wireshark打开,
在过滤拦输入ip.addr==172.16.134.191&&tcp.dstport==6667
用来过滤出有关ip为172.16.134.191,且目的端口有关6667的报文。
可见蜜罐主机与
- 209.126.161.29
- 66.33.65.58
- 63.241.174.144
- 217.199.175.10
- 209.126.161.29
这5个irc主机进行了通信
再由guolv条件ip.src==172.16.134.191&&irc
所得的结果,蜜罐主机只发送了三次(NICK USER)报文,只建立起了一个irc通信,我们可知,
蜜罐主机首先向5个irc服务器发送tcp请求试图建立irc通信,但只有
- 63.241.174.144
- 217.199.175.10
- 209.126.161.29
这3台服务器在线并作出回应,而最终只有
209.126.161.29服务器成功与蜜罐主机建立irc通信。
2.4.4在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
首先我们将botnet_pcap_file.dat传入虚拟机中,此时我将其更名为botnet_pcap_file20222319.dat,
然后在虚拟机命令行中输入apt-get install tcpflow
下载tcpflow工具
咱后通过指令tcpflow -r botnet_pcap_file20222319.dat "host 209.196.44.172 and port 6667"
从目标文件中提取所有与IP地址 209.196.44.172 相关的,并且使用TCP端口 6667 的TCP流,然后将这些流重构为单独的文件。
此时在当前目录下生成了一个report.xml和两个网段记录
由于我们需要知晓多少不同的主机访问了以209.196.44.172为服务器的僵尸网络,所以此处我们选择对文件209.196.044.172.06667-172.016.134.191.01152进行操作。
即在命令行中输入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
其中:
cat 209.196.044.172.06667-172.016.134.191.01152
用cat工具制定一个待处理文件
grep -a "^:irc5.aol.com 353"
grep 命令用于搜索文件中的模式。-a 选项表示同时处理文本和二进制文件。这里的正则表达式 "^:irc5.aol.com 353" 匹配以 irc5.aol.com 开头,后跟空格和数字 353 的所有行,降负荷条件的行保留,其余丢弃。
sed "s/^:irc5.aol.com 353 rgdiuggac @ #x[^x]*x : //g"
sed 命令用于对文本进行模式空间的替换。这个命令中的替换表达式 s/^:irc5.aol.com 353 rgdiuggac @ #x[^x]*x : //g 用于删除以 # 开头,后跟任意字符(除了 x),直到再次出现 x 的字符串。
tr ' ' '\n'
用于将所有空格替换为换行符。
tr -d "\15"
用于删除所有回车。
grep -v "^$"
用于删除空行。-v 选项表示反向选择,即选择不匹配的行。
sort -u
sort 命令用于对结果进行排序,-u 选项表示去除重复行。
wc -l
wc 命令用于统计结果有几行,-l 选项表示只显示行数。
最终结果显示共有3461台主机访问了以209.196.44.172为服务器的僵尸网络
2.4.5哪些IP地址被用于攻击蜜罐主机?
在虚拟机命令行中输入tcpdump -n -nn -r botnet_pcap_file20222319.dat 'dst host 172.16.134.191' | awk -F " " '{print $3}' | cut -d '.' -f 1-4 | sort | uniq | more > 20222319.txt;wc -l 20222319.txt
可知共有165个IP地址被用于攻击蜜罐主机。
2.4.6攻击者尝试攻击了那些安全漏洞?
在wireshakes的导航栏中依次点击统计->协议分析,进入下述界面。
可知在这一次攻击过程中主要通过tcp(99.7%)进行通信,极少通过udp(0.3%)进行通信。
然后我们再于虚拟机中输入tcpdump -r botnet_pcap_file20222319.dat -nn 'src host 172.16.134.191 and tcp[tcpflags]== 0x12' | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq
筛选出tcp通信过程中涉及的所有端口。
可知,涉及的端口有135(RPC远程过程调用)、139(NetBIOS/SMB)、25(SMTP简单邮件传输协议)、445(SMB windows共享)、4899(Radmin远程控制)、80(HTTP)
同理,对于udp,则有tcpdump -r botnet_pcap_file20222319.dat -nn 'src host 172.16.134.191' and udp | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq
仅有一个137(NetBIOS)端口。
2.4.7那些攻击成功了?是如何成功的?
接下来我们逐一对这些端口进行排查。
-
137端口
在wiresharks过滤条件中输入ip.dst==172.16.134.191&&udp.port==137
图中显示对于蜜罐主机,其他主机一直在尝试解析其基于NetBIOS的计算机名称,但一直无回应,不过也没有明细的越界恶意行为,因此应该不存在攻击。 -
135
在wiresharks过滤条件中输入ip.dst==172.16.134.191&&tcp.port==135
结果显示仅仅是进行了一次tcp连接。 -
139
同理,过滤条件为ip.dst==172.16.134.191&&tcp.port==139
并无明显异常,是正常的tcp、smb行为。 -
25
同理,过滤条件为ip.dst==172.16.134.191&&tcp.port==25
同样只是正常的tcp连接过程。 -
445
同理,过滤条件为ip.dst==172.16.134.191&&tcp.port==445
61.111.101.78向蜜罐主机发送了PSEXESVC.EXE。其中PSEXESVC.EXE作为PsExec服务的一部分,允许用户远程执行命令或运行程序,也可以应用于攻击,因此很有攻击的嫌疑,不过最后PSEXESVC.EXE也被删除了。 -
4899
同理,过滤条件为ip.dst==172.16.134.191&&tcp.port==4899
可见其具有大量的PSH包,具有很大的攻击嫌疑
但最重要的是下面这一段
第四个数据包是一个HTTP HEAD请求,尝试访问 /cgi-bin/../../../../../winnt/system32/cmd.exe?/c+dir。这是一个典型的目录遍历攻击尝试,攻击者试图访问系统目录下的文件。 -
80
同理,过滤条件为ip.dst==172.16.134.191&&tcp.port==80
具有缓冲区溢出性质与目录遍历攻击性质的攻击表现。
3.问题及解决方案
- 问题一:在查阅资料后发现IDA可以通过一次点击view->Open subviews->Generate pesudocode进行反编译,但在实际程序中并无次功能。
- 解决问题:原因是一开始我用的是直接在学习通上下载的旧版IDA,并不支持反编译功能,因此在官网下载最新版即可。
4.学习感悟、思考等
本次实验的确不难,网络上资料很充裕,如包括何通过tcpflow过滤包、如何分析攻击报文、IDA反编译如何操作等等,基本上也是一个复现实验。
本次实验我认为最大的收获就是掌握了使用PEiD、IDA、PE、脱壳软件等等工具,并且学会了通过tcpflow工具切分捕获的包,再利用cat对文档进行二次处理的过程。