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

实验名称:恶意代码分析技术与蜜罐取证

姓名:姚诗语 学号:20242326 实验日期:2026年11月8日

实验环境:Kali Linux 2026.2 虚拟机(主机名 yaoshiyu)、Windows 11 宿主机、VMware Workstation

1. 基础知识

1.1 PE文件结构

PE(Portable Executable)是Windows可执行文件格式,由DOS头、PE签名、COFF文件头、可选头和节区表组成。DOS头以"MZ"开头,其后的stub中固定包含字符串"This program cannot be run in DOS mode";PE签名"PE\0\0"用于定位文件头;COFF头中的机器类型(0x14C表示Intel 386)、节区数、时间戳可用于判断运行平台和编译时间;可选头中的子系统字段区分GUI与控制台程序;节区表中的.text(代码)、.data(数据)、.rdata(只读数据,字符串常量常存放于此)等节区是后续字符串提取和交叉引用查找的范围。本实验中file命令输出"PE32 executable for MS Windows 4.00 (GUI), Intel i386, 3 sections",文件格式、运行平台、界面子系统三个结论即全部来自PE头。

1.2 壳与脱壳

加壳是用压缩或加密手段包裹原始PE文件,运行时先由壳代码自解密/解压,再跳转执行原始程序入口。加壳后磁盘上的.text节是密文或压缩数据,直接对其做字符串提取只能得到乱码,因此加壳是对抗静态分析的第一道防线。查壳工具PEiD通过入口点字节特征和区段名识别壳类型(UPX壳的典型特征是区段名UPX0/UPX1)。脱壳分静态脱壳(脱壳机直接解开文件,如本实验使用的超级巡警)和动态脱壳(运行程序待其内存自解密后从内存转储)两条路线。

1.3 strings工具原理

strings顺序扫描文件,把连续达到最小长度(默认4)的可打印字节序列当作字符串输出。它不识别文件格式、不解析编码,因此有两个使用要点:其一,默认模式只提取ASCII,而VB6等程序的大量字符串以UTF-16LE宽字符(BSTR)存放,必须加-el参数才能提取;其二,导入表函数名、运行期符号也会被一并输出,需要人工分类筛选。

1.4 IDA交叉引用分析

IDA的反汇编结果不是扁平的代码清单,而是带交叉引用(xref)的图。标准分析路径为:Shift+F12打开字符串窗口寻找语义敏感的字符串;双击字符串跳到数据段,按X列出所有引用它的代码位置;跳到引用处后按F5(或阅读流程图/汇编)理解校验逻辑。字符串本身只是"尸体",引用它的代码才体现"行为"——例如仅凭字符串窗口只能猜测"I know the secret"是口令,追到strcmp(argv[1], "I know the secret")才确认它的校验方式。

1.5 IRC协议

IRC(Internet Relay Chat)是基于TCP的实时文本群聊协议,采用客户端/服务器架构,频道(Channel)即群聊房间,僵尸网络偏爱它是因为协议简单、纯文本、可自建服务器、频道天然适合一对多广播指令。客户端加入IRC网络时依次发送:NICK <昵称>(设置昵称)、USER <用户名> <模式> <未用> :<真实名>(注册用户信息)、JOIN <#频道>(加入频道)。常用端口为TCP 6667(及6660-6669区间),抓包时以"tcp port 6667"过滤即可捞出僵尸网络C&C流量。

1.6 僵尸网络

僵尸网络(Botnet)是被攻陷主机(僵尸/Bot)在攻击者(牧牛人/Botmaster)通过C&C信道统一指挥下组成的网络。攻击者无需逐台登录被控机,在频道中发布一条命令即可让大量僵尸同时执行。常见用途包括DDoS攻击、发送垃圾邮件、窃取信息、点击欺诈、挖矿以及作为跳板攻击第三方。典型生命周期为:扫描打洞→漏洞利用植入bot程序→bot主动回连C&C加入频道→接收指令执行任务。

1.7 网络取证分析方法

面对抓包数据回答"发生过什么",核心思路是统计先行、会话跟进、时间线定因果:先按端口、源IP、会话做频次排序,找出"谁最活跃、哪个端口最反常";再用会话列表区分"建成且有数据"与"只有SYN的试探";然后找到标志性事件(如蜜罐首次外连C&C),回溯之前的密集交互锁定突破口;最后导出嫌疑会话,在Wireshark中追踪TCP流直接阅读载荷内容,拿到实锤证据。

