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

1.实践内容

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

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

  • 分析一个自制恶意代码样本rada,并撰写报告,回答相关问题

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

2.实践过程

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

2.1.1 分析原始rada样本

  • 在kali虚拟机中使用file命令分析目标文件

    file RaDa.exe
    

    7ac4b7e124df28bb156c320443e2df5d

    RaDa.exe文件是一个32位Windows平台的可执行程序,详细信息如下:

    • PE32 executable for MS Windows 4.00 (GUI)
      表示这是采用PE32格式(Windows32位可执行文件格式)的程序,运行在Windows系统上,且是带图形界面(GUI)的程序。

    • Intel i386
      说明该程序是为32位x86架构(Intel 386 及兼容处理器) 编译的,只能在32位 Windows 系统运行。

    • 3 sections
      表示文件包含3个节区(PE文件的代码、数据等会被分成不同“节”,比如.text代码节、.data数据节等),节数较少可能暗示文件被加壳/压缩过。

  • 在Windows主机中使用软件PEiD分析目标文件

    315ce7444d16130967a0068447137dcb

    • 入口点:程序执行的起始地址(图中为0000FD20),加壳后的程序入口点通常会被壳修改。

    • EP 段:入口点所在的节区为JDR1(壳的自定义节区)。

    • 文件偏移:入口点在文件中的偏移地址为00004120

    • 首字节:入口点处的前几个字节数据为60, BE, 00, C0,是识别加壳/编译器的特征码之一。

    • 连接器版本:程序编译时使用的链接器版本为6.0,通常对应Visual Studio等开发工具的版本。

    • 子系统:程序运行的系统环境为Win32 GUI,表示这是Windows图形界面程序。

    • UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo:表明该程序使用UPX壳进行了压缩加壳。

2.1.2 分析脱壳后的RaDa样本

  • 在Windows主机中使用超级巡警脱壳机对RaDa恶意代码样本进行处理

    1bf109c059f87b414cec881a2538f12d

  • 在kali虚拟机中再次使用file命令分析脱壳后文件

    8e18860d6527b60e65f72e48766f2dd7

    需要关注的是,此时sections属性变为4

  • 在kali虚拟机中使用字符串提取工具分析脱壳后文件

    23e324fae0ca4c60eb44672d5690fd16

    strings RaDa_unpacked.exe > RaDa_unpacked_string.txt
    
  • 在kali虚拟机中打开文件RaDa_unpacked_string.txt,最终可从中读出以下内容

    0e03b9b89467e128a4b7c28e67136b53

    d7ccb03b620af9d3999e761a44889473

    !This program is the binary of SotM 32..
    程序来源:SotM 32

    (c)Raul Siles && David Perez
    作者姓名:Raul Siles和David Perez

    SotM 32 - September 2004
    发布日期:2004年9月

2.2 使用IDA Pro静态或动态分析所给的exe文件

2.2.1 分析Crackme1.exe

  • 尝试运行,初步判断

    c369036002a550f0469abdacc843031f

    • 输入一个参数→“Pardon? What did you say?”

    • 输入两个参数→“I think you are missing somthing.”

  • 分析文件(strings)

    2d712cbe70a9bd371edfaa32a53555b5

    能够看到前面的两个String,此外还出现了“I know the secret”和“You know how to speak to programs,Mr. Reverse-Engineer”两句,这是啥意思?没搞懂

  • 分析文件(IDA View-A)

    39df94c9a816fb6265e8df7c4d3b57bf

    简单查看一下文件的运行逻辑(实则是也没看懂)

  • 分析文件(Function Calls)

    c37ee581d744a2d62691082dc884d50a

    查看函数调用图(这里稍微清晰一些了),能够看到一个字符串对比函数和一个输出函数在一起,好像可以仔细分析一下

  • 分析文件(Function -> IDA View-A)

    79a7be5a1ac2bf53cf03c6b83c572f1b

    查看这个函数的调用图,看到了之前莫名其妙两句话出现了,尝试理解之后发现是需要传参为“I know the secret”

  • 破解文件

    fd0913d7ccc29a42ad45962938e55855

    成功!(虽然按部就班没啥创新,但是还是莫名其妙地兴奋)

2.2.2 分析Crackme2.exe

  • 尝试运行,初步判断

    2501f4c6fa8f8b3553bd4c46efc830d2

    跟之前一样,但这里尝试了上一次破解的结果,假装自己未卜先知

  • 分析文件(strings)

    a94c98c243b598d4943eee7336549921

    能够看到前面的两个String,此外还出现了“I know the secret”和“crackmeplease.exe”两句

  • 分析文件(Function Calls)

    e2c03b9e07707d96a5e8111db3e3a76b

    此处比crackme1.exe多了一个strcmp函数

  • 分析文件(Function -> IDA View-A)

    7f04243ca999837b88ae6e2daaff91a7

    原来是先对比了一下这个文件名,用户输入的文件名需与"crackmeplease.exe"匹配

  • 破解文件

    b3ce833016cec1f4c149ecfff83a7d58

    成功

