1.实验内容
1.1本周学习内容
本周学习了恶意代码分析的基本方法,静态分析和动态分析的核心概念。静态分析主要通过代码结构和API调用等特征来识别恶意行为,动态分析则使用沙箱等环境运行代码,观察其行为。
通过实验学习了IDA Pro和Process Monitor等工具的基本操作。
1.2实践内容
- 恶意代码文件类型标识、脱壳与字符串提取
- 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
- 分析一个自制恶意代码样本rada,并撰写报告,回答问题
- 取证分析实践Windows 2000系统被攻破并加入僵尸网络
2.实验过程
2.1恶意代码文件类型标识、脱壳与字符串提取
对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具
===
1).PE32
Microsoft Portable Executable(PE)格式的32位可执行程序,是为Windows操作系统设计和运行的;
2).4.00 (GUI)
表示Windows NT 4.0 / Windows 95 的操作系统版本,指明了程序所需的Windows子系统版本;
3).Intel i386
表明该二进制文件编译的目标平台是Intel 80386或兼容的32位x86处理器架构,它可以在任何32位或64位的x86 Windows系统上运行;
4).3 sections
表示这个可执行文件内部被划分成了三个主要的节区。
使用PEid分析结果如下图

由图可知:
1).文件已加壳
工具明确检测到该文件使用了UPX加壳器
2).加壳版本信息
工具识别出的版本范围是:0.89.6-1.02/1.05-2.90
作者是Markus&Laszlo
3).文件基础信息
入口点:0000FD20(这是程序执行开始时,操作系统会跳转到的地址)
连接器版本:6.0(通常是编译该程序时使用的链接器版本)
子系统:Win32 GUI(图形用户界面程序)
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理

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

可以看到作者是Raul Siles && David Perez
2.2使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息
对crackme1.exe进行分析
在IDA Pro中打开文件crackme1.exe,依次点击View->Graphs->Function calls,打开该文件的函数调用图

为了得到正确的输出,我们要找正确的输入,重点关注fprintf和printf,在上方工具栏中打开Windows->Functions,打开函数管理工具,因为fprintf和printf在sub_401280函数下,所以查看sub_401280

观察函数流程图,输入参数数量不为2时,程序输出“I think you are missing something.”,输入参数数量为2时,如果第二个输入为“I know the secret”,程序输出“You know how to speak to programs, Mr. Reverse-Engineer”,否则输出“Pardon? What did you say?”,所以我们需要输入的第二个参数为“I know the secret”

按照我们分析得出的结论进行输入
由运行结果可以看出我们的分析是正确的
对crackme2.exe进行分析

找到sub_401280


由运行流程图看出,crackme2除了需要crackme1所要求的两个输入、第二个是“I know the secret”外,还对输入的第一个参数要求为“crackmeplease.exe”,说明我们需要将该文件的文件名修改为crackmeplease.exe再运行
将文件名修改为crackmeplease.exe后运行输入第二个参数“I know the secret”后得到正确输出
2.3分析一个自制恶意代码样本rada,并撰写报告,回答以下问题
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息
在虚拟机中输入以下命令
file RaDa.exe
md5sum RaDa.exe计算文件的MD5哈希值
sha256sum RaDa.exe计算文件的SHA-256哈希值
exiftool RaDa.exe | grep "Time Stamp"找出该可执行文件的编译时间戳
rada文件的MD5摘要为:caaa6985a43225a0b3add54f44a0d4c7
SHA-256摘要为:13c2379e9d9f679396e21a3391804cc834892f25691381b6d078d07b56d38f90
编译时间戳为2004年10月29日 19:59:58
(2)找出并解释这个二进制文件的目的;
在IDA Pro中分析脱壳后的RaDa文件(也是区别于前面两个简单的crack乱如麻了),选择这个sub_404FB0函数进行突破

打开sub_404FB0

命令mov edx, offset aHttp10_10_10_1;"http://10.10.10.10/RaDa",是将地址http://10.10.10.10/RaDa 加载到edx寄存器,地址10.10.10.10很可能是攻击者的命令控制服务器



