FlatScan 是一个生产级静态恶意软件分析与报告引擎,使用纯 Go 编写。它专为需要快速分类、IOC 提取、可疑能力检测、高管级报告以及狩猎规则交接的分析人员而设计——所有这些都无需执行样本。
FlatScan 读取文件、计算哈希、识别格式、提取字符串、解码可疑的编码数据、提取并分类 IOC、检查可执行文件/容器元数据、对发现进行评分、将其丰富为恶意软件画像,并生成文本、JSON、PDF、HTML、IOC、YARA、Sigma、STIX 2.1、案例数据库和报告包输出。
恶意软件分类通常面向两类受众:
| 受众 | 需求 |
|---|---|
| 安全分析师 | 技术证据:哈希、字符串、导入表、IOC、熵、节区、解码数据、TTP、狩猎规则 |
| CISO / 管理层 | 风险背景:它可能是什么、为何重要、业务影响、建议措施 |
FlatScan 同时服务于两者。它以安全且快速的方式进行静态分析,然后将结果转换为机器可读输出和管理层可用的报告。
graph LR
A[Malware Sample] --> B[FlatScan Engine]
B --> C[Analyst Reports]
B --> D[Executive Reports]
B --> E[Machine-Readable]
B --> F[Hunting Rules]
C -->|HTML, Full Text| G[SOC Team]
D -->|PDF, Executive MD| H[CISO / Board]
E -->|JSON, STIX 2.1| I[SIEM / SOAR]
F -->|YARA, Sigma| J[EDR / Hunt Team]
FlatScan 构建为一个多阶段分析流水线,具备并行执行、插件系统,并且无外部依赖——go.mod 不要求任何依赖,纯 Go 反汇编引擎以 internal/x86asm 形式内置于代码树中(golang.org/x/arch/x86/x86asm 的未修改副本,BSD-3-Clause 许可)。无 cgo,无运行时或系统依赖,构建无需网络。
graph TB
subgraph "Input Layer"
CLI[CLI Parser] --> CFG[Config]
INT[Interactive Mode] --> CFG
SHL[Shell Mode] --> CFG
WCH[Watch Mode] --> CFG
end
subgraph "I/O Layer"
CFG --> MMP{File > 100MB?}
MMP -->|Yes| MMAP[Memory-Mapped I/O]
MMP -->|No| BUF[Buffered Read]
MMAP --> DATA[Raw Bytes + Hashes]
BUF --> DATA
end
subgraph "Analysis Pipeline"
DATA --> DET[File Type Detection]
DET --> ENT[Entropy Analysis]
ENT --> STR[String Extraction]
STR --> IOC[IOC Extraction]
IOC --> DEC[Decoder Pass]
DEC --> CRP[Corpus Build]
CRP --> PAT[Pattern Matching]
PAT --> PG["Parallel Group"]
subgraph PG["⚡ Parallel Stages"]
FMT[Format Analysis]
CRV[Safe Carving]
CRY[Crypto/Config]
SIM[Similarity Hash]
end
PG --> SEQ[Sequential Stages]
SEQ --> PLG[Plugin Engine]
PLG --> SCR[Risk Scoring]
end
subgraph "Output Layer"
SCR --> TXT[Text Report]
SCR --> JSN[JSON]
SCR --> PDF[PDF Report]
SCR --> HTM[HTML Report]
SCR --> YAR[YARA Rule]
SCR --> SIG[Sigma Rule]
SCR --> STX[STIX 2.1]
SCR --> RPK[Report Pack]
end
style PG fill:#1a1a2e,stroke:#e94560,stroke-width:2px
style SCR fill:#0f3460,stroke:#e94560,stroke-width:2px
| 原则 | 实现 |
|---|---|
| 零外部依赖 | go.mod 不依赖任何外部包,也没有 go.sum。仅使用 Go 标准库以及一个内置的、未经修改的包——internal/x86asm,它是 golang.org/x/arch/x86/x86asm 的副本(BSD-3-Clause 许可,反汇编引擎),保留在代码树内,因此构建无需下载、无需网络。不使用 cgo、不使用原生库、无运行时依赖 |
| 仅静态分析 | 从不执行样本——只读取字节和元数据 |
| 线程安全 | parallelRun() 使用互斥锁保护发现结果,已通过竞态检测器验证。各分析阶段独立恢复 panic,因此一个畸形样本不会中止整个批次 |
| 跨平台可移植 | 可为 Linux、macOS、Windows 构建;在 Linux 上使用 mmap,并带有透明回退机制 |
| 可扩展 | 插件接口 + JSON 清单,无需重新编译即可实现自定义检测 |
| 检查项 | 结果 |
|---|---|
go build / go vet / gofmt -l | 通过 |
go test ./... | 189 个测试(含子测试共 344 个用例),全部通过 |
go test -race ./... | 通过 |
go test -cover ./... | 语句覆盖率 50.6% |
golangci-lint run | 0 个问题(errcheck、govet、staticcheck、gosec、errorlint、ineffassign、unused、bodyclose、nilerr、misspell、unconvert、wastedassign) |
govulncheck ./... | 未发现漏洞 |
测试环境。 已在 Fedora Linux 44(x86_64,内核 7.1.7) 和 Go 1.26.5 上验证。
go.mod 的最低要求为 Go 1.25。CI 还会在 ubuntu-latest 上运行同一套测试。
Linux 是这些结果唯一经过测量的平台:macOS 和 Windows 是受支持的目标平台,代码可交叉编译到这些平台,但上述数据并未在那里独立复现,且 mmap_linux.go 在构造上仅适用于 Linux(其他平台采用缓冲读取回退方案)。
引擎通过 18 个阶段处理文件,独立操作并行执行:
sequenceDiagram
participant CLI as CLI/Interactive
participant IO as I/O Layer
participant Engine as Analysis Engine
participant Parallel as Parallel Group
participant Score as Scoring
participant Output as Output Renderers
CLI->>IO: Config + File Path
IO->>IO: mmap or buffered read
IO->>IO: Compute MD5/SHA1/SHA256/SHA512
IO->>Engine: Raw bytes + Hashes
Engine->>Engine: 1. File type detection
Engine->>Engine: 2. Entropy analysis (incremental)
Engine->>Engine: 3. String extraction (zero-alloc)
Engine->>Engine: 4. IOC extraction + triage
Engine->>Engine: 5. Decoder pass (base64/hex/URL)
Engine->>Engine: 6. Corpus build (shared, single alloc)
Engine->>Engine: 7. Pattern matching
Engine->>Parallel: Launch independent stages
par Format Analysis
Parallel->>Parallel: PE/ELF/Mach-O/APK/MSIX
and Safe Carving
Parallel->>Parallel: Embedded artifacts
and Crypto/Config
Parallel->>Parallel: C2, tokens, mutex, wallets
and Similarity
Parallel->>Parallel: FlatHash, import hash, section hash
end
Parallel->>Engine: Merged results
Engine->>Engine: 8. Rules + Plugins
Engine->>Engine: 9. Family classification
Engine->>Score: Findings
Score->>Score: Deduplicate + Score + Verdict
Score->>Output: Enriched ScanResult
par Output Generation
Output->>Output: Text/JSON/PDF/HTML/YARA/Sigma/STIX
end
| # | 阶段 | 描述 | 优化 |
|---|---|---|---|
| 1 | 文件读取 | 读取文件并同时计算 4 种哈希算法 | 对大于 100MB 的文件使用 mmap |
| 2 | 类型检测 | 针对 25+ 种文件类型的魔数字节 + 扩展名映射 | — |
| 3 | 熵 | 全文件香农熵 + 滑动窗口高熵区域 | 增量直方图 O(step) |
| 4 | 字符串提取 | 基于模式限制的 ASCII + UTF-16LE 字符串提取 | 零分配字节切片索引 |
| 5 | IOC 提取 | URL、域名、IP、电子邮件、哈希、CVE、注册表项、路径 | 批量归一化 |
| 6 | 解码器遍历 | Base64、十六进制、URL 百分号编码,可配置嵌套深度 | — |
| 7 | 语料库构建 | 为所有模式匹配阶段共享的小写语料库 | 单次分配,5 倍复用 |
| 8 | 模式匹配 | 行为签名、导入链、能力检测 | 语料库字符串搜索 |
| 9 | 格式分析 | PE/ELF/Mach-O/APK/MSIX/ZIP/DEX 结构解析 | ⚡ 并行 |
| 10 | 安全雕刻 | 嵌入式 PE/ELF/DEX/ZIP/PDF/gzip/7z/RAR 检测 | ⚡ 并行 |
| 11 | 加密/配置 | C2 端点、webhook 令牌、互斥体、钱包字符串、XOR 密钥 | ⚡ 并行 |
| 12 | 相似度 | FlatHash、字节直方图、字符串集、导入、节区哈希 | ⚡ 并行 |
| 13 | API 链检测 | 基于 API 家族组合的行为攻击链 | 7 条内置链 |
| 14 | 加壳器指纹识别 | 针对 8 种加壳器的节区名称 + 覆盖标记检测 | 仅 PE |
| 15 | 规则引擎 | JSON 规则包 + .rule 声明式检测 | 语料库感知 |
| 16 | 插件引擎 | 内置 + JSON 清单插件 | 注册表模式 |
| 17 | 家族分类器 | 勒索软件、窃取程序、加载器、RAT、风险软件、加密货币挖矿程序、擦除器 | — |
| 18 | IOC 分类 | PKI/schema/OID/回环地址抑制 | 审计追踪 |
| 19 | 风险评分 | 严重性加权评分,含去重 + 判定 + 按类别细分 | — |
| 20 | 配置文件丰富 | MITRE TTP、业务影响、能力、建议 | — |