20232326 2025-2026-1 《网络与系统攻防技术》实验四实验报告

一、实验内容

  1. 恶意代码文件类型标识、脱壳与字符串提取

对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:

(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;

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

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

  1. 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。

  2. 分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:

(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;

(2)找出并解释这个二进制文件的目的;

(3)识别并说明这个二进制文件所具有的不同特性;

(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;

(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;

(6)给出过去已有的具有相似功能的其他工具;

(7)可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?

(8)给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。

  1. 取证分析实践

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.1 恶意代码文件类型标识、脱壳与字符串提取

对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:

2.1.1 使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;

  • 在kali虚拟机中,使用命令file RaDa.exe查看文件类型为PE32可执行文件,运行平台为Windows。
    image

  • Windows主机打开PEiD,直接拖拽RaDa.exe至软件界面,可以看到文件采用UPX加壳保护,加壳工具开发者为Markus&Laszlo,需先脱壳才能分析原始代码逻辑。
    image

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

  • 启动超级巡警脱壳机,点击“添加文件”选择RaDa.exe,点击“给我脱”按钮;
    image
  • 脱壳完成后,在超级巡警脱壳机界面可以看到RaDa_unpacked.exe文件,即为脱壳后的原始恶意代码样本。
    image

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

  • 将Windows端的RaDa_unpacked.exe文件拖到Kali虚拟机中,这里我们使用命令strings RaDa_unpacked.exe提取字符串
    image
  • 可以发现编写者为Raul Siles && David Perez。
    image

2.2 IDA Pro分析crackme1.exe与crackme2.exe

使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。

2.2.1 crackme1.exe

  • 静态分析crackme1.exe可以发现,命令行只输入一个参数时输出Pardon? What did you say?,输入超过两个参数时输出I think you are missing something.
    image

  • 动态分析:
    (1) 启动IDA Pro ,点击File→Open加载crackme1.exe,点击ok;
    image

(2) 选择View→Graphs→Function calls,打开该文件的函数调用图,
image
在函数调用图中,main函数调用strcmp、alloca(栈内存分配)、fprintf/_printf等函数
image

点击菜单栏 View→Open subviews→Functions,打开 “Functions” 函数列表窗口。双击需分析的main函数
image

程序会读取命令行参数,将其与“I know the secret”做比较。如果一致,程序就会跳转到loc_401310输出提示正确的信息:You know how to speak to programs, Mr...
image
image

(3) 在Windows主机中再次运行此文件,输入参数“I know the secret”,得到了正确的回答
image

2.2.2 crackme2.exe

(1) 尝试输入上面得到的“I know the secret”参数运行,失败了
image

(2) 重复上面的步骤,得到函数调用图:
image
发现依然是main函数调用了strcmp、alloca(栈内存分配)、fprintf/_printf等函数
image
打开main函数
image

  • 发现这段汇编代码首先校验程序自身的文件名是否匹配“crackme please.exe”,若匹配则继续校验命令行的第一个参数是否等于“I know the secret”,只有同时满足这两个条件,程序才会跳转到后续逻辑执行
    image

(3) 在Windows主机中再次运行此文件,使用copy命令复制文件为crackmeplease.exe,再次输入参数“I know the secret”。发现可以获得正确的结果
image

2.3 自制rada恶意代码样本分析步骤

2.3.1 提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;

在kali中输入

md5sum RaDa.exe
file RaDa.exe
exiftool RaDa.exe | grep "Time Stamp"

可以得到
MD5 哈希值:caaa6985a43225a0b3add54f44a0d4c7
文件格式:PE32 可执行文件
运行平台:适用于MS Windows 4.0 GUI 界面,Intel i386 架构
文件结构:包含 3 个节
时间戳:2004/10/30 07:59:58+08:00
image

加壳状态:
Windows主机打开PEiD,直接拖拽RaDa.exe至软件界面,可以看到文件采用UPX加壳保护,加壳工具开发者为Markus&Laszlo,需先脱壳才能分析原始代码逻辑。
image

2.3.2 找出并解释这个二进制文件的目的

打开ProcessExplorer.exe
image
没有找到RaDa,双击运行脱壳后的Rada,发现弹出错误提示:运行时错误,权限被拒绝,并且系统提示该程序试图开机启动。
猜测这里是因为RaDa程序尝试执行需要更高系统权限的操作,结合 RaDa 的恶意功能,这一错误可能是因为它在试图修改开机启动项、创建恶意目录等持久化或进行系统篡改,但当前运行该程序的用户账户权限不足,导致系统拒绝了其操作请求。
image
image
双击进程,查看Strings窗口。
image
在Strings窗口中,可以看到如下的一些重要信息。

image
image

RaDa.exe的目的是通过篡改系统注册表实现开机自启以长期驻留目标电脑,再连接远程服务器接收指令、传输数据,同时在本地创建专属目录存储恶意组件,并利用自带的功能发起Smurf类型DDoS攻击压制目标网络,还能通过脚本工具灵活篡改文件、修改系统配置。

2.3.3 识别并说明这个二进制文件所具有的不同特性

(1) 系统持久化特性:通过修改Windows注册表启动项(HKLM\Software\Microsoft\Windows\CurrentVersion\Run\RaDa),将自身添加到开机自启列表,确保系统重启后仍能自动运行,实现长期驻留目标系统。

(2) 文件与目录管理特性:会在本地主动创建C:\RaDa\tmp和C:\RaDa\bin专属目录,用于存储自身副本、临时文件及攻击相关组件,形成独立的恶意文件存储结构,便于隐藏和管理恶意资源。

(3) 远程通信与控制特性:能连接预设的远程服务器http://10.10.10.10/RaDa,通过服务器上的download.cgi和upload.cgi等脚本,实现与控制端的双向交互,包括接收指令、下载新组件、上传目标系统信息等,具备远程操控能力。

(4) 主动攻击特性:明确包含Smurf类型DDoS攻击功能,可通过发送大量伪造源地址的ICMP请求包,利用网络广播地址放大流量,对目标服务器或网络发起拒绝服务攻击,压制其正常服务。

(5) 脚本化操作特性:集成Scripting.FileSystemObject(文件操作)、Wscript.Shell(系统命令执行)等VBScript对象,以及RegWrite/RegRead/RegDelete等注册表操作函数,能灵活执行文件篡改、系统配置修改等恶意操作,扩展破坏范围。

(6) 环境交互特性:带有图形界面(GUI),支持-gui、-period等参数配置,还可能调用InternetExplorer.Application组件,既方便攻击者操作,也可能用于伪装正常程序;同时会访问VMware Tools相关注册表路径,疑似具备虚拟环境检测能力。

2.3.4 识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术

RaDa.exe采用的逆向工程技术主要是UPX加壳技术

UPX本质是一款通用的可执行文件压缩工具,常被恶意程序用于混淆代码结构以阻碍分析:

  • 技术原理:UPX会将原始恶意代码进行压缩,并在文件头部添加一段“壳代码”。当程序运行时,壳代码会先将压缩的原始代码解压到内存,再跳转到原始代码的入口点执行。
  • 反分析作用:未脱壳的RaDa.exe,其静态代码中仅包含壳的逻辑,原始恶意功能代码处于压缩状态,逆向分析者无法直接查看核心恶意逻辑;同时,壳代码会增加静态分析的复杂度,干扰调试器对程序入口、代码流程的识别,从而提升逆向工程的难度。

2.3.5 对这个恶意代码样本进行分类(病毒、蠕虫等),并给出理由

这个恶意代码样本属于后门程序,理由如下:
(1) 病毒需依赖宿主程序进行传播,而RaDa.exe是独立可执行文件,无依附宿主的特性;
(2) 蠕虫的核心特征是能自主、大规模地自我复制并传播,但RaDa.exe无自我复制与主动传播的功能;
(3) 木马通常伪装成正常软件诱导用户主动运行,而RaDa.exe的核心目的并非“伪装欺骗”,而是驻留系统后接收远程指令;
(4) RaDa.exe的核心功能是长期驻留目标系统、与远程控制端通信、执行指令,具备后门程序的典型属性。

2.3.6 给出过去已有的具有相似功能的其他工具

msfvenom、veil。

2.3.7 可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?

可以,在ProcessExplorer中双击RaDa脱壳后的进程,查看Strings窗口,这里明确了开发者为 Raul Siles 和 David Perez。
image

2.3.8 给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法

(1)基于特征码的检测法
原理:提取RaDa的哈希值、特征字符串、核心代码片段等作为特征码,与系统文件进行匹配。
具体实现:

  • 提取RaDa的MD5值(caaa6985a43225a0b3add54f44a0d4c7)、脱壳后的特征字符串(“Copyright (C) 2004 Raul Siles & David Perez”“Starting DDoS Smurf remote attack”)或UPX加壳的头部特征。
  • 将这些特征码录入杀毒软件特征库,当扫描到文件与特征码匹配时,触发警报。
    优势:检测速度快、准确率高,适用于已知样本的精准识别;
    局限:若样本被重编译或者更换加壳方式,特征码可能失效。

(2)基于行为特征的检测法
原理:监控程序运行时的异常行为,通过多行为组合判定恶意性。
具体实现:

  • 监控注册表操作:检测是否存在修改HKLM\Software\Microsoft\Windows\CurrentVersion\Run\路径添加启动项的行为
  • 监控文件系统:检测是否创建C:\RaDa\tmp或C:\RaDa\bin目录
  • 监控网络行为:检测是否连接http://10.10.10.10/RaDa 或与cgi-bin/download.cgi等脚本交互
  • 监控攻击行为:检测是否发起大量ICMP请求包(Smurf DDoS攻击特征)。
    优势:可检测变种样本;
    局限:需持续监控系统行为,对资源有一定消耗。

(3)沙箱动态检测法
原理:在隔离的模拟环境中运行可疑文件,观察其执行的操作,通过行为结果判定是否为恶意软件。
具体实现:

  • 将RaDa放入沙箱模拟Windows系统环境运行。
  • 记录其操作:是否修改注册表启动项、创建恶意目录、连接远程服务器、发送大量网络包等。
  • 若沙箱日志中出现与RaDa功能匹配的行为,则判定为恶意。
    优势:无需提前知晓特征,可检测未知恶意软件;
    局限:部分恶意软件会检测沙箱环境并规避行为,需沙箱具备反规避能力。

(4)基于网络流量的检测法
原理:分析网络数据包,识别RaDa特有的网络交互特征。
具体实现:

  • 监控HTTP流量:检测是否有向http://10.10.10.10/RaDa/cgi-bin/ 路径发送的download/upload请求。
  • 监控ICMP流量:检测是否有大量源地址伪造的ICMP Echo请求(Smurf攻击的典型流量特征)。
  • 监控内网地址交互:检测是否频繁访问192.168./172.16.等内网网段。
    优势:可在网络层拦截攻击,不受终端环境限制;
    局限:若攻击者修改服务器地址,需更新规则库。

(5)字符串提取匹配法
原理:通过工具提取可疑文件的字符串,匹配RaDa的标志性字符串。
具体实现:

  • 使用字符串提取工具分析目标文件。
  • 检索是否包含RaDa的专属字符串:如开发者标识“Raul Siles & David Perez”、路径“C:\RaDa\”、攻击指令“Starting DDoS Smurf”、注册表路径“HKLM...\Run\RaDa”等。
  • 若匹配到字符串,判定为可疑样本。
    优势:操作简单,适用于静态分析阶段快速筛查;
    局限:若字符串被加密或混淆,需先解密才能匹配。

2.4 取证分析实践步骤

Windows 2000系统被攻破并加入僵尸网络

问题:数据源是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。回答下列问题:

2.4.1 IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?

  • IRC是Internet Relay Chat的缩写,中文译为互联网中继聊天,是1988年由芬兰人Jarkko Oikarinen首创的一种基于文本的实时通信协议,常用于多用户、多客户端之间的群组或私人实时聊天,至今仍是不少开源技术社区的交流工具。它采用客户端-服务器模型,用户通过IRC客户端连接到IRC服务器,可进入以#开头的频道参与群组讨论,也能与特定用户私聊,且用户以昵称作为在IRC网络中的唯一标识。

  • 客户端加入IRC网络需分两步发送核心消息,完成身份配置与频道加入。首先,连接服务器后要发送昵称设置消息,通过/nick昵称命令设定自身唯一标识,比如/nick User123;若需注册账号,还会发送USER命令补充用户名、主机名等信息,格式通常为USER 用户名 主机名 服务器名 :真实姓名。接着,加入具体频道时发送/join消息,格式为/join #频道名,例如/join #LinuxTalk,该消息会请求服务器将客户端接入指定频道,进而实现与频道内其他用户的互动。
    端口
    6667:IRC最基础、最常用的非加密连接端口,早期多数IRC客户端默认使用该端口连接服务器。
    6697:专用于SSL/TLS加密连接的标准端口,能保障客户端与服务器之间数据传输的安全性,避免消息被监听或篡改,如今被广泛推荐使用。

2.4.2 僵尸网络是什么?僵尸网络通常用于什么?

  • 僵尸网络是由攻击者通过恶意代码控制的大量被感染设备组成的远程操控网络,这些设备的用户通常不知情。

  • 僵尸网络的常见用途包括:
    (1) 发起大规模DDoS攻击,压制目标服务器或网络;
    (2) 发送垃圾邮件,进行网络诈骗或传播恶意软件;
    (3) 窃取用户敏感信息;
    (4) 进行挖矿活动,利用僵尸机的计算资源获取非法收益;
    (5) 作为跳板发起其他网络攻击,隐藏攻击者真实IP地址。

2.4.3 蜜罐主机(IP地址:172.16.134.191)与哪些IRC服务器进行了通信?

  • 使用wireshark打开数据包botnet_pcap_file.dat,并且通过ip.src == 172.16.134.191 && tcp.dstport == 6667 || tcp.dstport == 6667进行过滤查看,结果中的目的地址即为与IRC服务器通信的IP地址。

image

2.4.4 在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?

  • 打开Kali虚拟机,在命令行中输入sudo apt install tcpflow下载tcpflow
    image
  • 输入tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667"筛选ip和端口
    image
  • 输入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查看有多少个个主机访问了僵尸网络。
    image
    可以看出有3461个主机访问了僵尸网络

2.4.5 哪些IP地址被用于攻击蜜罐主机?

  • 在Kali中输入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 > 20232326.txt;wc -l 20232326.txt将攻击蜜罐主机的ip筛选出输出至20232326.txt文件中
    image
  • 输入cat 20232326.txt查看文件
    image
  • 有以下IP地址被用于攻击蜜罐主机
    image
    image
    image

2.4.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端口号。
    image
    端口号有:135 139 25 445 4899 80

  • 在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端口号。
    image
    端口号有:137

下面对这些端口的流量进行分析:
135端口:
使用wireshark打开文件botnet_pcap_file.dat,通过ip.dst == 172.16.134.191 && tcp.port == 135过滤规则查看数据包。
image
此次流量仅完成了 TCP 连接的建立-关闭流程,未传输应用层数据

139端口:
通过ip.dst == 172.16.134.191 && tcp.port == 139过滤规则查看数据包。
image
image
TCP 连接建立:多个源端向 139 端口发送SYN包,完成三次握手建立连接;
SMB 服务交互:连接建立后,源端发送NBSS Session request(SMB 会话请求)、SMB Tree Connect AndX Request(SMB 目录连接请求),尝试访问目标端的共享目录(如\PC0191\C)。
25端口:
通过ip.dst == 172.16.134.191 && tcp.port == 25过滤规则查看数据包
image
流量呈现多次TCP 连接的 “建立 - 关闭” 循环

445端口:
通过ip.dst == 172.16.134.191 && tcp.port == 445过滤规则查看数据包。

image
图中可以看出攻击者通过SAMR协议发送OpenUser、QueryUserInfo、GetGroupsForUser等请求,批量查询目标系统的用户、用户组、权限配置等信息,为后续登录做准备。并且使用不同账户发起Session Setup AndX请求,尝试建立SMB会话并访问共享目录,尝试暴力破解。
image
攻击者通过Session Setup AndX Request完成身份验证成功建立SMB会话;
发起Tree Connect AndX Request,成功访问蜜罐的ADMIN$(管理员共享目录)、IPC$(进程间通信共享)
image

攻击者已成功获取权限,通过篡改系统文件、操控Windows服务,实现持久化控制或破坏目标系统。

根据上一步得到的源IP61.111.101.78,过滤条件设置为ip.dst==61.111.101.78查看从蜜罐发往攻击主机的数据包
image
攻击者重复执行“会话建立-权限枚举-操作-断开”的攻击流程,确认蜜罐的权限边界,或测试恶意操作的可行性。

4899端口:
过滤条件设置为tcp.dstport==4899 && ip.dst == 172.16.134.191
image

4899端口是远程桌面协议Radmin的默认端口,用于远程桌面控制。此处攻击者通过4899端口向目标端发送持续的TCP数据包,属于Radmin服务的典型流量特征。攻击者若控制了蜜罐的Radmin服务,可通过4899端口实现远程桌面访问、文件传输、命令执行

80端口:
过滤条件设置为tcp.dstport==80 && ip.dst == 172.16.134.191查看数据包。
image
攻击者向80端口发起HTTP Flood攻击。源端使用大量随机端口向80端口发送SYN包,快速建立TCP连接。连接建立后发送大量重复的CCCCCCCC字符作为HTTP请求内容,属于无意义的垃圾数据。蜜罐多次返回RST包,但源端仍持续发起新请求。这是攻击者利用受控主机发起的分布式拒绝服务攻击环节。

过滤条件设置为tcp.port==80 && ip.dst == 172.16.134.191 and http查看数据包
image
这里看到有application字样,打开看看
image
IIS 5.0是Windows Server 2000的默认Web服务器,其存在多个高危漏洞。此次响应来自该老旧版本服务器,结合之前的攻击流量,说明攻击者可能在针对IIS 5.0的已知漏洞进行探测或利用。

image
HTTP请求为GET /NULL.idp?AAAAAAAA...,属于缓冲区溢出攻击。攻击者通过构造超长的参数值,意图溢出目标Web服务IIS 5.0的内存缓冲区,覆盖程序的返回地址以执行恶意代码。

2.4.7 哪些攻击成功了?是如何成功的?

(1) SMB权限获取与文件/服务篡改:攻击者通过SMB协议完成身份验证,成功执行Delete Request、Write AndX、DeleteService等操作,说明已获取蜜罐的SMB权限并实现系统资源篡改;
(2) IIS 5.0缓冲区溢出攻击投递:攻击者向/NULL.idp提交超长A字符的HTTP请求,成功完成恶意Payload投递,后续的恶意网页续传流量也印证了这一点;
(3) IRC通信建立:蜜罐成功与多个IRC服务器建立TCP 6667端口连接,并完成身份配置,实现了僵尸网络的控制信道连接。

三、问题与解决方案

在本机Win11上安装IDAPro失败,疑似系统问题,换到Win10虚拟机上安装成功
image
image
但是打开的函数调用图非常模糊,也没有找到能调整的地方,加之在虚拟机上运行非常卡
image

又重新尝试在Win11主机上安装IDAPro,使用了同学下载的x64版本的exe文件,但是刚开始又打开失败了,后来切换到纯英文目录成功运行文件,猜测是路径中包含中文导致的运行失败。
image

四、实验总结

这次恶意代码分析与取证实践,让我对网络安全攻防技术有了更立体的认知,也积累了不少实打实的实操经验。我真切体会到,恶意代码的套路是真多,取证分析也远比想象中难:恶意程序会靠加壳、伪装命名这些手段藏自己,我们得用技术手段一层一层拆解;攻击的痕迹还分散在不同的流量和操作记录里,必须把这些碎片信息关联起来,才能还原出完整的攻击过程。另外对一些简单的问题要积累经验,不要屡犯不记。

posted @ 2025-11-10 21:23  20232326朱思敏  阅读(27)  评论(0)    收藏  举报