mov edx, offset aCRadaBin; "C:\RaDa\bin"恶意代码将在这个路径下存放其相关文件和副本
后面这段代码将工作目录C:\RaDa\bin和可执行文件名RaDa.exe拼接起来,形成其自身的完整路径 C:\RaDa\bin\RaDa.exe,将拼接得到的完整路径"C:\RaDa\bin\RaDa.exe"写入注册表启动项
(3)识别并说明这个二进制文件所具有的不同特性
该二进制文件是一个功能完整的、具有典型后门特征的恶意软件,它通过 UPX 加壳进行保护,在系统中建立固定工作目录,并利用注册表实现自启动,其核心功能是通过HTTP协议与C&C服务器进行通信,执行文件上传、下载和命令接收,从而使攻击者能够远程完全控制受感染的主机
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
1).使用UPX加壳
2).采用运行时字符串构建和间接函数调用
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
该恶意程序为后门程序,其核心目的是为攻击者提供对受感染主机的远程控制能力,支持命令执行、文件上传和下载。它不具备病毒或蠕虫的自我复制和自动传播特性。
(6)给出过去已有的具有相似功能的其他工具
Back Orifice、灰鸽子、Sub7等
(7)可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下
在上面使用的字符串工具识别出作者是Markus&Laszlo,因为作者在创作时就留下这样的信息,我们在脱壳后利用分析工具可得到
(8)给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法
1).基于特征码的检测
通过比对文件中的特征码与已知恶意软件的特征库来进行识别
以RaDa为例,将文件的MD5或SHA-256哈希值与恶意软件数据库中的记录进行比对可以发现它是一个恶意代码
2).启发式行为检测
通过分析代码的结构、指令序列和行为模式,监控程序运行时是否执行了可疑行为序列来判断其是否恶意
以RaDa为例,检测到其在C:\根目录下创建RaDa文件夹及其子目录,修改HKEY_LOCAL_MACHINE...\Run注册表项以实现自启动,尝试连接远程服务器的cgi-bin目录,并访问RaDa_commands.html、upload.cgi、download.cgi等特定文件来判定其属于恶意代码
3).网络流量检测
通过监控网络流量,寻找与已知恶意软件通信模式相匹配的异常连接或数据交换
以RaDa为例,与一个已知的恶意IP地址或域名(即RaDa的C&C服务器)建立HTTP连接,检测HTTP请求中是否包含特定的URI路径来判断其是否是一个恶意程序
4).文件系统与注册表监控
实时监控系统关键位置的文件和注册表项的创建、修改和删除操作
检测到RaDa尝试在C:\根目录下创建名为RaDa的文件夹进行报警
5).内存分析检测
在恶意软件运行后,通过分析系统的物理内存或镜像,来寻找其中残留的恶意代码、字符串或网络连接痕迹
检测到RaDa.exe进程,检查网络连接,寻找与C&C服务器建立的连接
2.4取证分析实践
(1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
IRC是什么?
IRC是一种应用于互联网的实时文本通信协议,主要用于群体聊天,但也支持一对一的私人对话,采用客户端-服务器模型。用户使用IRC客户端软件连接到IRC服务器。多个服务器可以互联形成一个IRC网络
当IRC客户端申请加入一个IRC网络时将发送哪个消息?
申请加入网络时发送的核心消息是NICK和USER,而申请加入一个特定频道时发送的消息是JOIN
IRC一般使用哪些TCP端口?
6667:这是最常用、默认的IRC端口
6660-6669:这是一系列传统的IRC端口,因为早期一些系统限制使用低于1024的端口
6697:现代IRC网络通常使用此端口用于SSL/TLS加密连接
(2)僵尸网络是什么?僵尸网络通常用于什么?
僵尸网络是什么?
僵尸网络是由一台或多台命令与控制服务器集中控制的大量被恶意软件感染的互联网设备组成的网络,控制整个网络的黑客或犯罪组织可以同时向网络中的所有或部分被感染的设备下发指令,让它们协同完成复杂的任务,被感染的设备对此并不知情
僵尸网络通常用于什么?
主要用处有分布式拒绝服务攻击、发送垃圾邮件和网络钓鱼、窃取敏感信息、分发其他恶意软件等
(3)蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?


将文件botnet_pcap_file.dat在wireshark中打开,搜索ip.src172.16.134.191 and tcp.dstport6667,筛选源IP为172.16.134.191,目的端口为6667的数据包,分析蜜罐主机与IRC服务器的通信,5台通信的IRC服务器的IP分别是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为服务器的僵尸网络?
在kali虚拟机中安装tcpflower,输入命令sudo apt-get install tcpflow

检查是否成功安装

使用命令tcpflow -r botnet_pcap_file.dat “host 209.196.44.172 and port 6667从botnet_pcap_file.dat文件中提取出目标服务器为209.196.44.172、端口6667的TCP流量,并拆分为独立文件

执行后tcpflow生成report.xml,还会生成独立的TCP连接流文件,其文件名格式为:源IP.源端口—目的IP.目的端口

使用命令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,统计访问了僵尸网络服务器的不同客户端数量

统计出共有3461台不同的主机访问了以209.196.44.172为服务器的僵尸网络
(5)哪些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 > 202324425liurunmin;wc -l 20232425hxymiguan.txt从botnet_pcap_file.dat文件中,找出所有向172.16.134.191发送数据包的IP,保存并统计其数量
打开保存的txt文件


可以看到一共有165个主机攻击
6)攻击者尝试攻击了那些安全漏洞?
在kali虚拟机中输入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看到TCP目标端口

