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

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

学号:20242317  姓名:林楚皓

实验环境:虚拟机Kali Linux、主机Windows 11


一、基础知识

(一)PE文件结构

PE(Portable Executable,可移植可执行文件)是Windows系统下可执行程序、动态链接库、驱动程序的标准文件格式,常见扩展名包括exe、dll、sys等。PE文件由DOS头、PE头、节表与若干节区构成。DOS头以特征字符MZ开头,用于兼容早期DOS系统;PE头记录机器类型、入口点、镜像基址、子系统等关键信息;节表则描述各个节区的位置与属性,典型节区包括存放代码的.text节、存放已初始化数据的.data节、存放只读资源的.rdata节以及存放重定位信息的.reloc节。

通过file、ExifTool、Detect It Easy等工具可以读取PE头信息,判断文件的运行平台、链接器版本、入口点、子系统类型以及是否被加壳。本次实验中的rada样本即为32位PE可执行文件,子系统为Windows图形界面(GUI)。

(二)加壳与脱壳

加壳是在不破坏程序原有功能的前提下,对可执行文件进行压缩或加密,并在文件外层包裹一段负责解压、解密的引导代码。程序运行时,外壳代码先于原始代码获得执行权,在内存中还原出原始程序后再跳转执行。加壳最初用于缩小程序体积,后来被恶意代码广泛用于隐藏真实代码、干扰静态分析与特征码查杀。

UPX(Universal Packer for Executable)是最典型的开源压缩壳,正常UPX壳可通过upx -d命令自行解压。恶意作者常对UPX壳进行修改,例如篡改节区名、覆盖UPX标识,使标准UPX无法识别和解压,必须借助专用脱壳工具或手工修复。脱壳方式分为静态脱壳与动态脱壳:静态脱壳利用工具直接在磁盘上还原文件,动态脱壳则在程序运行过程中从内存中转储已解压的映像。本次实验使用超级巡警脱壳机对修改版UPX进行静态脱壳。

(三)静态分析与动态分析

静态分析是指在不运行目标程序的情况下,对文件进行反汇编、反编译与数据提取。IDA Pro是行业主流的静态逆向工具,能够将机器码还原为汇编指令,生成函数调用图、控制流图与交叉引用,帮助分析者理解程序逻辑。字符串提取是静态分析的基础环节。程序中的提示信息、文件路径、注册表键、网址、版权声明等往往以明文ASCII或Unicode形式存放,使用strings命令或IDA的字符串窗口即可查看。这些字符串能够快速揭示程序的功能、作者与运行痕迹,是定位关键函数、还原攻击意图的重要线索。需要注意的是,加壳程序的字符串在磁盘上处于压缩状态,只有脱壳之后才能正常提取。

动态分析是将程序在隔离可控的沙箱或虚拟机环境中实际运行,持续观测它的进程行为、文件读写、注册表修改、网络通信、内存变化、系统调用等实时活动,直观看到程序真实执行动作,可以捕获静态分析中被掩盖的加密、延时触发、环境检测等逻辑,缺点是样本存在逃逸沙箱的风险,且只能覆盖本次执行走到的代码路径,无法遍历全部分支。

(四)IRC协议与僵尸网络

IRC(Internet Relay Chat,互联网中继聊天)是一种基于TCP的实时文本通信协议,采用客户端、服务器架构。客户端之间不直接通信,所有消息均由服务器中继转发。客户端接入网络时首先发送NICK命令声明昵称,再发送USER命令提交用户名信息,随后可通过JOIN命令加入特定频道(Channel),通过PRIVMSG命令在频道内收发消息。IRC默认使用TCP 6667端口,常见端口范围为6665至6669,部分服务器还使用194、7000等端口。

僵尸网络(Botnet)是攻击者通过一对多方式控制的大量被控主机组成的网络。被控主机上运行的僵尸程序(Bot)主动连接IRC服务器并加入指定频道,长期静默等待攻击者下发命令。僵尸网络常用于发起分布式拒绝服务攻击、批量发送垃圾邮件与钓鱼邮件、窃取账号口令、挖掘虚拟货币、内网横向渗透以及继续传播恶意代码。由于控制指令混杂在正常IRC聊天流量中,且被控主机主动外连,僵尸网络具有较强的隐蔽性。

(五)端口扫描与网络取证

端口扫描是攻击者探测目标开放服务的信息收集手段。TCP全连接扫描通过完整的三次握手确认端口开放,准确率高但容易被日志记录;SYN半连接扫描只发送SYN包,根据SYN+ACK或RST响应判断端口状态,隐蔽性更强。判断一个端口是否真正开放,标准方法是观察目标主机是否回应SYN+ACK包:开放端口回应SYN+ACK,关闭端口则回应RST。

网络取证是指对捕获的网络流量进行回溯分析,还原攻击过程。Wireshark及其命令行版本tshark、tcpdump是常用工具,通过显示过滤器、会话统计、跟随TCP流等功能,可以区分扫描与真实攻击、识别协议交互、提取攻击载荷,并结合时间线判断攻击是否成功。


二、实验内容

1.对rada恶意代码样本进行文件类型识别、脱壳与字符串提取,确定样本的文件格式、运行平台、加壳工具与编写作者。