2.3 分析恶意代码样本RaDa,并撰写报告

2.3.1 分析基本信息

9f2a201b05325a499506e70e10f08ed9

  • 使用file命令识别文件类型

    file RaDa.exe
    
  • 使用md5sum命令计算文件的md5摘要值

    md5sum RaDa.exe
    
  • 使用exiftool命令提取文件元数据查看生成时间

    exiftool RaDa.exe | grep "Time Stamp" # 过滤了实践戳
    

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

  • 在IDA Pro中分析脱壳后的RaDa文件,借助AI工具分析函数sub_404FB0
    4475efbb230e16b677056eb547949ec1

  • 具体分析如下:

    1. 初始化C2服务器基础路径:"http://10.10.10.10/RaDa"
    mov     edx, offset aHttp10_10_10_1 
    mov     ecx, offset dword_40C02C
    call    esi ; __vbaStrCopy
    
    2. 初始化命令页面:"RaDa_commands.html"
    mov     edx, offset aRada_commands_
    mov     ecx, offset dword_40C030
    call    esi
    
    3. 初始化CGI目录:"cgi-bin"
    mov     edx, offset aCgiBin
    mov     ecx, offset dword_40C034
    call    esi
    
    4. 初始化下载接口:"download.cgi"
    mov     edx, offset aDownload_cgi
    mov     ecx, offset dword_40C038
    call    esi
    
    5. 初始化上传接口:"upload.cgi"
    mov     edx, offset aUpload_cgi
    mov     ecx, offset dword_40C03C
    call    esi
    
    6. 初始化本地临时目录:"C:\\RaDa\\tmp"
    mov     edx, offset aCRadaTmp
    mov     ecx, offset dword_40C040
    call    esi
    
    7. 初始化注册表路径:"HKLM\\Software\\Microsoft\\Windows\\Current..."
    mov     edx, offset aHklmSoftwareMi
    mov     ecx, offset dword_40C04C
    mov     ds:word_40C048, 3Ch  ; 手动设置字符串长度=60(0x3C)
    call    esi
    
    8. 初始化注册表项名称:"RaDa"
    mov     edx, offset aRada
    mov     ecx, offset dword_40C050
    call    esi
    
    9. 初始化注册表值类型:"REG_SZ"
    mov     edx, offset aReg_sz
    mov     ecx, offset dword_40C054
    call    esi
    
    10. 初始化恶意程序目录:"C:\\RaDa\\bin"
    mov     edx, offset aCRadaBin
    mov     ecx, offset dword_40C060
    mov     ds:word_40C058, 0FFFFh  ; 字符串长度设为最大值
    call    esi
    
  • 根据高频出现的 “RaDa” 字符串贯穿路径、注册表项,可以确定这是名为 RaDa 的工具模块,而非系统原生组件;

  • Web 类字符串(download.cgi/upload.cgi/cgi-bin)是Web服务器端文件传输的核心标识:

    • cgi-bin 是 Apache/Nginx 等 Web 服务器存放可执行脚本的标准目录;

    • download.cgi/upload.cgi 是典型的 CGI 脚本命名,分别对应 “文件下载”“文件上传” 功能;

    • RaDa_commands.html 指向 “命令交互页面”,是控制端与本机交互的入口;

  • 本地路径(C:\RaDa\tmp/C:\RaDa\bin)是工具的本地存储载体:

    • tmp 目录用于存放临时文件(如下载的恶意文件、上传的待传输文件);

    • bin 目录用于存储工具本体或核心执行组件。

