CTF逆向线下赛必备解密脚本积累(上)
字数 4057
更新时间 2026-10-08 11:34:11
Perusing# 基于 Fiora 框架的 CS 恶意样本分析教学文档
知识来源:阿里云先知社区文章《基于Fiora框架的CS恶意样本分析》(原文链接:https://xz.aliyun.com/news/92711)
本文对原文核心知识进行系统化梳理,涵盖工具原理、环境搭建、样本分析全流程、关键函数逆向解析及反制思路,适用于红蓝对抗、恶意代码分析、C2 基础设施研究等场景。
一、背景与核心概念
1.1 Cobalt Strike(CS)与 Fiora 框架
- Cobalt Strike(CS):一款主流的红队协同作战框架,常被攻击者用于生成恶意 payload(Beacon),具备 DNS/HTTP/HTTPS 等多种 C2 通信方式。
- Fiora 框架:一款专为分析 CS 恶意样本而设计的开源工具,核心能力包括:
- 自动化解析 CS Beacon 配置(如 C2 地址、端口、心跳间隔、加密密钥等)
- 模拟 CS Team Server 与 Beacon 的交互逻辑
- 辅助逆向工程师快速定位关键解密函数与通信逻辑
- 支持多版本 CS 样本(3.x–4.x 常见版本)
1.2 为什么需要 Fiora
传统 CS 样本分析依赖 IDA Pro + 动态调试,需手动追踪解密逻辑、还原配置结构,耗时且易出错。Fiora 通过以下方式降低门槛:
- 内置 CS 各版本配置结构定义(偏移、字段类型、加密方式)
- 自动识别样本版本并提取明文配置
- 提供交互式命令行,可模拟 Beacon 回连、执行指令
二、环境准备
2.1 硬件与系统要求
| 项目 | 推荐配置 |
|---|---|
| CPU | 2 核及以上 |
| 内存 | 4 GB 及以上 |
| 磁盘 | 20 GB 可用空间 |
| 系统 | Ubuntu 20.04 LTS / Kali Linux 2023+ / Windows 10/11(WSL2 推荐) |
2.2 软件依赖
- Python 3.8+
- Git
- 反汇编/调试工具(IDA Pro 7.6+、x64dbg、Ghidra 任选其一)
- 网络抓包工具(Wireshark、tcpdump)
- 可选:Docker(用于快速部署 Fiora 服务端)
2.3 Fiora 框架安装
方式一:源码安装(推荐)
git clone https://github.com/xxx/fiora.git # 原文仓库地址,实际以官方为准
cd fiora
pip3 install -r requirements.txt
python3 fiora.py -h
方式二:Docker 部署
docker pull fiora/fiora:latest
docker run -it --rm -p 8080:8080 fiora/fiora
2.4 样本获取与合法性说明
- 样本应来自沙箱报告、威胁情报平台、授权渗透测试项目
- 禁止将恶意样本用于非法攻击或传播
- 分析环境务必隔离(虚拟机 + 快照 + 断网或仅主机模式)
三、Fiora 核心功能与命令详解
3.1 命令行参数
| 参数 | 作用 |
|---|---|
-f / --file |
指定 CS 样本路径(PE 文件) |
-d / --dump |
提取并转储解密后的配置到文件 |
-v / --version |
指定 CS 版本(如 4.7),不指定则自动识别 |
-o / --output |
输出目录 |
--teamserver |
启动模拟 Team Server 模式 |
--interactive |
进入交互式 Beacon 模拟终端 |
3.2 配置提取流程
- 加载样本,识别 CS 版本(基于特征字符串、RSA 公钥、编译时间等)
- 定位配置加密区域(通常位于
.data或.rdata段) - 使用内置密钥或用户指定密钥解密 AES/RC4 配置块
- 解析配置结构体,输出 JSON 格式结果
3.3 模拟 Team Server 模式
- 监听指定端口,伪装成 CS Team Server
- 接收 Beacon 回连,记录元数据(主机名、IP、进程名、PID)
- 可下发预设命令(如
shell whoami、sleep 60) - 用于观察 Beacon 真实通信行为,验证配置正确性
四、CS 样本分析全流程实战
4.1 样本静态分析
4.1.1 基本信息获取
使用 file、strings、pefile 等工具:
file beacon.exe
strings beacon.exe | grep -i "cobalt"
pefile beacon.exe
关键识别点:
- 是否存在
pipe\\msagent_*等命名管道字符串 - 是否包含
Cobalt Strike相关 User-Agent(如Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0)) - 是否存在
RSA1、RSA2等公钥标记
4.1.2 定位配置解密函数
CS Beacon 通常使用以下加密组合:
- 配置块:AES-256-CBC 或 RC4,密钥硬编码或派生
- 字符串:XOR 循环加密,密钥来自配置
- 通信数据:AES + HMAC 或 RSA 加密
在 IDA Pro 中搜索关键交叉引用:
CryptDecryptAES_set_decrypt_keyRC4_set_key- 自定义 XOR 循环(
xor byte ptr [eax+ebx], cl)
4.2 使用 Fiora 自动提取配置
python3 fiora.py -f beacon.exe -d -o ./output
输出示例(config.json):
{
"version": "4.7",
"c2": [
"https://c2.example.com/jquery/1.0.0/jquery.min.js",
"https://backup.example.com/api/v1"
],
"port": 443,
"beacon_type": "HTTPS",
"polling_interval": 60000,
"jitter": 20,
"public_key": "-----BEGIN PUBLIC KEY-----\n...",
"watermark": 123456,
"kill_date": "2025-12-31"
}
4.3 动态调试辅助验证
- 在 x64dbg 中加载样本,在
VirtualAlloc或Sleep处下断点 - 运行至配置解密完成,dump 内存中解密后的配置块
- 与 Fiora 输出对比,验证一致性
- 跟踪 Beacon 心跳逻辑,观察 HTTP GET/POST 请求格式
4.4 通信协议逆向
CS Beacon 与 Team Server 通信特征:
| 阶段 | 特征 |
|---|---|
| 初始回连 | HTTP GET 请求,URI 包含随机路径,Cookie 携带 base64 编码元数据 |
| 任务获取 | 响应为加密的 task 数据,解密后包含命令 ID 与参数 |
| 结果回传 | HTTP POST 请求,body 为 AES 加密的执行结果 |
| 心跳间隔 | 默认 60 秒,±jitter% 随机偏移 |
Fiora 可模拟上述流程,自动解密流量,还原命令与结果。
五、关键函数逆向解析
5.1 配置解密函数(Config Decrypt)
典型伪代码:
int decrypt_config(unsigned char* cipher, int len, unsigned char* key, unsigned char* out) {
AES_KEY aes_key;
AES_set_decrypt_key(key, 256, &aes_key);
AES_cbc_encrypt(cipher, out, len, &aes_key, iv, AES_DECRYPT);
return 0;
}
关键点:
- 密钥来源:样本内硬编码或派生自
watermark - IV 通常为全零或前 16 字节密文
- 解密后配置结构为固定偏移的字段数组
5.2 字符串解密函数(String Decrypt)
CS 使用 XOR 循环解密字符串表:
void decrypt_strings(unsigned char* str_table, int len, unsigned char key) {
for (int i = 0; i < len; i++) {
str_table[i] ^= key;
key = str_table[i]; // 更新密钥,形成反馈
}
}
Fiora 内置字符串解密引擎,可自动识别并还原所有加密字符串。
5.3 Beacon 心跳与任务处理
心跳线程主循环:
while (1) {
sleep(interval + rand() % jitter);
send_http_get(uri, cookie);
if (recv_task(&task)) {
execute_task(task);
}
}
任务执行函数通过命令 ID 分发:
| 命令 ID | 功能 |
|---|---|
| 1 | 执行 shell 命令 |
| 2 | 上传文件 |
| 3 | 下载文件 |
| 4 | 注入进程 |
| 5 | 加载模块(dll) |
六、反制与防御思路
6.1 基于 Fiora 的主动反制
- 部署 Fiora 模拟 Team Server,诱捕攻击者 Beacon
- 记录攻击者 IP、证书、命令习惯,用于溯源
- 下发虚假任务,误导攻击者判断
6.2 检测与防御建议
- 网络层:检测长连接、固定心跳、异常 User-Agent、base64 Cookie
- 主机层:监控
powershell、rundll32、mshta异常调用 - 内存层:扫描进程内存中的 CS 特征字符串、RSA 公钥
- 威胁情报:将提取的 C2 地址同步至防火墙、IDS、EDR
6.3 样本对抗手段(供分析者参考)
- 自定义加密算法替换 AES/RC4
- 修改配置结构偏移,增加 Fiora 识别难度
- 使用域名前置(Domain Fronting)隐藏真实 C2
- 启用 Malleable C2 Profile 混淆流量
七、常见问题与解决方案
| 问题 | 原因 | 解决 |
|---|---|---|
| Fiora 无法识别版本 | 样本加壳或版本过新 | 手动指定 -v 参数,或脱壳后重试 |
| 配置解密失败 | 密钥错误或非标准 CS 样本 | 使用 IDA 手动定位解密函数,提取密钥 |
| 模拟 Team Server 无回连 | 样本使用 TCP/HTTP 外其他协议 | 检查样本配置,确认 Beacon 类型 |
| 输出配置字段缺失 | 样本为自定义改造版 | 结合动态调试补充字段 |
八、总结与扩展学习
8.1 核心要点回顾
- Fiora 框架大幅简化 CS 样本分析流程,实现配置自动提取与流量解密
- 分析需结合静态逆向(IDA)、动态调试(x64dbg)、网络抓包(Wireshark)
- 理解 CS 通信协议与加密逻辑是深入分析的基础
- 反制思路可从模拟 Team Server、流量检测、内存扫描多维度展开
8.2 扩展学习资源
- Cobalt Strike 官方文档(Malleable C2 Profile)
- 《恶意代码分析实战》(Practical Malware Analysis)
- 先知社区、FreeBuf、安全客等平台 CS 分析文章
- GitHub 相关项目:CS-Extract、BeaconConfigExtractor、Fiora
8.3 实践建议
- 搭建隔离实验环境(VMware + 快照)
- 使用已知版本 CS 生成测试样本,验证 Fiora 功能
- 尝试手动还原配置解密流程,加深理解
- 参与 CTF 或红蓝对抗,积累实战经验
本文档基于阿里云先知社区文章《基于Fiora框架的CS恶意样本分析》提取整理,保留原文技术细节,去除无关内容,适用于教学、研究与防御参考。
相似文章
相似文章