2.使用IDA Pro静态分析crackme1.exe与crackme2.exe,寻找能够触发成功提示的特定输入。

3.对自制恶意代码样本rada进行深度分析,回答二进制摘要、程序目的、功能特性、反逆向技术、分类、相似工具、作者调查、检测方法八个问题。

4.对蜜罐5天网络流量进行取证分析,回答IRC与僵尸网络基础概念、IRC服务器、僵尸网络规模、攻击源、漏洞尝试、成功攻击等七个问题。


三、实验过程

(一)rada样本的文件类型标识、脱壳与字符串提取

1.识别rada恶意代码样本的文件格式和类型

(1)解压样本

实验素材为带口令的压缩包20242317_rada.rar,在Kali终端进入工作目录,使用unrar命令带口令rada解压,命令如下。

unrar x -p'rada' 20242317_rada.rar

解压成功,得到rada_dump_.exe与RaDa.exe两个文件,终端输出All OK。
f3970f7a555eb8558240ad51350ee7e4

(2)使用file识别文件格式

对样本执行file命令,查看基础文件类型。

file 20242317_rada.exe

输出表明该文件是PE32可执行文件,运行平台为MS Windows 4.0图形界面,指令架构为Intel i386,共3个节区。
91066c9b77a020aeb0884cdededb0c68

(3)安装并使用ExifTool提取元数据

先通过apt安装ExifTool工具包。
efad9eb7c7bb5235af622d86b8105001

安装完成后对样本执行exiftool命令,提取完整元数据。
d0da6e7f96ae271b262b323aed67a1f7

从输出中读取到关键信息:文件大小21KB,文件类型为Win32 EXE,PE类型为PE32,机器类型Intel 386,链接器版本6.0,入口点0xfd20,子系统为Windows GUI,语言为美式英语,字符集为Unicode。公司名称字段标记为Malware,产品名称、内部名称与原始文件名均为RaDa,文件版本与产品版本均为1.00。

(4)使用Detect It Easy识别加壳工具

安装Detect It Easy工具。
2b5ccf4c205dbda3c4e993deb55d9127

使用命令行版本diec对样本进行检测。
e172f0c200980c233f51cb7d35b30379

检测结果明确:链接器为Microsoft Linker 6.0,编译器为Visual Basic 6.00.8041原生编译,加壳工具为修改版UPX,即UPX[modified]。这说明样本由Visual Basic 6.0编写,外层包裹了经过作者篡改的UPX壳,标准UPX无法直接解压。

2.使用超级巡警脱壳机脱壳

在Windows中下载并安装超级巡警,载入样本后,工具自动识别出入口点0000FD20,入口点所在区段为JDR1,文件偏移00041200,并识别出UPX版本范围0.89.6至1.02、1.05至1.22。样本加壳状态下的MD5值为CAAA6985A43225A0B3ADD54F44A0D4C7。点击脱壳按钮,工具提示Unpack successfully,脱壳后的文件保存为20242317_rada_unpacked.exe。
b7ac08881229892366afee102aed9624

重新载入脱壳后的文件,工具显示入口点变为000018A4,入口点区段为JDR0,编译器信息还原为Microsoft Visual Basic v5.0至v6.0,脱壳后MD5值为02BFA8E6D4ED8ED8049004FDAD840D2A,与加壳样本哈希不同,证明文件已成功还原。
f648e810be3a79e37dc027d2a3f5f8c4

在Kali中使用exiftool复核脱壳文件,件大小由21KB变为69KB,入口点为0x18a4,与上面一致。
e1eaf20cf2cf62ace937ae5a893906f6

使用md5sum计算哈希值,与脱壳工具显示一致。
fa9e2bc22eda1a3f03168d298641fc60

3.字符串提取与作者确认

将脱壳后的20242317_rada_unpacked.exe载入IDA Pro,等待自动分析完成后打开字符串窗口,在数据段中定位到关键版权字符串。
a6575f32247ddbb4d6a6cf45ceeed001

字符串内容为Copyright (C) 2004 Raul Siles & David Perez,同时还能看到http://www.honeynet.org/scans/index.html、RaDa Usage、TITLE等字符串。由此确认rada样本的编写作者为Raul Siles与David Perez,程序名称RaDa正是取自两人名字Raul与David的组合,样本发布于2004年,与Honeynet项目的安全意识培训挑战相关。

(二)IDA Pro静态分析crackme1.exe

1.打开函数调用图

将20242317_crackme1.exe载入IDA Pro,选择View→Graphs→Function calls,打开函数调用图。发现函数sub_401280进一步调用strcmp、fprintf、printf等库函数。strcmp的存在说明程序通过字符串比较判断用户输入是否正确。
c420ddfde8a72134a444b4ad2651934f

2.定位核心比较函数

通过跳转窗口输入sub_401280,直接定位到核心函数。
aff24d86caf0f38ec69ec1ec0f071e00

在函数列表中可以看到sub_401280位于.text段,起始地址00401280,函数长度0AC字节。
3d7f51b9b7dae74034ca1f498c0007a2

双击sub_401280条目跳转到该函数的图形界面:
image

分析sub_401280的逻辑:程序首先检查命令行参数个数,若参数不足则输出提示I think you are missing something.;若提供了参数,则通过strcmp将用户输入与内置字符串I know the secret进行比较,比较相等时输出成功信息You know how to speak to programs, Mr. Reverse-Engineer。