2. 实验内容

本实验包含四个任务:

任务一:对rada恶意代码样本进行文件类型识别、脱壳与字符串提取,获得编写者信息。涉及工具:PEiD、超级巡警脱壳机、file、md5sum、strings。

任务二:使用IDA静态分析crackme1.exe与crackme2.exe,寻找特定输入使其输出成功信息。

任务三:对已脱壳的rada样本进行完整分析,回答样本摘要、目的、特性、反分析技术、恶意代码分类、相似工具、开发者溯源、检测方法等8个问题。采用动态观察(Process Explorer)与静态分析(strings、IDA)相结合的方法。

任务四:对Snort蜜罐主机5天网络数据(botnet_pcap_file.dat,54536个数据包)进行取证分析,回答IRC与僵尸网络概念、蜜罐通信过的IRC服务器、访问主机数、攻击源IP、被攻击端口、攻击是否成功及如何成功等7个问题。涉及工具:capinfos、tshark、Wireshark。

3. 实验过程

3.1 任务一:rada文件类型识别、脱壳与字符串提取

3.1.1 查壳

将rada.rar(密码rada)解压到已加入Defender排除项的目录,先不运行样本,用PEiD v0.95打开RaDa.exe,结果如图1-1:

由图可得三条结论:①文件格式为PE32 executable(Windows可执行文件);②运行平台为Intel 80386(32位),子系统Win32 GUI;③加壳工具为UPX 0.89.6-1.02/1.05-2.90(Markus & Laszlo压缩壳)。

3.1.2 Kali交叉验证

将样本通过SCP传入Kali虚拟机(文件传输过程的排障见第4节),执行file与md5sum交叉验证:

file ~/RaDa.exe
# PE32 executable for MS Windows 4.00 (GUI), Intel i386, 3 sectionsmd5sum ~/RaDa.exe
# caaa6985a43225a0b3add54f44a0d4c7  /home/kali/RaDa.exe

结果如图1-2,与Win11侧PEiD结论一致。

3.1.3 脱壳

使用超级巡警虚拟机自动脱壳器V1.3载入RaDa.exe,点击"给我脱"后提示"脱壳成功!",输出路径为D:\rada\rada\RaDa_unpacked.exe(图1-3)。脱壳产物按学号命名为RaDa_unpacked_20242326.exe。

脱壳判据:再次用PEiD检查,壳特征消失,识别为Microsoft Visual Basic 5.0/6.0编译(图1-4),且文件体积由20KB明显增大,说明压缩壳已被解开。

补充说明:曾尝试教材推荐的upx -d命令脱壳,报错CantUnpackException: file is modified/hacked/protected,说明该样本的UPX壳被针对性修改、带有防自动脱壳保护,故改用超级巡警完成静态脱壳。这一失败经历同时成为任务三问题(4)中"反分析技术"的实证。

3.1.4 字符串提取找作者

在Kali中对脱壳产物执行字符串提取并过滤作者相关关键字:

strings ~/RaDa_unpacked_20242326.exe | grep -iE "Raul|Siles|Perez|copyright|2004"
# (c) Raul Siles & David Perez
# SotM 32 - September 2004

结论:rada恶意代码的编写者为Raul Siles && David Perez,样本出自2004年9月的SotM 32。"SotM"的含义在任务三静态分析时找到出处(见3.3问题7)。

3.2 任务二:IDA分析crackme1.exe与crackme2.exe

3.2.1 crackme1.exe

第一步:盲跑确定参数个数。不带参数运行输出"I think you are missing something.",带一个错误参数输出"Pardon? What did you say?"(图2-1),说明程序要求恰好1个命令行参数。

第二步:字符串窗口找突破口。将crackme1.exe载入IDA Free,分析完成后Shift+F12打开字符串窗口,在两条失败提示之间夹着语义突兀的"I know the secret",旁边还有成功信息"You know how to speak to programs, Mr. Reverse-Engineer"。

第三步:交叉引用定位校验逻辑。双击"I know the secret"跳到数据段,按X查看交叉引用,双击引用跳到main函数(sub_401280)内的比较代码。流程图如图2-2:中间基本块将字符串与argv[1]压栈调用strcmp,比较结果决定跳转——相等则走向右下分支输出成功信息,否则按参数个数分别输出两条失败提示。

