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

1.实验内容

  1. 恶意代码文件类型标识、脱壳与字符串提取
    对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者。

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

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

  4. 对Snort收集的蜜罐主机5天的网络数据源取证分析实践,回答一些问题

2.实验过程

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

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

  • 在kali中用file指令查看RaDa.exe文件。可以得到的信息是:RaDa.exe是一个适用于32位Windows系统的图形界面可执行程序,文件格式为PE32,适配Windows4.00及以上版本系统,且是带图形界面(GUI)的程序,针对Intel 386(即x86架构)编译,仅支持32位系统,文件内部包含3个区段。

屏幕截图 2025-11-03 160042

  • 在Windows中使用PEiD对RaDa.exe文件进行分析,可以看到RaDa.exe文件被加了UPX壳。

屏幕截图 2025-11-03 155359

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

  • 在Windows中使用超级巡警之虚拟机自动脱壳器对RaDa.exe文件进行脱壳处理,得到RaDa_unpacked.exe文件。

屏幕截图 2025-11-03 155631

屏幕截图 2025-11-03 161107

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

  • 在Windows中使用IDA Pro对RaDa_unpacked.exe文件进行分析,选择文件格式为Windows的PE Executable(上面用file指令得到的),在地址00403F7A处可以看到作者是Raul Siles && Dauid Perez,还可以在00403FD4处看到文件创建时间是September 2004。

屏幕截图 2025-11-03 160435(1)
屏幕截图 2025-11-03 160839(1)

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

2.2.1 分析crackme1.exe

  • 在kali中用file指令查看crackme1.exe文件。crackme1.exe文件与RaDa.exe文件相似,都是32位Windows系统可执行程序,但crackme1.exe文件是适用于的命令行(console)的。

屏幕截图 2025-11-03 164302

  • 在Windows PowerShell中添加不同参数尝试运行crackme1.exe,发现参数有1个时crackme1.exe的反馈与众不同。参数有1个时反馈"Pardon? What did you say?",其余情况反馈"I think you are missing something."。可以推测正确口令参数为1个。

屏幕截图 2025-11-03 165512

  • 使用IDA Pro分析crackme1.exe文件,在Strings页面可以查看crackme1.exe中出现的明文字符串,我们不仅发现了刚才出现的"Pardon? What did you say?"和"I think you are missing something.",还发现"I know the secret"和"You know how to speak to programs, Mr. Reverse-Engineer",其实此时就能合理推测前者是正确口令,后者是正确反馈。

屏幕截图 2025-11-03 170046

  • 点击View->Graphs->Function calls,查看整个程序的call flow,在函数sub_401280里发现了strcmp和printf,推测程序是用c语言写的,通过strcmp判断口令是否正确,并输出对应反馈。

屏幕截图 2025-11-03 165931
屏幕截图 2025-11-03 170143(1)

  • 点击Windows->Functions window,查看函数sub_401280。

屏幕截图 2025-11-03 170318

  • 通过阅读汇编指令,我们可以得知程序的运行流程:先判断包括文件名在内的参数是否一共有两个,若否,输出"I think you are missing something.";若是,继续判断--->再判断第二个参数是否为"I know the secret",若否,输出"Pardon? What did you say?";若是,输出"You know how to speak to programs, Mr. Reverse-Engineer"。

屏幕截图 2025-11-03 170548(1)

  • 带入参数“I know the secret”,果然得到反馈"You know how to speak to programs, Mr. Reverse-Engineer"。

屏幕截图 2025-11-03 170648

2.2.2 分析crackme2.exe

  • 查看Strings页面,这次多了一个“crackmeplease.exe”和“I have an identity problem.”

屏幕截图 2025-11-03 172933

  • 查看整个程序的call flow,在函数sub_401280里发现了strcmp和puts。

屏幕截图 2025-11-03 173050(1)

  • 查看函数sub_401280,这次的正确流程是:先判断包括文件名在内的参数是否一共有两个,若是--->判断文件名是否为"crackmeplease.exe",若是--->判断口令是否"为I know the secret",若是,调用puts输出正确反馈。