在终端中分别验证两种情况。不带参数运行时输出缺失提示;携带正确参数运行时输出成功提示。
c7cc58258ce9ba9ed6fd273cd0ddade7

因此crackme1的特定输入为字符串I know the secret,且必须作为命令行参数传入。

(三)IDA Pro静态分析crackme2.exe

1.打开调用图

与crackme1.exe分析流程类似,打开20242317_crackme2.exe的Function Call函数调用图,核心函数仍为sub_401280。
e6ea80087cfa7d78a5b75d18ff929925

2.分析控制流图

在IDA图形视图中可以清楚看到两次比较。第一次strcmp将当前程序名与字符串crackmeplease.exe比较,即程序会检测自身文件名;第二次strcmp将命令行参数与字符串I know the secret比较。
8bb18b50a693d2f72277917f59e4fd77

3.运行验证

将程序重命名为crackmeplease.exe,携带正确参数运行,成功输出隐藏秘密Chocolate。
d1eb1719a22fac6067e5fda4699b67df

因此crackme2需要同时满足两个条件:程序文件名必须为crackmeplease.exe,命令行参数必须为I know the secret。

(四)rada样本深度分析

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

依次执行四项操作:用file命令判断文件类型与运行平台,用exiftool读取PE头元数据,用diec识别编译器与加壳工具,用md5sum分别计算加壳样本与脱壳样本的哈希值,具体命令和截图已在任务一中完整给出。结果汇总如下:

识别维度 脱壳rada样本属性
文件格式 PE32可执行文件
指令架构 Intel i386(32位)
运行子系统 Windows GUI(图形界面)
编译环境 Visual Basic 6.0(依赖MSVBVM60.DLL)
文件大小 69KB
入口点 0x18a4
链接器版本 6.0
MD5哈希 02BFA8E6D4ED8ED8049004FDAD840D2A
版本与产品名 版本1.00,产品名RaDa

2.找出并解释这个二进制文件的目的。

打开函数调用图,发现函数sub_404FB0下有很多的子函数。
1a8a1e638319ff1d61671d4d1e3a37f4

定位函数sub_404FB0。
3dc95692d0bfa68cfb633bb64bfa39d7

阅读其反汇编代码,提取远程服务器地址与配置项。反汇编显示,程序首先初始化远程命令服务器地址http://10.10.10.10/RaDa。
3336c939442ce1db296faaaf04377cc6

随后通过字符串拷贝依次初始化命令文件、CGI目录与工作路径等配置,包括RaDa_commands.html、cgi-bin、download.cgi、upload.cgi、C:\RaDa\tmp等。
97112230b2e2ecc5b7622876ff25fcb8

程序还会拼接安装路径与RaDa.exe,得到完整的自身可执行文件路径,用于安装与自启动。
579e0d1bcca764362ffe7b0c67220db3

进一步分析execute函数可知,程序周期性下载命令文件并解析其中的表单元素,根据表单名称识别并执行五类远程命令,具体如下表。

命令 参数 执行方式 功能说明
exe 系统命令 调用COMSPEC /C加命令 在被控主机上执行任意系统命令
get 文件名 请求服务器download.cgi 从命令服务器下载文件到临时目录
put 文件名 请求服务器upload.cgi 将被控主机文件上传到服务器
screenshot 文件名 调用屏幕抓取接口 截取主机屏幕并保存为位图文件
sleep 时长 调用休眠函数 令程序额外休眠指定时间

该程序本质上是一个通过HTTP拉取命令的远程控制后门。被控主机按照固定周期主动访问命令服务器,下载RaDa_commands.html命令文件,解析后执行对应操作,再将结果通过上传通道回传,然后进入休眠等待下一轮。攻击者借此实现远程命令执行、文件下发与窃取、屏幕监视等完整控制能力,且由于由被控端主动发起HTTP请求,流量混杂在正常网页访问中,隐蔽性较强。

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

(1)程序提供大量命令行参数,参数高度可配置。服务器地址、命令文件、CGI路径、工作目录、循环次数与周期均可通过命令行参数调整,适应不同攻击环境。

参数 默认值 作用
--server http://10.10.10.10/RaDa 指定远程命令服务器,必须为私有网段IP
--commands RaDa_commands.html 指定远程命令文件名
--cgipath cgi-bin 指定CGI目录名
--cgiget download.cgi 指定下载所用CGI脚本
--cgiput upload.cgi 指定上传所用CGI脚本
--tmp C:\RaDa\tmp 指定工作临时目录
--installdir C:\RaDa\bin 指定程序安装目录
--cycle 0 指定命令循环次数,0表示无限循环
--period 程序设定值 指定每轮命令之间的休眠周期
--visible、--gui 无 控制是否显示IE窗口与图形界面
--copyright、--authors 无 显示版权信息与作者对话框
--noinstall、--uninstall 无 指定不安装或执行卸载
--help 无 显示帮助信息

(2)持久化安装。安装时创建C:\RaDa\bin与C:\RaDa\tmp目录,将自身复制到安装目录,并向注册表Run键写入字符串值,使程序每次开机自动启动。

