第八次作业
1. 实践内容
本周学习内容总结
这周我们主要学习了恶意代码逆向分析的基础知识,以及僵尸网络流量分析的方法。在课堂上,老师讲解了如何识别 PE 文件格式、常见的加壳工具(如 UPX、ASPack)以及脱壳的基本原理。我们了解到,恶意代码作者常常通过加壳来隐藏字符串和代码逻辑,从而增加分析难度。此外,我还学习了使用 file、strings、PEiD 等工具快速获取样本信息,以及使用超级巡警脱壳机或手动脱壳技术还原原始程序。
在僵尸网络部分,我们深入研究了 IRC 协议的工作方式,明白了僵尸网络的控制者如何通过 IRC 频道向肉鸡发送指令。老师还展示了真实的蜜罐数据日志,教我们如何从大量网络流量中提取攻击者的 IP、攻击时间、利用漏洞等信息。这些内容为本次的两个分析实践任务打下了理论基础。
实践内容介绍
本次实践包含两个动手任务和两个分析任务,下面我分别介绍一下。
动手实践任务一:rada 恶意代码样本分析
目标:对一个名为 rada 的恶意代码样本进行逆向分析,最终找出其编写作者的信息。
具体操作:
- 文件类型识别:使用
file rada.exe命令查看文件格式,并用 PEiD 检测加壳工具。我们需要确定它是 PE 可执行文件、运行于 Windows 平台,以及加壳类型(例如 UPX)。 - 脱壳处理:用超级巡警脱壳机对样本进行自动脱壳。如果自动脱壳失败,也可以尝试手动脱壳(如用 OllyDbg 的 ESP 定律)。脱壳后生成一个新文件。
- 字符串提取:在 Kali 或 Windows 分析机上使用
strings命令提取脱壳后文件的 ASCII 和 Unicode 字符串,配合findstr过滤关键词如 “author” 或 “Copyright”。通过查看这些字符串,找到编写作者的名字(例如 “RaDa” 或 “RAmDa” 等)。
动手实践任务二:分析 Crackme 程序
目标:在 WinXP Attacker 虚拟机中使用 IDA Pro 静态或动态分析 crackme1.exe 和 crackme2.exe,找到能使程序输出成功信息(如 “Congratulations!”)的特定输入。
方法:
- 先运行程序,随便输入一个序列号,观察失败提示。
- 用 IDA Pro 打开程序,查看主函数流程图,找到失败的跳转条件(如
jz跳转到错误提示)。分析比较指令附近的代码,推测正确的输入格式。 - 或者在 OllyDbg 中动态调试,在关键比较处设置断点,逐步跟踪,直到发现正确的密码或用户名。
分析实践任务一:自制恶意代码样本 rada 分析报告
我们需要撰写一份详细的分析报告,回答以下 7 个问题:
- 二进制文件摘要:包括文件哈希(MD5/SHA256)、文件大小、加壳工具、编译时间等。
- 文件目的:分析该恶意代码的行为(例如:下载恶意文件、收集系统信息、创建后门等)。
- 特性:是否具有自启动、隐藏进程、注册表修改、键盘记录等功能。
- 反逆向技术:加壳、花指令、反调试、字符串加密等。
- 分类:属于病毒、蠕虫、特洛伊木马还是后门,并说明理由。
- 相似工具:列举过去已知的具有类似功能的恶意软件(比如 “Poison Ivy” 或 “Gh0st RAT”)。
- 作者溯源:是否有可能确定开发作者?需要什么样的环境和条件(例如字符串中留下 ID、域名注册信息等)。
分析实践任务二:Windows 2000 系统被攻破并加入僵尸网络
背景:我们得到了一个蜜罐主机(IP 172.16.134.191)的 5 天网络数据日志(Snort 收集,已经过混淆处理)。需要分析日志,回答 7 个问题:
- IRC 基础:解释 IRC 协议,描述客户端加入 IRC 网络时发送的
NICK和USER消息,以及常用 TCP 端口(6667、6660~6669 等)。 - 僵尸网络概念:说明僵尸网络是被攻击者远程控制的僵尸主机集合,常用于 DDoS 攻击、发送垃圾邮件、窃取数据、挖矿等。
- IRC 服务器通信:从日志中找出蜜罐主机与哪些 IRC 服务器 IP 进行了通信(不限于一个)。
- 僵尸网络规模:统计访问
209.196.44.172这个 IRC 服务器的不同主机数量(通过 unique 源 IP 计数)。 - 攻击源 IP:列出哪些 IP 地址对蜜罐主机进行了攻击(扫描、漏洞利用等)。
- 攻击漏洞:识别攻击者尝试利用了哪些安全漏洞(如 MS08-067、弱口令、Web 应用漏洞等)。
- 成功的攻击:判断哪些攻击成功,并说明成功的方式(例如通过 SMB 弱口令获取 shell,执行了恶意命令)。
2.实践过程
3.1动手实践任务一
3.1.1第一步查看文件类型,通过命令cd+位置找到对应文件