由于使用的IDA Free 5.0不含Hex-Rays反编译器,无法按F5生成伪代码,上述逻辑通过流程图与汇编指令(cmp [ebp+argc],2校验参数个数、push offset aIKnowTheSecret、call strcmp、test/jz分支)直接读出,等效于如下伪代码:

if (argc == 2) {if (strcmp(argv[1], "I know the secret") == 0) {printf("You know how to speak to programs, Mr. Reverse-Engineer\n");return 0;}printf("Pardon? What did you say?");
} else {printf("I think you are missing something.");
}

第四步:cmd验证(图2-3):

crackme1.exe "I know the secret"
# You know how to speak to programs, Mr. Reverse-Engineer

3.2.2 crackme2.exe

流程与crackme1相同,但存在陷阱:直接用正确口令运行crackme2.exe "I know the secret",输出仍是"I have an identity problem."(图2-4),即口令正确也被拒绝。

在IDA字符串窗口中,比crackme1多出两个关键串:"crackmeplease.exe"与"I have an identity problem."。对"crackmeplease.exe"按X追交叉引用,得到图2-5的流程图:main函数存在连续两层比较——第一层将argv[0](程序运行时的文件名)与"crackmeplease.exe"比较,通过后第二层才比较argv[1]与"I know the secret";最右侧还可见成功信息不是明文存储,而是经逐字节异或0x42解码后输出,属于字符串级混淆。

破解:复制改名后运行(图2-6):

copy crackme2.exe crackmeplease.exe
crackmeplease.exe "I know the secret"
# We have a little secret: Chocolate

一个值得注意的细节:最初以带路径的方式(D:\rada\rada\crackmeplease.exe)运行时第一层校验仍失败,因为argv[0]保存的是命令行第0项,带路径运行会使strcmp精确比对"crackmeplease.exe"失败;先cd进入所在目录再直接运行才通过。这说明该校验比较的是运行名本身而非文件真实名称。

3.3 任务三:rada样本完整分析(8问)

(1)二进制文件摘要

对样本的基本识别信息汇总如下表(可用于同一样本的识别与比对):

文件类型:PE32 executable(GUI),Intel 80386,3个节区;运行平台:32位Windows;加壳样本大小20992字节(约20.5KB),脱壳后大小约68KB;MD5:caaa6985a43225a0b3add54f44a0d4c7;加壳情况:UPX 0.89.6(壳被修改,标准upx -d无法脱壳);编译时间戳:Sat Oct 30 07:59:58 2004(由Process Explorer Image页获得,见图3-2)。脱壳后体积从20KB涨至68KB是压缩壳的典型表现。哈希值是样本的"身份证",同一文件任何改动都会改变哈希;但哈希只能精确比对已知样本,样本被修改一个字节即失效,这正是问题(8)需要多种检测方法互补的原因。

(2)样本的目的

综合静态与动态证据,样本目的是建立远程控制通道:使目标主机长期驻留,按攻击者通过HTTP下发的指令执行操作。证据链:

① 脱壳样本的宽字符字符串(strings -el提取,图3-5)中包含完整C&C配置: http://10.10.10.10/RaDa 、指令页面RaDa_commands.html、upload.cgi/download.cgi等,说明其周期性从该页面取指令,并经cgi接口上传下载文件;

② "Upload file using http And multipart/form-data"字符串说明支持HTTP multipart文件上传——不只是收指令,还能把目标机上的文件传回C&C;

③ 版本资源中CompanyName赫然为"Malware"(图3-6),ProductName为RaDa;

④ 动态观察显示进程无界面静默运行,父进程为explorer.exe,运行后工作目录为C:\RaDa\tmp\(图3-2)。

关于C&C地址:样本中的C&C为内网地址10.10.10.10,字符串中还留有 http://10.、http://192.168. 、http://172.16.三个私网网段前缀,推测样本分发者针对封闭实验环境做了改造,支持按部署环境配置C&C。

(3)样本的不同特性

① 传播性:无自我复制、无邮件/共享传播逻辑,依靠人工投递或攻击者种植;运行后仅在本地落盘。

② 驻留性:动态观察到运行后立即创建C:\RaDa\bin\与C:\RaDa\tmp\目录,并在bin\下释放自身副本RaDa.exe(21KB);释放副本的时间戳被伪造成2008/12/23(图3-4)——样本编译于2004年、运行日是2026年,用固定旧时间戳降低文件在按时间排序的目录列表中的显眼程度,属于反取证手法;字符串中存在HKLM\Software\Microsoft\Windows\CurrentVersion\Run\注册表路径,具备自启动配置能力(实际写入由安装分支触发)。