(3)周期循环执行。主循环按--cycle设定的次数运行,默认0表示无限循环,每轮拉取并执行命令后按--period设定休眠,形成长期稳定的控制通道。

(4)反虚拟机检测。程序查询注册表中的VMware Tools安装路径,并通过WMI遍历网卡,检查MAC地址的厂商唯一标识符是否属于VMware,以此判断自身是否运行在虚拟机中。

(5)网络限制与伪装。程序要求命令服务器必须位于私有网段且以IP地址访问,默认调用IE应用对象发起HTTP请求,便于伪装成正常浏览流量并穿透防火墙。

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

(1)修改版UPX加壳。程序主体经UPX压缩,作者将默认节区名UPX0、UPX1篡改为JDR0、JDR1,并覆盖UPX文件头的标志性提示,导致标准UPX无法识别和解压,迫使分析者手工修复或借助第三方脱壳工具,显著提高静态分析门槛。

(2)反虚拟机检测。程序通过注册表键与MAC地址双重检测VMware环境,一旦判断运行在虚拟机中,便隐藏作者对话框,使依赖自动化沙箱的分析难以获取关键信息。

(3)字符串与导入表隐藏。加壳状态下原始字符串与导入表处于压缩状态,IDA初次加载只能识别入口处少量代码,并提示导入表位于非标准节区,必须脱壳并手动加载后才能完整反汇编。

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

经过分析,该样本应归类为后门,具体是基于HTTP命令控制通道的远程后门。理由如下:

(1)后门是在系统中留下一条绕过正常认证、可被攻击者反复利用的隐蔽访问通道。RaDa安装时向注册表Run键写入自启动项实现持久化驻留,运行后主动、周期性地连接命令服务器,接收并执行攻击者下发的指令,使攻击者无需重新发起攻击即可长期、稳定地进入并操作主机,这正是后门最核心的特征。

(2)程序不感染其他宿主文件,也不将自身代码插入正常文件,不具备病毒的寄生与感染能力,所有不是病毒;不利用漏洞主动扫描网络,也不自我复制传播,不具备蠕虫的扩散能力,所有不是蠕虫。

(3)RaDa的设计重心是在植入后建立稳定的命令控制通道,提供命令执行、文件上传下载、屏幕监视等远程访问能力,符合后门的特征和定义。

6.给出过去已有的具有相似功能的其他工具。

工具名称 大致年代 主要功能 与rada的异同
Back Orifice及BO2000 1998年前后 命令执行、文件管理、屏幕控制 同为远程控制木马,通道不同
NetBus 1998年前后 远程键鼠、文件操作、程序管理 功能相近,采用独立通信协议
SubSeven 1999年前后 丰富的远程监视与控制功能 控制功能更庞杂,隐蔽性侧重不同
IRC僵尸代理 2000年前后 经IRC频道接收命令、批量控制 均为命令控制型,rada改用HTTP通道

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

在任务一字符串提取和分析的时候,就发现了以下版权信息:
图25 数据段版权字符串

字符串内容可直接确认作者为Raul Siles与David Perez,程序名RaDa正是取自两人名字Raul与David的组合。

环境与限定条件:

(1)必须成功脱壳。加壳状态下字符串处于压缩状态,无法直接读取,只有脱壳还原后才能提取版权信息。

(2)作者对话框受环境限制。程序的--authors参数可弹出作者对话框,但该对话框仅在反虚拟机检测确认处于物理机时才显示。若在VMware虚拟机中分析,需卸载VMware Tools并修改网卡MAC地址,绕过双重检测后才能查看。

(3)需要外部证据印证。版权字符串属于程序自报信息,只能作为强线索,正式调查中还需结合编译环境、发布渠道、下载时间线、服务器日志等外部证据相互印证,才能形成完整证据链,不能仅凭字符串单独定案。

8.给出至少5种检测该恶意软件的方法,需要详细介绍每种方法。

检测方法 检测对象 所处阶段 优点 局限
特征码与哈希 MD5、字节特征、YARA规则 文件落地 准确、高效 变种、重加壳即失效
字符串与资源 特有字符串、路径 静态分析 可识别部分变种 资源被加密则失效
持久化痕迹 注册表Run键、特征目录 安装驻留 直接发现驻留 需主机检查权限
网络行为 周期性HTTP命令流量 命令控制 可发现未知样本 需流量基线与持续监控
进程与行为监控 可疑进程、敏感API 运行阶段 实时拦截、覆盖变种 依赖行为规则、有误报
沙箱动态检测 运行时全部行为 动态分析 可识别未知样本、自动脱壳 资源消耗大、可能被反沙箱识别

各方法详细说明如下:

(1)基于特征码与哈希的检测。提取样本的MD5、SHA系列哈希建立黑名单,或针对脱壳后特有的字节序列编写特征码与YARA规则,在文件落地时匹配。该方法准确、高效,是传统杀毒软件的主要手段,局限是样本一旦被重新编译或重新加壳,哈希与特征码即失效,需要持续更新规则库。

(2)基于字符串与资源的检测。在文件中搜索RaDa_commands.html、C:\RaDa、版权字符串、download.cgi、upload.cgi等特有内容,即使样本变种,只要这些资源未被加密即可识别,可结合自动化脱壳先还原再扫描。