在kali中输入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看到UDP目标端口号

(7)那些攻击成功了?是如何成功的?
在wireshark中分析,依次查看上面的TCP和UDP端口
1).ip.addr172.16.134.191 &&tcp.port135

三次握手连接已建立,但是很快中断,后续无包,攻击失败
2).ip.addr172.16.134.191 &&tcp.port139

主机向多个目标发起139端口连接请求时,主机主动发送RST包中断连接,攻击失败
3).ip.addr172.16.134.191 &&tcp.port25

完成三次握手连接但是也很快断开,攻击失败
4).ip.addr172.16.134.191 &&tcp.port445


攻击者在直接登录SMB服务失败后,转而利用系统配置弱点,通过无需密码的“空会话”成功连接至管理共享,并进一步绑定了系统的用户账户管理服务(SAMR),是一次成功的攻击
5).ip.addr172.16.134.191 &&tcp.port4899

攻击者成功连接到了后门,从蜜罐主机回传了数量巨大的数据,是一次成功的攻击
6).ip.addr172.16.134.191 &&tcp.port80


攻击者对蜜罐80端口的访问,完整模拟了一次正常的网页浏览行为:建立连接、请求首页、加载图片资源并关闭连接,期间未尝试任何漏洞利用或未授权访问。所以我认为这然是一次正常的网页访问会话,并不是一次成功的攻击。
7).ip.addr172.16.134.191&& udp.port137

这些全部是NBSTAT查询包,目前没有攻击
总结:攻击成功的只有TCP455端口和4899端口
3.问题及解决方案
- 问题1:在进行crackme2文件的破解时,修改文件名并传入参数还是无法正常解决
- 问题1解决方案:最简单的解决方法就是用cmd,因为powershell的命令在传入时会在运行的文件名前自动加上路径导致匹配不通过,使用cmd就可以解决这个问题
4.学习感悟、思考等
在本次学习实践中,我初步掌握了若干壳检测与脱壳工具的使用方法,并借助file命令与strings命令对恶意文件进行静态分析,同时也尝试使用IDA Pro工具进行逆向分析与代码审计。这些高效而专业的工具,极大地辅助了我理解恶意代码的结构与行为逻辑。
此外,我还开展了网络数据取证分析的实际操作,亲身体验了僵尸网络构建及其攻击流程的各个环节。通过本次实验,我不仅加深了对恶意代码分析与网络安全取证技术的理解,也更加认识到在攻防对抗中细致观察与逻辑推演的重要性。
在接下来的学习中,我希望能够持续提升自己在恶意代码分析及网络取证方面的实操能力,进一步夯实基础,努力学好网络与系统攻防这门课程。
浙公网安备 33010602011771号