③ 远程控制:字符串中含有--commands、--cgipath、--cgiget等参数及RaDa_commands.html指令页面,对应安装、卸载、用法、配置、执行、退出等远控指令语义;取指令走HTTP GET。

④ 攻击能力:upload.cgi/download.cgi构成双向文件通道,支持上传(multipart)与下载,具备释放并运行任意内容的能力。

动态观察补充(Process Explorer,图3-1、3-2、3-3):进程静默无窗口运行;Image页路径旁标注"Image is probably packed"(加壳的直接证据);TCP/IP页为空(图3-3)。这两个"空"与"packed"并非异常而是互相印证——C&C是IP字面量故不触发DNS,10.10.10.10在当前网络中不存在故TCP连接失败,进程因此表现得像没有联网。"静态发现它要回连+动态看到连不上"的组合,比单看任何一侧都更接近样本行为的真实全貌。

(4)防止被分析或逆向工程的技术

样本采用了至少两种反分析/反逆向技术,均有实证:

① 修改版UPX加壳:对加壳样本直接提取字符串只能得到乱码,必须脱壳后才能分析;且壳被针对性修改——upx -d报错CantUnpackException: file is modified/hacked/protected,Process Explorer亦提示"Image is probably packed"。壳不只是"有",还做了防自动化处理的加固。

② 释放文件时间戳伪造:C:\RaDa\bin\RaDa.exe落地即带2008/12/23的固定旧时间戳,干扰按时间排序的取证排查。

③ (同类手法补充)字符串宽字符存放:样本为VB6程序,关键字符串以UTF-16LE存放,用默认ASCII模式的strings提取不到C&C地址等关键信息,必须加-el参数,这也是一种隐匿手段。

(5)恶意代码分类

判定为后门程序(Backdoor)/僵尸程序(Bot)。理由:样本不自我复制,可排除病毒与蠕虫;无伪装成正常软件诱导安装的投递逻辑,不属于典型木马投递型;其核心行为是静默驻留并等待远程指令、具备HTTP取指令与文件上传下载能力,符合后门程序的典型特征;若被接入统一指挥的C&C(如IRC频道,任务四即此类),同一批受控主机即构成僵尸网络。本样本"指令页面+取回执行"的设计正是单Bot形态。

(6)具有相似功能的已有工具

① 冰河/灰鸽子:2000年代国内著名远程控制木马(RAT),具备静默驻留、文件上传下载、远程执行命令能力,与本样本能力集高度重合;② SubSeven/Back Orifice 2000:早期Windows后门标杆,支持进程隐藏、注册表自启动、双向文件传输;③ PsExec:Sysinternals合法管理工具,亦常被攻击者滥用——任务四蜜罐被攻陷的过程中攻击者实际使用的就是它(上传PSEXESVC.EXE并创建服务),与本样本"释放exe并运行"的驻留思路同构。

(7)能否调查出开发作者

可以给出署名,但需讨论可信度:脱壳样本字符串明确署名"(c) Raul Siles && David Perez",且字符串中含有 http://www.honeynet.org/scans/index.html ,与"SotM 32 - September 2004"互相印证——该样本出自Honeynet Project第32期Scan of the Month分析挑战,署名为参赛分析者/出题者。

但署名不等于事实:二进制中的版权字符串可随意伪造,攻击者完全可以借用他人名字署名以嫁祸或蹭名。可靠的溯源需要限定条件:①样本未加壳或已成功脱壳(本实验满足);②署名与外部可验证信息相互印证(如Honeynet官网的SotM 32存档页面、作者本人公开报告、样本在其他公开分析文献中的一致归属);③若能进一步获取C&C基础设施注册信息、编译环境残留的语言/时区元数据,可信度更高。反之,只有壳内字符串而无任何旁证时,署名只能作为线索,不能作为结论。

(8)至少5种检测方法

① 哈希黑名单:将样本MD5/SHA256与已知恶意样本库精确比对,本样本MD5 caaa6985a43225a0b3add54f44a0d4c7入库即报。局限:样本改动一个字节哈希即变,需配合其他方法。

② 查壳启发:"可执行文件+UPX壳"本身就是高危启发项,PEiD可识别UPX,Process Explorer提示"probably packed",可制定"加壳+联网/写注册表"组合规则。