(3)基于持久化痕迹的检测。检查注册表HKLM\Software\Microsoft\Windows\CurrentVersion\Run下是否存在指向RaDa.exe的可疑自启动项,检查磁盘是否出现C:\RaDa\bin、C:\RaDa\tmp等特征目录,可使用Autoruns等工具枚举所有自启动位置进行比对。

(4)基于网络行为的检测。监控主机是否周期性向私有地址发起请求RaDa_commands.html的HTTP流量,是否存在与CGI脚本之间规律的上传下载通信。这类命令控制流量具有固定周期、固定URI、后台静默等特征,可通过网络入侵检测系统与流量基线分析发现。

(5)基于进程与行为的监控。检测任务管理器中是否存在RaDa.exe进程,是否出现无窗口的异常IEXPLORE.exe后台进程,是否频繁调用屏幕截图API、创建COMSPEC /C命令行子进程。通过主机入侵防御系统对进程创建、注册表写入、屏幕抓取等敏感行为进行拦截与告警。

(6)基于沙箱的动态检测。将可疑文件放入隔离沙箱运行,监控其文件操作、注册表修改、网络连接与命令执行行为。即使样本加壳,运行时外壳也会在内存中自行还原,沙箱可捕获其真实意图,弥补静态特征码无法识别未知变种的不足。

(五)取证分析实践:Windows 2000系统被攻破并加入僵尸网络

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

IRC即互联网中继聊天,是基于TCP的实时文本通信协议,采用客户端、服务器架构,客户端之间不直接通信,所有消息均由服务器中继。客户端申请加入网络时,首先发送NICK命令注册昵称,再发送USER命令提交身份信息,随后通过JOIN命令加入频道。IRC一般使用TCP 6667端口,常见端口范围为6665至6669,部分服务器使用194、7000等端口。

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

僵尸网络是由大量被植入僵尸程序的主机组成、受攻击者统一控制的网络。被控主机主动连接控制服务器,加入特定频道后静默等待命令,攻击者通过一对多方式下发指令。其本质是攻击者将海量主机的计算与带宽资源集中起来,以极低的成本实施大规模、隐蔽性强的网络攻击。

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

在Wireshark中打开botnet_pcap_file.dat,并在显示过滤器中输入ip.src == 172.16.134.191 && tcp.port == 6667进行流量过滤。
2dfc4111f72f092734853b19e7573613

可见蜜罐成功建立通信的IRC服务器共有5台,分别为63.241.174.144、217.199.175.10、209.196.44.172、209.126.161.29、66.33.65.58。

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

方法一:IRC客户端加入频道后,服务器会通过353号响应RPL_NAMREPLY返回频道内的用户名单。因此先导出与该服务器相关的IRC会话文本,再用正则提取所有353响应中的用户名,拆分、去重后计数。

Get-Content .\20242317_irc_session.txt | Where-Object { $_ -match '353 .*?:(.*)$' } | ForEach-Object { $matches[1] -split '\s+' } | Where-Object { $_ -ne '' } | Sort-Object -Unique | Measure-Object | Select-Object -ExpandProperty Count

输出结果如下:
2e518e6d0f3754ea366f99c0864abd2a

结果为2312,即观察期内共有2312个不同主机出现在该僵尸网络频道中。

方法二:IRC服务器会周期性向所有客户端广播当前服务器的全局状态信息,其中global users字段记录了当前服务器上的全局在线用户总数,即所有连接到该IRC服务器的僵尸主机实时数量。

在Wireshark显示过滤器中输入tcp.port == 6667 && irc contains "global users"过滤条件。
image

从匹配到的数据包中可读取到,当前全局在线用户数为4752。该结果代表观测时刻该IRC服务器上的实时在线僵尸主机数,是服务器端统计的全局在线规模,能够直观反映僵尸网络的实时活跃规模。

需要注意的是,由于统计口径不同,统计口径不同(例如是否重复统计多次上线、是否包含临时用户),最终结果会产生一定差异。但我认为,4752是数据包中直接记录的数据,是较为准确的结果。

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

使用tshark提取所有以蜜罐为目标的数据包的源IP字段,先分组统计包数,再去重计数,得到攻击源规模与主要攻击者。

& "D:\Wireshark\tshark.exe" -r botnet_pcap_file.dat -Y "ip.dst == 172.16.134.191" -T fields -e ip.src | Group-Object -NoElement | Sort-Object Count -Descending | Select-Object Count, Name

部分输出结果如下:
bec98727538d3a43538a26a11273909f

去重后共有165个不同源IP访问蜜罐:
图29 不同攻击源总数165

其中数据包数量最多的攻击源如下表。

源IP地址 入站数据包量 主要行为特征
209.196.44.172 9798 同时为IRC服务器,被控后双向通信
207.172.16.150 8985 大量自动化交互
24.197.194.106 4549 Web漏洞与目录遍历探测
61.111.101.78 1433 批量扫描探测
210.22.204.101 1165 人工入侵核心源,含HTTP利用与NetBIOS突破
217.151.192.231 1028 持续扫描与攻击

6.攻击者尝试攻击了哪些安全漏洞?

先统计TCP目标端口:
c8e79a439430f2d68f2ea151eed8db08

再统计UDP目标端口:
377819e06832750d7bcfc5700dd413d2

端口与对应漏洞总览如下表:

端口 传输层 对应服务 攻击行为 对应的漏洞或公告
80 TCP IIS Web .ida溢出、cmd.exe遍历、目录探测 MS01-033、MS00-057、MS01-026
139 TCP NetBIOS/SMB 会话建立、C盘共享空口令 默认共享弱口令
445 TCP SMB 空会话、IPC$、SAMR枚举 空会话配置缺陷,MS04-011风险
4899 TCP Radmin 弱口令爆破 远程管理工具配置缺陷
135 TCP RPC DCOM 端口扫描 MS03-026溢出风险
25 TCP SMTP 全连接扫描 服务识别
137 UDP NBNS NBSTAT信息收集 主机信息探测
1434 UDP SQL解析服务 畸形溢出包 MS02-039,SQL Slammer
28431 UDP 高位端口 零散探测 全端口扫描

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

(1)TCP 80端口分析(IIS Web服务)

①210.22.204.101的NULL.IDA溢出。该攻击源连续发起多个GET /NULL.IDA请求,请求后附带大量重复的大写字母C作为填充,长度664字节,针对IIS索引服务.ida、.idq组件的缓冲区溢出,对应MS01-033。
3ee6ccef0619697022ec11a6d8e88ffa

追踪该HTTP流(tcp.stream eq 84)可见,C填充之后是一段以百分号加u编码的Unicode shellcode,末尾明确出现cmd.exe字样,说明攻击者的意图是通过溢出在蜜罐上执行命令,并在99端口建立反向连接。
2746f5d1a5251698c862cccce44fb199

但在后续全部流量中,蜜罐的99端口始终没有完成任何握手、没有监听迹象,也没有任何命令回显,说明溢出没有成功劫持执行流。该攻击源前后重复发送十余次高度相似的载荷,也从侧面印证首次利用未奏效,只能不断重试,此路径失败。

②218.25.147.83的default.ida攻击是红色代码(Code Red)蠕虫,未成功。该源发出的GET /default.ida请求以大量重复的大写字母N作为填充,长度1185字节。
e33176eb8955721f527a8a7cdcf67410

追踪该HTTP流(tcp.stream eq 1512)可见完整的攻击结构:N填充之后是编码的利用代码,随后是一个完整的可执行文件,十六进制中能看到MZ文件头以及KERNEL32、WS2_32、socket、connect、send、recv、CreateThread、VirtualProtect等导入符号,载荷末尾还带有c:\notworm.LMTH路径和一段网页内容,页面显示“HELLO! Welcome to http://www.worm.com! Hacked By Chinese!”。
9e501ff798263d9e3055d5c85e4a0eee

这些特征与红色代码蠕虫完全吻合,即利用MS01-033溢出,成功后篡改网页、随机扫描80端口传播。需要特别说明的是,请求中携带完整蠕虫体,只是Code Red标准传播载荷的固有形态,任何一台感染主机在扫描时都会发出同样的完整PE,它证明的是“攻击源是一台Code Red感染机、正在向蜜罐发起标准利用”,而不能证明蜜罐这一端执行成功。判断蜜罐是否感染,要看它是否反过来产生感染机的行为:蜜罐没有出现网页被篡改后的对外表现,也没有衍生出随机扫描80端口的传播流量,整个会话没有有效返回数据。因此该攻击未成功,蜜罐未被感染。

③24.197.194.106的cmd.exe目录遍历与CGI扫描,未成功。该攻击源大量构造包含winnt/system32/cmd.exe的请求,通过/../多重跳转和百分号编码绕过路径校验,企图利用Unicode编码与双重编码目录遍历漏洞(对应MS00-057、MS01-026)执行dir等系统命令,同时还可见/NULL.printer、/NULL.idx等其他溢出探测和OPTIONS请求。
c439c0ae6783cba7396fc5eb1c243605

这些请求全部使用HEAD或GET方法,蜜罐没有返回任何命令执行结果,也没有由该会话衍生的文件写入或外连行为,目录遍历未能执行命令。

(2)TCP 139端口分析(NetBIOS/SMB)

139端口承载NetBIOS会话与SMB文件共享。流量中大量不同源IP先发起NBSS会话请求,再发起Tree Connect请求,目标路径统一为\PC0191\C,即主机的C盘共享。
e04b8eb755f77fd27f74e93a513f7636

展开其中一个会话的详情可见,NetBIOS会话请求中Called name为SBM191,Calling name为攻击者伪造的客户端标识,会话类型为标准Session request。
d1279e54c3b09ea13f3495cdc949670e

关键证据在SMB层:Tree Connect请求中的Password Length字段仅为1,密码内容为单字节,这是典型的空口令尝试,访问的Service为A(磁盘共享)。
b1bdc1a01fa15f937a32659e7ca46346

这台Windows 2000蜜罐的Administrator账号使用空口令,且默认开启C盘管理共享,攻击者无需任何凭据即可通过SMB会话获得C盘读写权限。攻击源210.22.204.101正是利用这一配置缺陷,经NetBIOS会话向蜜罐磁盘写入远程管理程序并启动。与4899端口的时间线相互印证(见下节),可以确认139端口的空口令利用成功,是整个主机沦陷的真正突破口。其成功原因不是利用了高深的技术漏洞,而是弱口令这一最基础的配置缺陷。