总结:该二进制文件是RaDa恶意后门的核心模块,核心目的是:通过Web端CGI脚本实现对本机的远程文件上传/下载控制,并通过写入Windows系统级注册表自启项实现持久化,长期控制目标主机。

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

  • 技术实现上
    • VBA/Visual Basic编译特征
      核心调用__vbaStrCopy(VBA专属字符串复制函数),属于VB编译的32位二进制文件,符合 VB程序“字符串集中初始化”的典型特征;
    • 硬编码配置主导
      所有核心路径(C:\RaDa\tmp)、CGI脚本名(upload.cgi)、注册表项均为硬编码,无外部配置文件依赖,可免配置直接运行;
    • 全局数据段存储
    • 字符串均写入程序ds段(0x40C030~0x40C054),属于全局静态数据,无动态生成/加密逻辑;
  • 功能行为上
    • Web端远程文件传输
      内置download.cgi/upload.cgi/cgi-bin等CGI脚本标识,支持通过Web服务器实现“控制端-本机”的文件上传/下载;
    • 系统级持久化
      指向HKLM(本地机器)注册表分支(HKLM\Software\Microsoft\Windows\Current...),意图写入开机自启项,实现所有用户登录均运行的持久化;
    • 固定本地目录存储
      硬编码C:\RaDa\tmp(临时文件)、C:\RaDa\bin(工具本体),形成“存储-执行”的本地闭环,目录命名无明显恶意特征;
  • 安全属性上
    • 低级别恶意但实用性强
      无反调试、加密通信等高级规避逻辑,但具备 “远程控制 + 持久化” 核心恶意能力;
    • 高权限诉求
      操作HKLM注册表需管理员权限,远超合法工具的 “最小权限” 原则;
    • 隐蔽性设计
      目录/注册表项以 “RaDa” 命名,无敏感关键词,不易被人工排查或基础查杀识别;

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

  • UPX 加壳混淆
    通过 PEiD 工具已验证,程序使用 UPX(常用可执行文件压缩壳)进行加壳,目的是压缩代码体积、隐藏原始指令逻辑;
  • 基于VB编译
    VB程序的逆向难度略高于原生C/C++(需解析VBA运行时库调用),但这是语言特性而非主动反分析手段

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

  • 该样本为Web型后门(Web Shell衍生体)
    • 具备远程文件传输能力(download.cgi/upload.cgi 实现文件上传 / 下载);
    • 具备命令交互入口(RaDa_commands.html 支持控制端下发指令);
    • 具备系统级持久化能力(写入HKLM注册表自启项),完全符合RAT的核心特征。

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

  • 灰鸽子、冰河

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

  • 可以,通过前文的strings命令就可以(详见前文2.1.2)

2.3.8 给出至少5种检测该恶意软件的方法

  • 基于静态特征码的检测
    • 提取恶意样本中唯一且不可替代的二进制字节序列(特征码),通过比对待检测文件的字节数据,匹配特征码以识别恶意程序。该方法是反病毒领域最基础、最成熟的检测手段。
  • 基于字符串规则的检测(针对硬编码特征)
    • 该恶意样本的核心功能依赖大量硬编码字符串,通过检测文件中 “恶意字符串组合规则”,而非单一字符串,识别恶意程序,抗特征篡改能力优于静态特征码。
  • 基于行为的动态检测
    • 在隔离的沙箱环境中运行样本,监控其运行时的文件、注册表、网络行为,通过 “恶意行为组合” 识别样本,可精准识别变种样本(无论特征如何修改,核心行为不变)。
  • 基于代码编译特征的检测(针对VB/VBA特征)
    • 该样本基于VBA/Visual Basic编译,具备独特的 “VBA运行时库调用+字符串复制逻辑”,通过识别这些编译特征结合恶意功能,精准定位样本。
  • 基于注册表监控的实时检测(针对持久化行为)
    • 该样本的核心恶意目的之一是通过HKLM注册表实现系统级持久化,通过实时监控注册表敏感路径的操作,在样本执行持久化时立即识别并阻断。

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

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

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

IRC(Internet Relay Chat)是一种基于文本的实时通信协议,允许多用户通过频道(channels)或私聊进行群组交流。它诞生于1988年,是早期互联网中广泛使用的聊天系统。

当客户端申请加入IRC网络时,会发送以下核心消息(基于IRC协议规范):

  • PASS(可选):发送密码(如果网络需要认证);
  • NICK:设置用户的昵称;
  • USER:提供用户名和真实姓名。

常用TCP端口为6667(默认的IRC明文通信端口)和6697、7000(常见的IRC over SSL/TLS加密端口)。

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

僵尸网络(Botnet)是由恶意软件感染的计算机(“僵尸”或“机器人”)组成的网络,受攻击者(Botmaster)通过命令与控制服务器(C&C)集中控制。
常见用途:

  • 分布式拒绝服务攻击(DDoS):利用大量僵尸主机向目标发送流量,使其瘫痪。
  • 垃圾邮件分发:通过僵尸机器发送大量垃圾邮件。
  • 数据窃取:盗取信用卡信息、登录凭证等敏感数据。
  • 加密货币挖矿:占用受害者计算资源进行挖矿(Cryptojacking)。
  • 传播恶意软件:进一步感染其他设备,扩大僵尸网络规模。
  • 蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?