③ 特征码/签名:提取样本独有字节序列制作签名,如魔改UPX壳的特有字节、配置初始化代码序列,适合检出未变形的已知家族样本。

④ YARA规则:基于字符串组合匹配检出同类样本,如"RaDa_commands.html + upload.cgi/download.cgi + --commands参数"组合出现即可命中该家族。

⑤ 主机行为检测(HIDS):监控创建C:\RaDa等可疑目录、在系统路径释放可执行文件、写入Run自启动键、伪造文件时间戳等行为,命中即告警。

⑥ 网络检测(NIDS):以Snort等制定规则,匹配对*/RaDa_commands.html的HTTP GET请求等C&C特征,在流量侧发现已感染主机(与任务四的蜜罐思路呼应)。

3.4 任务四:蜜罐取证分析(7问)

3.4.0 数据验证

先用capinfos验证数据源基本信息:

capinfos ~/botnet_pcap_file.dat

结果如图4-1:标准pcap格式,Ethernet封装,共54536个数据包,捕获时长429588秒(约4.97天),时间跨度2003年3月1日04:08至3月6日03:27,与题目"蜜罐5天数据"吻合。

(1)IRC是什么?加入IRC网络发送什么消息?常用哪些TCP端口?

IRC(Internet Relay Chat)是基于TCP的实时文本群聊协议,C/S架构:客户端连到IRC服务器,服务器之间互联成网,频道是群聊房间。僵尸网络偏爱IRC是因为协议简单纯文本、服务器可自建、频道天然适合一对多广播指令。客户端申请加入IRC网络时依次发送三条消息:NICK <昵称>(设置昵称)、USER <用户名> <模式> <未用> :<真实名>(注册用户信息)、JOIN <#频道>(加入频道,此后服务器把频道消息转发给该客户端)。IRC一般使用TCP 6667端口(常用范围6660-6669),抓包过滤tcp port 6667即可定位僵尸网络C&C流量。

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

僵尸网络是被攻陷主机(僵尸/Bot)在攻击者(牧牛人/Botmaster)通过C&C信道统一指挥下组成的网络。攻击者只需在频道发布一条命令,成千上万台僵尸即可同时执行。常见用途:DDoS攻击、发送垃圾邮件、窃取信息、点击欺诈、挖矿、作为跳板攻击第三方。典型生命周期:扫描打洞→漏洞利用植入bot→主动回连C&C加入频道→接收指令干活。任务四蜜罐数据完整记录了这一链条。

(3)蜜罐与哪些IRC服务器进行了通信?

tshark -r ~/botnet_pcap_file.dat -q -z conv,tcp | grep 6667

结果如图4-2:蜜罐172.16.134.191与5个IRC服务器(6667端口)发生过通信:

① 209.196.44.172:18700个包、收发合计约2.1MB,唯一深度参与的僵尸网络频道,即蜜罐实际"入群"的主C&C;② 63.241.174.144、③ 217.199.175.10:各有数次试探性连接(8~17个包);④ 209.126.161.29:多次尝试但0字节数据,服务器已失效;⑤ 66.33.65.58:多次尝试(3个包/次),握手未建成。后四者是Bot程序内置的备用/历史C&C轮询。

(4)多少不同主机访问了以209.196.44.172为服务器的僵尸网络?

tshark -r ~/botnet_pcap_file.dat -Y "ip.addr == 209.196.44.172" -T fields -e ip.src | sort -u | wc -l
# 2

结果如图4-3:统计口径为与209.196.44.172出现过IP层通信的不同源地址,共2个——服务器自身与蜜罐172.16.134.191。即外部只有蜜罐1台主机访问过这台僵尸网络服务器(其中9798个包为服务器下行指令流量,8902个包为蜜罐上行流量)。蜜罐是该C&C当时在线的活跃僵尸之一。

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

tshark -r ~/botnet_pcap_file.dat -Y "ip.dst == 172.16.134.191" -T fields -e ip.src | sort | uniq -c | sort -rn | head -30

结果如图4-4:5天内向蜜罐发送过数据包的源IP共166个。按包数排名头部为:209.196.44.172(9798,C&C指令下发,身份特殊不计攻击)、207.172.16.150(8985)、24.197.194.106(4549)、61.111.101.78(1433)、210.22.204.101(1165)、217.151.192.231(1028)等。166个源IP中绝大多数是Internet背景噪音(蠕虫扫描、漏洞探测),真正"打进来"的藏在高频交互的几个IP中,由问题(7)的时间线定案。

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