屏幕截图 2025-11-03 173251(1)

  • 复制crackme2.exe为crackmeplease.exe,并带上参数"I know the secret",得到正确反馈"We have a little secret: Chocolate"。(此处用cmd,不要用PowerShell,PowerShell的./会使文件名判断错误)

屏幕截图 2025-11-03 175058
屏幕截图 2025-11-03 175103

2.3 分析一个自制恶意代码样本rada,回答问题

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

  • 输入以下指令,可以看到输出显示RaDa.exe是一个PE32格式的可执行文件,适用于MS Windows 4.00(GUI 界面),基于Intel i386架构,包含3个段;生成的MD5哈希值为 caaa6985a43225a0b8add54f44a0d4c7;时间戳为2004:10:30 07:59:58+08:00。
file RaDa.exe   #文件类型

md5sum RaDa.exe   #md5摘要值

exiftool RaDa.exe | grep "Time Stamp"   #时间戳

屏幕截图 2025-11-09 215001

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

  • 在提供的分析工具ProcessExplorer中打开RaDa_unpacked.exe,分析其中内容,可以得知RaDa是恶意软件,具有远程控制与数据传输、持久化驻留、Smurf DDoS 攻击、注册表与系统操作等功能。

屏幕截图 2025-11-09 221334

屏幕截图 2025-11-09 221412

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

  1. 远程控制与数据传输
    通过HTTP协议连接攻击者的C&C服务器(http:// 10.10.10.10/RaDa),并利用RaDa_commands.html、download.cgi、upload.cgi等接口执行指令、下载恶意文件或上传受害主机数据。在本地创建C:\RaDa\tmp和C:\RaDa\bin目录,用于存储临时文件和自身程序。

  2. 持久化驻留
    修改Windows注册表自启动项(HKLM\Software\Microsoft\Windows\CurrentVersion\Run\RaDa),将RaDa.exe的路径(C:\RaDa\bin)写入其中,实现开机自动运行。

  3. DDoS攻击
    发起Smurf DDoS攻击:通过伪造受害主机的IP地址,向网络广播地址发送ICMP回显请求,利用网络中大量主机的响应数据包淹没目标,导致其服务瘫痪。这种攻击具有“反射 + 放大”特性,能以极低的攻击者带宽制造海量流量。

  4. 注册表与系统操作
    具备RegWrite、RegRead、RegDelete等注册表操作功能,可篡改系统配置;同时使用Scripting.FileSystemObject、Wscript.Shell等组件进行文件系统和系统命令的操作。

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

程序使用UPX壳对程序进行压缩和封装,使原始代码结构被隐藏,逆向工程师难以直接获取程序的真实逻辑、函数调用关系等信息,从而阻碍对程序功能如恶意软件的攻击流程、漏洞利用方式等的分析。

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

RaDa属于后门,因为它具备远程控制能力,通过http:// 10.10.10.10/RaDa等服务器接口,可执行download.cgi、upload.cgi等指令,实现对受害主机的远程操控;同时它会修改Windows注册表自启动项,确保程序开机自动运行,长期驻留系统。

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

之前用过的能够创建后门的工具有msfvenom和veil。

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

可以。上面已经展示了在IDA Pro里可以看到作者是Raul Siles && Dauid Perez。
还可以在Windows命令行中输入RaDa.exe --authors查看作者。

屏幕截图 2025-11-09 224338

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

  1. 基于静态特征码检测
    提取恶意软件的唯一指纹(文件哈希、特定字节序列、字符串特征等),与病毒库比对。可以计算RaDa.exe的哈希,在杀毒软件病毒库、威胁情报平台中查询,若匹配已知恶意样本则判定为威胁。

  2. 基于行为分析的动态检测
    监控程序运行时的异常行为(注册表篡改、网络通信、文件操作等),识别恶意操作模式。
    注册表监控:使用工具监控对HKLM\Software\Microsoft\Windows\CurrentVersion\Run键的写入操作,若发现未知程序添加自启动项,标记为可疑。
    网络行为监控:通过Wireshark或防火墙日志,检测向可疑IP(如10.10.10.10)发起的 HTTP请求,或异常的ICMP流量。

  3. 基于加壳识别的检测
    恶意软件常通过加壳隐藏代码,识别加壳特征可作为可疑标记。使用分析工具(如PEiD)扫描RaDa.exe,若检测到壳,结合其他特征(文件用途不明、无正规数字签名等),判定为高风险程序。

  4. 基于进程与服务异常的检测
    恶意软件运行时会创建异常进程,或伪装成服务长期驻留。检查系统进程列表,若发现RaDa.exe进程且无明确合法用途(无厂商信息、路径为C:\RaDa\bin等非系统目录等),标记为可疑。查看Windows服务列表,若存在名称为“RaDa”的未知服务,且启动类型为“自动”,则判定为恶意服务。

  5. 基于脚本与组件滥用的检测
    RaDa使用Scripting.FileSystemObject、Wscript.Shell等Windows脚本组件执行操作,异常调用这些组件可作为检测点。使用事件日志或EDR工具,监控wscript.exe、cscript.exe对敏感API(如文件创建、注册表修改)的调用,若发现未知脚本频繁操作C:\RaDa目录或自启动项,判定为恶意行为。

2.4 取证分析实践

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

  1. IRC(Internet Relay Chat)是互联网中继聊天协议,用于实时文本通信的网络应用。

  2. 申请加入IRC网络时发送USER(用户标识)和NICK(昵称)消息。
    NICK消息:用于设置或修改用户在IRC网络中的唯一昵称。
    USER消息:用于向IRC服务器提供用户的额外标识信息,补充昵称之外的身份信息,帮助服务器识别用户,完成网络接入验证。

  3. 常用TCP端口:6667(默认明文)、6697(SSL加密),部分网络使用6660-6669区间端口。

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

  1. 僵尸网络是由攻击者控制的大量被恶意软件感染的计算机(称为 “僵尸机”)组成的远程控制网络,这些计算机被劫持后通常不被用户察觉。

  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,观察Destination一列,蜜罐主机一共试图与有5个IP的6667端口进行通信:209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10、209.196.44.172,其中66.33.65.58和209.126.161.29建立连接失败,不能确定是IRC服务器。

屏幕截图 2025-11-10 092837(1)

再设置过滤条件ip.src == 172.16.134.191 && irc,可以确定3个IP是IRC服务器:209.126.161.29、63.241.174.144、217.199.175.10。

屏幕截图 2025-11-10 093428(1)

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

  • 在虚拟机中输入指令sudo apt install tcpflow安装tcpflow。

屏幕截图 2025-11-10 141616

  • 将文件botnet_pcap_file.dat移动到虚拟机中,输入指令tcpflow -r botnet_pcap_file.dat 'host 209.196.44.172 and port 6667',过滤出与209.196.44.172和端口6667相关的流量,生成两个数据流文件172.016.134.191.01152-209.196.044.172.06667与209.196.044.172.06667-172.016.134.191.01152,以及XML报告文件report.xml。

屏幕截图 2025-11-10 141747

屏幕截图 2025-11-10 141839

  • 输入指令cat 209.196.044.172.06667-172.016.134.191.01152 | grep --text "^: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统计访问以209.196.44.172为服务器的僵尸网络服务器的主机数量。
  1. cat 209.196.044.172.06667-172.016.134.191.01152:读取指定TCP数据流文件。

  2. grep --text "^:irc5.aol.com 353":筛选以:irc5.aol.com 353开头的行(对应频道成员信息);--text确保按文本格式处理文件,避免二进制数据干扰。

  3. tr ' ' '\n':将空格分隔的用户昵称,转为每行一个昵称。tr -d "\15":删除回车符。

  4. grep -v "^$":过滤掉空行。

  5. sort -u:先排序昵称,再去重。

  6. wc -l:统计最终剩余的行数。

统计结果为3461,即有3461台不同的主机访问了以209.196.44.172为服务器的僵尸网络。

屏幕截图 2025-11-10 142105

2.4.5 哪些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 > 20232420lzy_ipaddr.txt;wc -l 20232420lzy_ipaddr.txt统计所有与蜜罐主机172.16.134.191通信的外部IP地址数量。
  1. tcpdump -n -nn -r botnet_pcap_file.dat 'dst host 172.16.134.191':
    tcpdump:网络抓包分析工具;
    -n:不解析域名;
    -nn:不解析域名和端口名;
    -r botnet_pcap_file.dat:读取指定僵尸网络抓包文件;
    dst host 172.16.134.191:仅保留“目标主机是172.16.134.191”的网络包。

  2. awk -F " " '{print $3}':以空格为分隔符(-F " "),提取每行第3列(即发起通信的远端IP和端口)。

  3. cut -d '.' -f 1-4:以点为分隔符(-d '.'),截取前4段字符(剥离端口号,仅保留纯IP地址)。

  4. sort:对提取的IP地址进行排序。

  5. uniq:去除重复的IP。

  6. more > 20232420lzy_ipaddr.txt:将结果输出到20232420lzy_ipaddr.txt文件。

  7. wc -l 20232420lzy_ipaddr.txt:分号分隔多命令,执行完前序命令后,统计20232420lzy_ipaddr.txt的行数(即访问目标主机的唯一IP总数)。

根据输出,被用于攻击蜜罐主机的IP地址一共有165个。

屏幕截图 2025-11-10 145345

  • 打开文件20232420lzy_ipaddr.txt,可以看到所有被用于攻击蜜罐主机的IP地址。

屏幕截图 2025-11-10 145534
屏幕截图 2025-11-10 145554
屏幕截图 2025-11-10 145605

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

  • 在虚拟机中输入指令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连接中,远端主机的目标端口。
  1. tcpdump -r botnet_pcap_file.dat -nn 'src host 172.16.134.191' and tcp[tcpflags]== 0x12:
    tcpdump:网络抓包分析工具;
    -r botnet_pcap_file.dat:读取指定抓包文件;
    -nn:不解析域名和端口名;
    src host 172.16.134.191:仅保留“源主机是172.16.134.191” 的包;
    tcp[tcpflags]== 0x12:仅保留TCP SYN+ACK标志的包。

  2. cut -d ' ' -f 3:以空格为分隔符,提取每行第3列(对应“目标IP:端口”)。cut -d '.' -f 5:以点为分隔符,截取第5段(即端口号)。

  3. sort:对提取的端口号排序。uniq:去除重复端口,仅保留唯一目标端口。

由输出可知,主机172.16.134.191发起的有效TCP连接中,远端主机的唯一目标端口有6个,分别是 135、139、25、445、4899、80。

25:SMTP协议端口;
80:HTTP协议端口,用于网页访问;
135、139、445:Windows系统常见端口(分别对应RPC、NetBIOS、SMB协议),可用于漏洞利用;
4899:远程桌面相关端口(如RADMIN),可用于远程控制。

屏幕截图 2025-11-10 150429

  • 继续输入指令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连接中,远端主机的目标端口。

由输出可知,主机172.16.134.191发起的有效UDP连接中,远端主机的唯一目标端口有1个,为137。137是NetBIOS名称服务(NBNS)的默认UDP端口,用于局域网内主机名解析、设备发现。

屏幕截图 2025-11-10 151155

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

推测攻击成功的端口有80、445、4899。

(1)80端口

  • wireshark上输入过滤条件ip.addr==172.16.134.191 and tcp.port==80,过滤80端口相关数据包。

屏幕截图 2025-11-10 200853

第一张图可以看到存在大量对/NULL.IDA路径的请求,且携带超长的CCCCCCCC...参数,这是CodeRed类蠕虫的典型攻击特征(利用IIS漏洞进行传播和攻击),属于僵尸网络常用的漏洞利用手段。

屏幕截图 2025-11-10 201521

第二张图可以看到主机172.16.134.191与207.172.16.150在80端口上存在高频、持续的TCP交互,且出现[TCP Previous segment not captured](数据包缺失)、[TCP Out-Of-Order](乱序)、[TCP ZeroWindow](窗口拥塞)等异常标记,符合僵尸网络受控端与C&C服务器批量传输数据或指令的行为特征。

推测在80端口的攻击成功了。

(2)445端口

  • wireshark上输入过滤条件ip.addr==172.16.134.191 and tcp.port==445,过滤445端口相关数据包。

屏幕截图 2025-11-10 203430

远端主机(195.36.247.77)通过SMB协议发起了完整的 “协议协商→会话建立→资源访问→用户枚举” 流程,并试图访问敏感的\samr(安全账户管理数据库)和执行EnumDomainUsers(枚举域用户)等操作,这是僵尸网络“内网横向移动 + 权限提升”的典型攻击行为。

故推测在445端口的攻击成功了。

(3)4899端口

  • wireshark上输入过滤条件ip.addr==172.16.134.191 and tcp.port==4899,过滤4899端口相关数据包。

屏幕截图 2025-11-10 204111

目标主机172.16.134.191与24.197.194.106的通信中,出现了针对cmd.exe的恶意HTTP请求(HEAD /cgi/../../../../winnt/system32/cmd.exe?/c+dir...),这是利用IIS漏洞执行系统命令(如dir)的典型攻击行为。

故在4899端口的攻击成功了。

(4)25端口

  • wireshark上输入过滤条件ip.addr==172.16.134.191 and tcp.port==25,过滤25端口相关数据包。

屏幕截图 2025-11-10 200612

没有发现smtp相关数据包,推测在25端口的攻击失败了。

(5)135端口

  • wireshark上输入过滤条件ip.addr==172.16.134.191 and tcp.port==135,过滤135端口相关数据包。

屏幕截图 2025-11-10 202550

在135端口没有明显的攻击行为。

(6)139端口

  • wireshark上输入过滤条件ip.addr==172.16.134.191 and tcp.port==139,过滤139端口相关数据包。

屏幕截图 2025-11-10 202739

不同IP的攻击流程高度一致,先TCP三次握手建立连接,再发起NBSS会话请求、SMB资源访问,但最后都被目标主机以RST包拒绝(可能是防御机制)。

故在139端口的攻击没有成功。

(7)137端口

  • wireshark上输入过滤条件ip.addr==172.16.134.191 and udp.port==137,过滤137端口相关数据包。

屏幕截图 2025-11-10 204424

多个不同IP向该端口发起标准化的NBNS名称查询请求(Name query NBSTAT *),不同IP的查询流程高度一致,且在短时间内高频发起,体现了“自动化、集群式”的攻击逻辑,符合僵尸网络利用NetBIOS协议进行内网扫描的恶意行为特征,但没有直接的攻击行为。

故在137端口没有攻击,只是做了一些侦查。

3.问题及解决方案

问题1:在使用ProcessExplorer分析RaDa_unpacked.exe时,需要先运行RaDa_unpacked.exe,却发现无法正常运行。

屏幕截图 2025-11-09 215554

问题1解决方案:在弹出Run-time error'70':Permission denied弹窗时,不要点确定,直接在ProcessExplorer中搜索RaDa,发现RaDa_unpacked.exe其实已经运行。

屏幕截图 2025-11-09 221334

4.学习感悟、思考等

本次实验围绕恶意代码分析与网络取证展开:一是对rada恶意代码样本进行文件类型识别、脱壳、字符串提取及逆向分析等,同时完成crackme1.exe与crackme2.exe的破解,找到成功输入;二是蜜罐网络数据,开展僵尸网络相关取证分析,了解僵尸网络特性、攻击行为等。

实验中我进行了恶意代码分析和网络取证的实践操作。恶意代码分析中,从识别文件类型、脱壳到字符串提取,确实感受到逆向分析技术在对抗恶意软件中发挥的作用。crackme程序的破解让我学会静态与动态结合分析代码。网络取证部分让我对僵尸网络的攻击流程有了一定的认知,从攻击IP识别到漏洞利用行为分析,通过抓包数据还原攻击场景的过程,让我感受到网络安全取证的实用性。

此次实验不仅巩固了恶意代码分析工具、逆向工程、网络取证等理论知识,也为今后网络攻防学习积累了实践经验。

posted @ 2025-11-10 21:14  20232420刘镇瑜  阅读(0)  评论(0)    收藏  举报