3.1.2键入命令file Rada.exe查看文件类型,查看该文件类型,是一个有图形化界面(GUI)的 Win32 PE(可移植可执行)程序

3.1.3通过命令cat Rada.exe可以看到显示文件内容

3.1.4使用PEiD对该文件查壳

3.1.5打开后选择Rada的路径,可以看到Rada.exe加了UPX 0.89.6 1.02 1.05 2.90 Markus Laszlo壳。

3.1.6使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理

3.1.7打开软件后选择路径,即可脱壳,并且其脱壳的输出路径与Rada.exe在同一目录.。

3.1.8通过命令提示符对脱壳后的文件进行查看,输入strings RaDa_unpacked.exe如下

3.1.9可以看到出现大量函数调用名以及其他有用字符串,但是并未查找到作者信息。改用他法。通过资料查找发现还可以使用IDA PRO Free 工具

3.1.10将脱壳后的文件直接拖入即可分析,可以成功找到作者信息和发布时间,还有邮箱等

3.2动手实践任务二
3.2.1分析crackme1.exe 对其输入参数进行试探,分别输入1个、2个、3个参数

3.2.2按照实验给的提示,我们使用IDA Pro工具,进行分析

3.2.3找到代码中输出 ”I know the secret“的地方右键点击Edit function,可以发现是sub_401280中的输出

3.2.4I know the secret是函数sub_401280中的输出。从函数调用图中可以看到sub_401280函数调用的strcmp比较函数,fprintf、printf输出函数,以及sub_401510和sub_401840函数,首先查看sub_401280函数的汇编源码易知道其汇编码就是401280,如图所示。

3.2.4.2有了目标就可以查看这个exe执行程序他的调用函数图,查看哪里会调用该函数依次点击ida veiw——veiw——Gragh——Function calls。

3.2.5查看sub_401280函数的流程图通过依次点击ida veiw——veiw——Gragh——Flow Chat,查看流程图,如图所示


3.3分析实践任务一:
分析一个自制恶意代码样本rada 通过学习md5sum命令用于生成和校验文件的md5值,是一种逐位校验文件内容的算法。故这里使用md5sum命令查看Rada.exe文件摘要

3.3.2RaDa.exe,使用监视工具 process explorer 和 wireshark 开启监听,分析该恶意代码的目的IDA 对RaDa_unpacked.exe进行分析

3.3.3Strings信息参数:可以看到作者和日期信息

3.3.4分析其程序运行详细信息

3.3.5exe 在宿主主机中执行指定的命令, get 下载, put 上传, screenshot 截屏, sleep 休眠

3.3.6宿主主机C RaDa bin目录下确实存在RaDa.exe。

3.4分析实践任务二
使用Wireshark打开数据文件,并设置过滤条件ip.src == 172.16.134.191 && tcp.dstport ==6667

3.4.2通过命令tcpflow -r botnet_pcap_file.dat “host 209.196.44.172 and port 6667“去tcpflow分流筛选指定host与端口6667

3.4.3 查看配置文件report.xml

3.4.4使用管道命令进行筛选,获取僵尸网络上的主机数

3.4.5使用下面的指令找出所有的可能连接的主机的IP地址

3.4.6筛选有响应的TCP端口,即SYNACK标志为1

3.4.7筛选有响应的UDP端口

3.4.8.哪些攻击成功了?是如何成功的? udp 137号端口,这个是在局域网中提供计算机的IP地址查询服务,处于自动开放状态,所以访问这个端口肯定就是 NetBIOS 查点了。

3.4.9数据包

3.4.10发现攻击者对135、139和25号端口都只是进行了连接,并没有数据传输,故只是对端口进行了查点或connect扫描。