(3)TCP 4899端口分析(Radmin远程管理)

4899是Radmin远程管理工具的默认端口。该端口的流量呈现出明显的时间分界,是判断入侵成功的关键证据。
b375476cfaf170e3b848ec85d7874440

在抓包最开始的数据包区间(编号1348、1353、1355),源端口3745向4899发出的SYN包反复重传,并标注TCP Port numbers reused,始终没有收到ACK,说明此时4899端口尚未开放、Radmin服务并不存在。而到了编号2070至2072,源端口2651发起的连接才首次完成三次握手,随后出现多轮PSH、ACK小数据包(Len=10、Len=14、Len=9),这是Radmin认证与交互的典型特征。

这一开放时间的变化证明:Radmin并非蜜罐原有服务,而是攻击者在1357至2069数据包区间内,通过139端口的空口令SMB会话复制到蜜罐并执行的。Radmin成功运行后,攻击者借此获得了图形界面级别的持久远程控制能力,即使初始会话断开,也能长期反复进入。因此4899端口对应的攻击成功,它是139空口令突破后的持久化环节,两者共同构成完整的人工入侵链。

(4)TCP 445端口分析(SMB空会话与SAMR枚举)

①空会话SAMR枚举成功获取账户信息。攻击源195.36.247.77先进行协议协商,再以空用户名建立会话、连接IPC$命名管道,随后绑定SAMR账户管理接口,连续发起EnumDomains、EnumDomainUsers、QueryUserInfo、GetGroupsForUser等远程调用,枚举域信息、用户列表和用户组权限。
3a790f513db8112734211f1334daae9c

这一操作确实成功读取了系统账户与权限信息,蜜罐返回了PC0191、Builtin等域以及Administrator、Guest、IUSR_PC0191等用户,匿名空会话的配置缺陷真实存在。枚举本身不执行代码,属于信息收集,但它为后续口令尝试和定向攻击提供了目标。

②W32/Deloder-A蠕虫感染成功。攻击源61.111.101.78通过445端口尝试Administrator口令,借助空口令成功登录,随后在\winnt\system32目录下复制并执行inst.exe、Devlr32.exe等组件,再执行Net share /delete命令删除C$、D$、E$、ADMIN$等默认共享,既清除痕迹又防止主机再被他人利用。该蠕虫的关键危害是在主机上投放一个IRC僵尸程序。时间线可以完整印证:Deloder感染集中在一个约三分钟的区间内,其最后一个数据包到达后仅约6分50秒,蜜罐便主动向外部IRC服务器的6667端口发起连接。蠕虫感染后随即出现IRC外连,证明Deloder成功执行并完成了僵尸程序投放,这是一次成功的蠕虫攻击。

③210.22.204.101经SMB成功植入Radmin。该攻击者在空口令会话获得权限后,向\WINNT\System32目录依次上传r_server.exe、raddrv.dll、admdll.dll三个文件,随后以服务方式启动r_server.exe,使远程管理工具即使重启也能自动运行。这三个文件的写入均得到蜜罐成功确认,是Radmin后门能够在4899端口运行的直接来源。

(5)TCP 135端口(RPC DCOM)与TCP 25端口(SMTP)分析

①135端口。攻击源195.36.247.77的流量只有SYN、ACK、FIN等纯TCP控制包,完整握手后立即主动断开,没有任何DCE/RPC应用层载荷。
7c02b4ff6cc83c3eda8d6d459b047d6d

这说明攻击者仅通过全连接扫描确认RPC DCOM服务是否开放,并未发送MS03-026溢出利用代码,因此该端口不存在成功或失败的利用,仅为服务识别。

②25端口。攻击源24.197.194.106同样是建立连接后立即发送FIN断开,没有任何EHLO、AUTH等SMTP命令。
de892a220e9ff4cf7e68b94531f51c83

该端口仅用于确认SMTP服务存在,属于侦察,没有发生实际攻击。

(6)UDP 137端口分析(NBNS名称服务)

137端口收到大量来自不同源IP的NBSTAT名称查询,查询目标为通配符,类型为NBSTAT(编号33)。
467bfc7311d27bfb624644da13691b36

该查询用于获取主机名、工作组、MAC地址和注册服务,是攻击者识别Windows目标、为后续SMB攻击收集素材的标准前置步骤。由于UDP无连接、单包即可完成,且该操作不执行任何代码,因此属于信息收集,不构成权限突破。

(7)UDP 1434端口分析(SQL Server解析服务)

1434端口持续收到固定418字节的UDP包,Wireshark将其误识别为DCERPC Ping、LTP协议,部分包标记为Malformed Packet。
c21b96a5a91caaa8b7876c099fb22a91

展开详情可见,包内Object UUID、Interface UUID、Activity等字段全部由重复的0101十六进制字符填充,完全不符合正常RPC协议规范,这些重复数据正是缓冲区溢出的填充与返回地址构造。
7379d02505b536e27e4ff908619b5b35

