ARES-SYS/malware-pipeline

GitHub: ARES-SYS/malware-pipeline

一套 17 阶段确定性恶意软件分析流水线,通过哈希、熵值、特征码、沙箱和人工分诊的逐层关卡机制,对外部文件进行深度防御式安全审查。

Stars: 0 | Forks: 0

# 恶意软件分析流水线 — 17 阶段自动化隔离 ## 问题所在 每个家庭实验室和企业环境都会引入外部文件:软件更新、容器镜像、研究样本、电子邮件附件。大多数设置只采用以下两种方式之一: - **什么都不做** — 文件直接落入生产存储中。策略完全靠“侥幸”。 - **单一扫描器** — 运行 ClamAV。如果干净,就信任。如果带毒,就删除。没有中间地带。 两者以同样的方式失败:零日漏洞或加壳样本顺利通过你仅有的那一次检查。没有行为分析。没有关联分析。没有审计追踪。你不知道进入了什么、何时进入的,或者它试图做什么。 ## 解决方案:深度防御,逐个文件进行 ``` FILE INTAKE ──► [HASH] ──► [ENTROPY] ──► [SIGNATURE] ──► [SANDBOX] ──► [TRIAGE] ──► APPROVE/QUARANTINE │ │ │ │ │ SHA-256 Deviation ClamAV+YARA Behavioral Human dedup from normal pattern match analysis decision ``` 每个阶段都是下一个阶段的关卡。未通过阶段 3 的文件永远不会到达阶段 4。通过了所有检查的文件仍需等待人工批准。永远不会有自动信任。 ## 17 个阶段 ### 阶段 1 — 接收与隔离 文件通过任何途径(下载、USB、电子邮件附件、研究样本)到达。立即移动到非可执行文件系统挂载(`noexec`、`nosuid`)上的隔离暂存目录中。没有进程可以从暂存区执行它。 ### 阶段 2 — 密码学哈希 计算并记录 SHA-256 哈希值。这有三个目的:去重(跳过已分析的文件)、完整性验证(检测阶段之间的修改)和 IOC 生成(与威胁情报源共享哈希)。 ### 阶段 3 — 文件类型检测 检查 Magic byte,而不是信任扩展名。无论文件名是什么,包含 ELF 二进制文件的 `.pdf` 都会被标记。声明的类型与实际 Magic byte 不匹配 → 提升风险评分。 ### 阶段 4 — 熵值计算 对整个文件计算香农熵。压缩、加密或加壳的可执行文件的熵值高于 7.0。合法的文本和代码位于 4.5-6.5 之间。这可以在特征码扫描器甚至进行查看之前就捕获到加壳的恶意软件。 ### 阶段 5 — 熵偏差评分 将熵值与按文件类型划分的基线进行比较。熵值为 7.8 的 PNG 是正常的(已压缩)。而熵值为 7.8 的 `.txt` 文件则不正常。偏离预期范围 → 即使没有匹配到特征码也会标记为有风险。 ### 阶段 6 — 结构分析 对于已知格式(PE、ELF、Mach-O、PDF、OLE),解析节头和结构。检测:可疑的节名称、节上的 RWX 权限、重叠的头、异常的入口点、EOF 标记后追加的数据。 ### 阶段 7 — 特征码扫描 (ClamAV) 标准的基于特征码的检测。每日更新。捕获已知的恶意软件、商业化 RAT 和常用工具。误报率低 — 可作为第一道筛选过滤器,但绝不能作为唯一的检查手段加以信任。 ### 阶段 8 — YARA 规则匹配 应用自定义和社区的 YARA 规则。这可以捕获:特定的威胁参与者的工具、加壳特征、挖矿木马模式,以及特征码 AV 遗漏的行为识别型恶意软件家族。规则从威胁情报源进行更新。 ### 阶段 9 — 字符串提取与模式匹配 提取 `strings`,最小长度为 4。应用 Regex 模式查找:IP 地址、URL、base64 块、PowerShell 命令、shell 调用、注册表路径和已知的恶意函数名。任何匹配都会增加该文件的风险评分。 ### 阶段 10 — 沙箱引爆 在隔离的容器中执行文件,具有以下条件: - 无网络访问(隔离的网桥) - 2 分钟的执行窗口期 - `strace`/`ltrace` 捕获 - 文件系统 overlay(在容器销毁时丢弃写入) - 资源限制(CPU、内存上限) 分析完成后容器将被销毁。任何数据都不会持久化。 ### 阶段 11 — 系统调用捕获 沙箱执行期间记录每一个系统调用。分析会查找:`execve`、`fork`、`ptrace`、`connect`、`sendto`、`unlink`、`mount`。一个调用了 `execve` 的 PDF → 无论其他结果如何,立即隔离。 ### 阶段 12 — 网络行为(模拟) 即使没有真实的网络访问权限,连接尝试也会被捕获。DNS 解析尝试、socket 创建以及目标 IP/端口都会被记录。一个尝试连接到 `:4444` 或 `:1337` 的文件,其评分会高于连接到 `:443` 的文件。 ### 阶段 13 — 文件系统更改检测 捕获文件系统 overlay 差异:执行期间创建、修改或删除的文件。即使在沙箱中,持久化机制(cron、systemd 单元、`.bashrc` 修改)也会被标记。 ### 阶段 14 — 行为风险评分 来自阶段 2-13 的所有发现都会输入到一个加权评分模型中: | 信号 | 权重 | |--------|--------| | 熵值 > 7.0 | +15 | | 文件类型不匹配 | +20 | | RWX 节头 | +30 | | ClamAV 命中 | +40 | | YARA 匹配 | +35 | | `execve` syscall | +50 | | 尝试网络连接 | +25 | | 持久化机制 | +40 | | 编码的 payload 字符串 | +20 | 评分 ≥ 50 → 自动隔离。评分 20-49 → 需要人工审查。评分 < 20 → 低风险,但仍需人工批准把关。 ### 阶段 15 — 人工分诊队列 每个文件 — 无论评分如何 — 都会进入人工审查队列。操作员将看到: - 文件哈希、类型、熵值 - 每个阶段的评分明细 - 提取的字符串(已截断) - Syscall 摘要(调用次数前列) - 判定建议(自动生成,可覆盖) 批准的文件移至生产环境。拒绝的文件保留在隔离区。 ### 阶段 16 — IOC 提取与威胁情报 从隔离的文件中提取 IOC:哈希、C2 IP/域名、互斥锁名称、注册表项、文件路径。这些将输入到: - 本地威胁情报数据库 - 防火墙黑名单(自动丢弃 C2 IP) - DNS Sinkhole 规则(自动阻止 C2 域名) - 未来的 YARA 规则生成 ### 阶段 17 — 审计与报告 每个文件 — 无论批准还是隔离 — 都会生成一条审计记录: - 时间戳、来源、哈希、文件类型 - 风险评分和贡献信号 - 人工决策(批准/拒绝)及操作员备注 - 提取的 IOC(如有) - 应用的保留策略(隔离清除计划) 完整的流水线:17 个阶段。每个文件的平均耗时:3-5 分钟(自动化)+ 人工审查。没有经过人工查看报告的文件绝对不会接触生产环境。 ## 设计决策 ### 为什么选择确定性,而不是基于机器学习 基于去年恶意软件训练的 ML 分类器将会漏掉今年的。它需要重新训练,会产生削弱操作员信任的误报,并且它本身就是一个攻击面(模型投毒、对抗样本)。 确定性规则 — 熵值数学、Magic byte、syscall 模式、字符串 regex — 不会过期。今天加壳的可执行文件与 2015 年的加壳文件具有相同的熵值。PDF 中的 `execve` 代表的含义一如既往。 ### 为什么顺序很重要 熵值在特征码之前。特征码在沙箱之前。沙箱会消耗 CPU 时间并带来风险 — 你不应该引爆一个已经被 ClamAV 识别为已知恶意的文件。早期阶段是廉价的过滤器。后期阶段代价高昂,但仅在通过了廉价关卡的文件上才会运行。 ### 为什么总是需要人工批准 自动化减少了工作量,但永远无法取代判断。一个低风险的文件可能是针对你特定基础设施的有针对性攻击。评分模型不了解你的威胁模型。但人类了解。 ## 当前实现 - 编排:具有结构化日志的 Python - 哈希:Python `hashlib` (SHA-256) - 熵:基于 256 字节窗口的自定义香农实现 - 特征码:带有每日特征码更新的 ClamAV daemon - 沙箱:具有 seccomp 配置、`noexec` 挂载和资源限制的 Docker 容器 - 队列:带有操作员 CLI 的 SQLite 支持的分诊数据库 - 日志记录:结构化 JSON,兼容 Grafana 的格式 ## 局限性 - 沙箱引爆仅限于 Linux ELF 二进制文件。PE 文件需要 Windows 沙箱(已规划)。 - 网络模拟是被动的 — 没有实际的 C2 交互。主动 C2 分析需要具有完整数据包捕获的隔离 VLAN(已在第二阶段规划)。 - 行为评分权重针对关注基础设施的威胁进行了调整。不同的环境可能需要重新校准。 ## 许可证 MIT
标签:DAST, DNS 反向解析, XXE攻击, YARA, 云资产可视化, 恶意软件分析, 文件安全, 无线安全, 沙箱, 知识库安全, 网络信息收集, 自动化分析流水线, 请求拦截, 逆向工具, 防御纵深