tshark -r ~/botnet_pcap_file.dat -Y "ip.dst == 172.16.134.191" -T fields -e tcp.dstport | sort -n | uniq -c | sort -rn | head -20

结果如图4-5,蜜罐被攻击的TCP目标端口按频次头部为:1152(9798,蜜罐上线后与C&C的IRC通道本地端口,非被攻击端口)、1061(8906,高频持续数据传输,疑似二级控制通道)、80(4488,HTTP探测)、445(2547,SMB——Windows文件共享,本次突破口)、1077(1020)、4899(490,RAdmin远程管理,常被攻击者用作远控)、139(294,NetBIOS会话服务,与445同类)及大量10xx高端口(扫描器逐端口敲门)。UDP侧有137(NetBIOS名字服务)与1434(SQL Server监听端口,Slammer蠕虫特征端口)等。对应漏洞集中在Windows 2000的SMB/NetBIOS服务、Web服务及第三方远程管理软件。

(7)哪些攻击成功了?如何成功的?

定位方法:蜜罐最终加入僵尸网络,必有"沦陷时刻"。找到它首次主动外连主C&C的时间,回溯之前的密集交互即可锁定突破口。

tshark -r ~/botnet_pcap_file.dat -Y "ip.src == 172.16.134.191 && ip.dst == 209.196.44.172 && tcp.flags.syn == 1 && tcp.flags.ack == 0" -T fields -e frame.time | head -3
# 2003-03-05 23:23:18.775020

如图4-6,蜜罐于03月5日23:23:18首次主动向209.196.44.172发起SYN,即僵尸上线时刻。

回看当晚445端口:将蜜罐与该时段交互最密集的攻击者会话导出(图4-7):

tshark -r ~/botnet_pcap_file.dat -Y "ip.addr == 172.16.134.191 && ip.addr == 61.111.101.78" -w ~/attack_20242326.pcap
# 导出2519个包,2003-03-05 22:33:49 ~ 22:38:29,约4分40秒

在Wireshark中打开attack_20242326.pcap,过滤smb后查找字符串PSEXESVC,定位到攻击载荷(图4-8):313/315行为对\System32\PSEXESVC.EXE的QUERY_PATH_INFO查询,317行Delete Request删除旧文件,321行NT Create AndX Request创建新文件,325行Write AndX写入数据,308-310行为SVCCTL服务句柄操作。

右键追踪TCP流(图4-9),载荷完整可读:SMB协议协商(PC NETWORK PROGRAM 1.0→LANMAN1.0→NT LM 0.12)→NTLMSSP认证(域用户OIL-6II61N0JWTK\Administrator,主机名PC0191,Windows 5.0即Windows 2000)→经ADMIN$管理共享向\System32\目录写入PSEXESVC.EXE(PsExec工具的服务端组件),流末尾可见被传输文件的MZ头与"This program cannot be run in DOS mode"及PE头,证明写入的是完整可执行文件。

再过滤svcctl(图4-10):396行打开\svcctl命名管道,398行DCE/RPC绑定SVCCTL V2.0接口,400行OpenSCManagerA打开服务管理器,402行CreateServiceA创建服务,404行响应成功——攻击者随后启动该服务,完成远程执行。

结论:攻击者61.111.101.78于03月5日22:33对蜜罐172.16.134.191的445端口(SMB服务)发起持续约4分40秒的密集会话,通过NTLM认证后利用ADMIN$共享向\System32\写入PSEXESVC.EXE并创建、启动服务(标准PsExec手法),获得蜜罐控制权;45分钟后(23:23:18)蜜罐首次主动外连209.196.44.172:6667加入IRC频道,完成僵尸上线。"写入服务程序+创建服务"的完整会话与随后的C&C外连在时间线上前后衔接、互为因果,构成攻击成功的直接证据链。成功原因:Windows 2000的SMB服务暴露于公网且缺乏对远程服务创建的防护,攻击者获得有效账户凭据后即可直接投放并启动服务程序。

4. 问题及解决方案