d2d1775a228e1b9e7bd8804df471a5ff
在Wireshark中打开botnet_pcap_file.dat文件,输入筛选条件ip.src == 172.16.134.191 and tcp.dstport == 6667,筛选发现四台IRC服务器,IP地址分别为:209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10

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

使用工具tcpflow对流量进行分析

  • 使用命令sudo apt install tcpflow安装工具
    189b7f14c4d912f2b5595cd08840e292

  • 使用命令tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667"对botnet_pcap_file.dat文件中IP为209.196.44.172的和端口为6667的流量进行定向筛选
    03b4dff586278acc32df7440387e0ea2

  • 使用命令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查看访问主机数量
    04940634755ef661433d9181aa8f224d

  • 哪些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 > 20232421dk.txt;wc -l 20232421dk.txt将攻击蜜罐主机的ip筛选并保存到txt中
2f687568370b339aed1eeac48d35df7e

  • 攻击者尝试攻击了那些安全漏洞?

在wireshark中点击协议-协议分级
ec661568fbcb8592e8d82f9031da720d
99.7%使用TCP,0.3%使用UDP
使用命令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 查看来自172.16.134.191的所有TCP流量的目标端口
使用命令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查看来自172.16.134.191的所有UDP流量的目标端口
81c63b537f042fce472213835eb2fd21
83ad14bd9171ad06ccab2b8f5449a658
对于TCP的分析结果可知,使用的端口有135(RPC,Windows远程过程调用)、139/445(SMB,Windows文件共享)、25(SMTP,简单邮件传输协议)、4899(Remote Administrator,远程控制软件)、80(HTTP,网页服务)。对于UDP的分析结果可知,使用的端口为137(NetBIOS,Windows网络邻居功能)。

  • 那些攻击成功了?是如何成功的?
    • TCP-80端口

    9171185a7e2130897d0718d4aca19ef5
    根据数据包可以看出Web服务器处理了80端口的这些请求,攻击成功

    • TCP-135端口

    d52262a9f1f7c7276b2f1940e4187c72
    根据数据包可以看出连接在完成三次握手后立即关闭,未见任何有效的RPC操作,攻击失败

    • TCP-139端口

    6d32d7948a4f1ea008d732e35df8fcad
    根据数据包可以看出连接完成了三次握手,但蜜罐在收到SMB请求后,立即回复了TCP RST包,会话中断,攻击失败

    • TCP-25端口

    2e314bb9c28dba2d95c9c7add9d99c66
    根据数据包可以看出连接建立后立即被 FIN, ACK关闭,并伴随大量TCP Retransmission(重传)包,表明通信中断,攻击失败

    • TCP-445端口

    8f57a7530a47e509e81b8aa1ee911321
    根据数据包可以看出攻击者成功建立了SMB会话,并执行了文件读取、目录枚举等操作,攻击成功

    • TCP-4899端口

    83694df5aef704239f4e75081c15a16d
    根据数据包可以看出前几次尝试被拒绝,但是之后成功建立连接并传输数据,攻击成功

    • UDP-137端口

    b47f9560218a9d0ab73c00a678d90784
    根据数据包可以看出攻击者通过发送 NBSTAT 查询,获取蜜罐的主机名、域名、工作组、MAC 地址等敏感信息,攻击成功

3.问题及解决方案

  • 问题1:在破解crackme2.exe的时候,修改文件名并传入参数但是依旧失败;
  • 问题1解决方案:powershell的命令在传入时需要加入“./”,会在运行的文件名前自动加上路径导致匹配不通过,使用cmd就可以直接执行crackmeplease.exe。
    6d1d7cdadfc82144981946aa4e7a0794

4.学习感悟、思考等

通过本次实践,我深刻体会到网络安全是攻防思维与技术工具的结合。逆向分析crackmeRaDa样本让我明白,工具只是起点,关键是在碎片化线索中构建逻辑闭环——从字符串、函数调用到行为意图,这过程如同侦探破案。恶意代码也从抽象概念变为可解构的工程实体,硬编码路径、注册表操作都成为理解其目的的清晰路标。网络取证分析则展现了攻击的完整链条:扫描、漏洞利用、持久化控制。每个成功的端口渗透背后,都是薄弱配置与已知漏洞的结合。这让我意识到,防御必须基于对攻击者视角的理解,从被动响应转向主动威胁建模。技术本身是双刃剑。在掌握分析能力的同时,更需建立对技术的敬畏与伦理边界。此次实践不仅提升了我的实战技能,更让我明确了未来作为安全从业者的责任——以攻促防,守护数字世界的安全底线。

参考资料

posted @ 2025-11-10 21:50  20232421邓锴  阅读(26)  评论(1)    收藏  举报