Wireshark的“误识别”和“畸形包”标记恰恰证明这是人工构造的恶意载荷,对应MS02-039 SQL Server解析服务溢出,即SQL Slammer蠕虫。对流量按时间统计可以看到,1434攻击包到达后,链路出现明显的带宽空洞,主机开始大量向外发送同类数据包,这正是蠕虫感染后疯狂扫描传播、挤占网络的典型效应。由此确认溢出成功触发,蜜罐被SQL Slammer感染并参与对外传播,攻击成功。其成功原因在于SQL Server 2000未打MS02-039补丁,且该漏洞无需认证、单包即可触发。

(8)UDP 28431端口分析(高位随机端口)

28431端口仅出现2个长度为1字节的UDP包,来自两个不同源IP,无任何应用层内容。
b257b9783f9cdbcdb78ccd7b40315e59

这是自动化扫描器对全端口范围进行遍历的零散探测,用于排查冷门服务,没有明确的漏洞指向,属于广撒网式侦察,不构成实际攻击。

各端口攻击成败汇总如下表。

端口 传输层 攻击行为 成败结论 判定依据(成功项注明漏洞)
80 TCP NULL.IDA溢出、Code Red、cmd.exe遍历 失败 99端口未开放,无返回流量、无传播行为
139 TCP C盘共享空口令利用 成功 Administrator空口令,获C盘读写,为入侵突破口
445 TCP SAMR枚举、Deloder感染、Radmin植入 成功 Deloder蠕虫感染并投放ircbot;Radmin文件写入成功
4899 TCP Radmin植入与连接 成功 该端口在入侵区间首次开放,Radmin被写入启动
135 TCP RPC DCOM扫描 仅侦察 无应用层载荷,未发起MS03-026利用
25 TCP SMTP全连接扫描 仅侦察 握手后立即断开,无SMTP命令
137 UDP NBSTAT信息查询 仅侦察 只收集主机信息,不执行代码
1434 UDP SQL Slammer溢出 成功 MS02-039,攻击后出现带宽空洞并对外传播
28431 UDP 高位端口零散探测 仅侦察 单字节探测包,无漏洞指向

四、问题及解决方案

问题1:分析crackme2.exe时,改名crackmeplease.exe且添加正确参数I know the secret后仍未运行成功,如图。
image

解决方案:这是因为PowerShell下的.\前缀导致argv [0]不匹配。程序是直接拿argv[0](程序启动时的第一个参数字符串)和crackmeplease.exe做严格strcmp比对。用.\crackmeplease.exe执行时,argv[0]的值是.\crackmeplease.exe(带.\前缀),和内置的crackmeplease.exe字符串不完全相等,比对直接失败。解决方法是切换到cmd,直接输入文件名,不要加.\前缀,即crackmeplease.exe "I know the secret",最后运行成功。
d1eb1719a22fac6067e5fda4699b67df

问题2:标准upx -d命令无法对样本脱壳。

解决方案:使用diec检测发现样本为UPX[modified],作者篡改了节区名并覆盖UPX标识,导致标准UPX无法识别。改用超级巡警脱壳机自动识别修改版UPX并完成静态脱壳,脱壳后通过入口点变化、MD5变化与文件大小变化三重验证确认脱壳成功。


五、学习感悟、思考

这次实验最大的收获,是建立起了一套从文件到流量、从静态到动态的完整分析思路。以前面对一个陌生的exe,我只能笼统地觉得它可能是病毒,现在知道应该先看PE头确定平台,再查壳、脱壳,随后提取字符串、定位关键函数,最后在IDA里顺着交叉引用把功能一点点还原。rada样本看似被层层保护,可只要按步骤拆开,作者版权信息和命令控制逻辑就会清晰浮现,这让我真切体会到恶意代码分析是有章法可循的。

两个crackme的对比也让我印象深刻。crackme1只比较一次输入,crackme2却增加了程序文件名检测,仅仅多一道strcmp,分析者就必须同时关注参数和自身文件名。这提醒我逆向时不能放过任何一次函数调用,程序的判断条件往往就藏在看似不起眼的分支里。

之前总听说过“数字取证”,但总会好奇它到底是干嘛的、有什么用。这个实验是我第一次接触“取证”:实验中,攻击者恰恰是利用Administrator空口令,通过最基础的NetBIOS会话长驱直入。再结合未打补丁的SQL Server和IIS,主机被植入Radmin、感染蠕虫、加入僵尸网络几乎是必然结果。这说明安全防护没有捷径,强口令、最小权限和及时补丁这些基础工作,恰恰是最有效的防线。同时我也认识到,网络取证必须严格区分扫描、尝试与成功,流量不会直接告诉我们结论,需要结合握手是否完成、载荷特征和时间线去交叉验证,任何一个统计口径的偏差都可能导致判断错误。


参考资料

[1]The Honeynet Project.Scan of the Month 27 Challenge and Submissions[EB/OL].https://honeynet.onofri.org/scans/scan27/

[2]The Honeynet Project.Scan of the Month 32 RaDa Analysis[EB/OL].https://honeynet.onofri.org/scans/scan32/

[3]Microsoft Corporation.Microsoft Security Bulletin MS02-039、MS03-026、MS04-011、MS01-033[EB/OL].https://learn.microsoft.com/security-updates/

[4]Internet Relay Chat Protocol相关文档,RFC 1459、RFC 2810—2813[EB/OL].https://www.rfc-editor.org/

posted @ 2026-11-09 09:28  Howard夏日清风  阅读(8)  评论(0)    收藏  举报