问题1:Kali虚拟机无法与Win11互传文件。一开始按习惯使用VMware共享文件夹和拖拽,但/mnt/hgfs目录不存在,尝试安装open-vm-tools时发现Kali没有外网(apt update卡在0%),ping网关不通,且共享文件夹依赖的组件装不上。反复排查NAT网段、重启DHCP/NAT服务、修改VMnet8网卡IP均不能让双向ping通。

解决方案:放弃共享文件夹路线,改用SSH/SCP。Kali自带sshd,在Win11上用scp命令直接传输:scp D:\rada\rada\RaDa.exe kali@192.168.232.128:~/,四个样本文件一次传齐。有趣的是Win11始终ping不通Kali(ICMP被拦截),但SCP走TCP 22端口完全正常——"ping不通≠网络不通",这个反直觉现象让我对连通性排查有了新的认识。

问题2:Windows Defender查杀实验样本。运行RaDa.exe后程序立即被Defender隔离(类别:特洛伊木马),虽然已将D:\rada加入排除项,但样本运行后动态释放的C:\RaDa\bin\RaDa.exe不在排除范围内,照样被杀。

解决方案:从保护历史记录中还原被隔离文件(也可从Kali用scp取回),实验期间临时关闭实时保护,并以管理员身份运行样本,观察完成后恢复防护设置。

问题3:RaDa运行报VB6运行时错误"Runtime error 70: Permission denied"。样本运行后要创建C:\RaDa\bin目录并写入副本,Win11默认权限不足导致报错。

解决方案:以管理员身份打开cmd,先手动执行mkdir C:\RaDa\bin和mkdir C:\RaDa\tmp建好目录,再以管理员身份运行RaDa.exe,样本成功释放副本。这个报错对话框也侧面印证了样本正在执行"建目录、写文件"的动作。

问题4:crackme2改名后仍破解失败。第一次copy命令漏写目标文件名导致复制未生效;补复制后以带路径方式运行,argv[0]为完整路径,与"crackmeplease.exe"精确比对失败。

解决方案:修正copy命令后,先cd /d进入所在目录,再直接以crackmeplease.exe "I know the secret"运行,两层校验同时通过,输出We have a little secret: Chocolate。

问题5:strings默认模式提取不到关键字符串。对脱壳样本grep http一无所获,一度以为样本不含URL。

解决方案:该样本为VB6程序,字符串以UTF-16LE宽字符存放,改用strings -el后C&C地址、注册表键、文件路径全部出现。教训:分析Windows程序时务必记得宽字符模式。

5. 学习感悟

本次实验让我深刻体会到证据链的重要性。单独看动态监控或静态字符串都只能得到片面信息,结合起来才能还原恶意代码行为;蜜罐流量也需要结合时间线梳理,才能定位关键线索。工具会迭代更新,但静态与动态交叉验证、按时间线取证分析的思路,是本次实验最重要的收获。

第二个收获:攻防就是互相卡对方的省事思路。我们想直接看字符串,攻击者就把字符串加密成宽字符;想用命令一键脱壳,他就改壳防自动脱壳;想靠时间找新文件,他就篡改时间戳;crackme里的提示信息也做了异或加密。攻击者专门在我们图方便的地方设置障碍,看懂这些,我才明白攻防的这种不对等。反过来,我们做防御检测,也可以重点盯着这些容易被利用的地方。

其实在做实验之前,我参考了成绩好的同学的报告,我想知道我具体都要干些什么。翻到花花绿绿的实验截图,而且软件都没见过,更愁了,我以为这些软件也和之前的软件一样要花好久的时间去配环境,又想拖一天。。。但是人性尚存,没拖。。做着发现完全是自己吓自己,解压就能用,所以不要放大对未知事物的恐惧。另外我发现了给实验截图命名的时候不能有1.2和1.2(2)共存,不然就无法提取图片,大家如果遇到同样的问题可以重命名截图。

6. 参考资料

[1] 诸葛建伟. 网络攻防技术与实践. 电子工业出版社.(crackme练习与恶意代码分析方法的主要依据)

[2] Honeynet Project. Scan of the Month #32. https://www.honeynet.org/scans/index.html(样本RaDa.exe的出处与原始挑战页面)

[3] Microsoft Learn. Process Explorer(Sysinternals官方文档). https://learn.microsoft.com/sysinternals/downloads/process-explorer

[4] Wireshark官方文档. https://www.wireshark.org/docs/(tshark统计与追踪TCP流)

[5] Raul Siles, David Perez. RaDa样本分析(SotM 32参赛报告).(作者署名溯源旁证)