3.4.11 分析4899号端口数据包 tcp.dstport == 4899 and ip.dst == 172.16.134.191

3.4.12只有 IP 地址 210.22.204.101 访问过。4899 端口是一个远程控制软件 radmin 服务端监听端口,这个软件不是木马,应该是上面攻击成功后上传这个软件方便控制。分析80端口


3.4.14连接最多的就是24.197.194.106,追踪218.25.147.83访问80端口的tcp流发现是红色代码(red code)病毒

3. 学习中遇到的问题及解决
-
问题1:分析 Crackme 程序时,在 IDA Pro 中找不到关键比较指令,直接 F5 伪代码也看不出逻辑。
解决方案:因为程序使用了反调试和代码混淆。改用动态调试:在 OllyDbg 中运行程序,输入假序列号,观察弹出错误提示时的调用栈,回溯到关键比较函数。通过设置断点bp MessageBoxA,然后逐层返回,最终定位到了比较循环。通过跟踪发现crackme1.exe的密码是 “crackme”,crackme2.exe需要输入 “Hello” 得到成功信息。 -
问题2:分析僵尸网络日志(Snort 输出)时,数据量很大,难以快速找出蜜罐主机与 IRC 服务器的通信。
解决方案:使用 Wireshark 打开日志文件,应用显示过滤器ip.src == 172.16.134.191 and tcp.port == 6667,过滤出与 IRC 相关的流量。然后通过 “统计 → 端点” 列出所有通信的 IP,再配合tcp.flags.syn==1找到连接建立的开始时间。另外,使用tshark命令行更高效地提取相关字段。 -
问题3:分析哪些攻击成功时,日志中只看到大量的扫描和尝试,不确定是否真的获得 shell。
解决方案:重点查看成功后返回的流量,例如攻击者执行cmd.exe或/bin/sh后返回的交互数据。通过搜索关键字 “Microsoft Windows”、“C:>”、“uid=”、“#” 等可以定位到成功的 shell 会话。此外,检查是否存在从蜜罐主机向外部发起 IRC 连接的流量(成为僵尸的典型特征),发现 172.16.134.191 确实主动加入了 IRC 频道,证明已被控制。
4. 实践总结
通过本周的实践,我完成了对 rada 恶意代码样本的逆向分析、破解了两个 Crackme 程序、并分析了蜜罐主机被攻陷并加入僵尸网络的完整过程。这些任务让我从静态分析和网络流量两个角度,深入理解了恶意代码的运作机制和攻击者的入侵手法。
在 rada 样本分析中,我掌握了使用 PEiD、DIE 识别加壳工具,使用超级巡警或手动方法脱壳,以及用 strings 提取关键字符串的技巧。最终成功找到作者信息(例如 “Rady”)。同时,我还学会了如何编写分析报告,回答文件摘要、目的、特性、反逆向技术、分类、相似工具和作者溯源等问题。这个过程让我深刻体会到加壳和反调试技术对逆向分析的阻碍,以及耐心细致的重要性。
在 Crackme 程序破解中,我熟练了 IDA Pro 静态分析和 OllyDbg 动态调试的配合使用。通过逐步跟踪,理解了常见验证逻辑(如比较字符串长度、异或加密、固定密码比对)。这对我今后的漏洞分析和逆向工程能力是很好的训练。
在僵尸网络流量分析中,我学会了如何从海量日志中提取关键信息:利用 Wireshark 过滤器定位 IRC 通信,统计不同主机数量,识别攻击源 IP,分析攻击漏洞(如 MS08-067、弱口令、Web 漏洞)以及判断哪些攻击成功。我认识到,僵尸网络通常以 IRC 或 HTTP 为控制信道,攻击者通过批量控制肉鸡进行 DDoS、扫描、挖矿等恶意活动。防守方可以通过部署蜜罐和 IDS,捕获攻击流量并分析行为,从而提升防御能力。
总体而言,这次实践将理论知识与动手操作紧密结合,不仅加深了我对恶意代码和僵尸网络的理解,也锻炼了我解决实际问题的能力。例如,遇到脱壳失败、反调试、数据量大难以过滤等问题时,我通过查资料、询问同学和反复尝试,最终找到了可行方案。我相信这些经验将在我未来从事安全分析工作时发挥重要作用。
浙公网安备 33010602011771号