mandiant/capa-rules

GitHub: mandiant/capa-rules

Mandiant capa 工具的标准规则集合,用于自动识别和枚举程序(尤其是恶意软件)的功能与行为能力。

Stars: 726 | Forks: 238

# capa rules [![规则 linter 状态](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/mandiant/capa-rules/actions?query=workflow%3A%22CI%22) [![规则数量](https://gist.githubusercontent.com/capa-bot/6d7960e911f48b3b74916df8988cf0f3/raw/rules_badge.svg)](rules) [![许可证](https://img.shields.io/badge/license-Apache--2.0-green.svg)](LICENSE.txt) 这是 [capa](https://github.com/mandiant/capa) 的标准规则集合,capa 是一个用于自动识别程序功能的工具。 ## 理念 编写规则应该简单且有趣! 庞大的规则库会使社区中的每个人受益,我们鼓励各种形式的贡献。 无论何时你在恶意软件中发现有趣的东西,我们都希望你能考虑用 capa 规则将其表达出来。 然后,我们会尽可能让你轻松地在这里分享你的规则,并将其分发给 capa 用户。 ## 规则开发 capa 使用一系列规则来识别程序内的功能。 这些规则很容易编写,即使是逆向工程的新手也是如此。 通过编写规则,你可以扩展 capa 识别的功能。 在某些方面,capa 规则是 OpenIOC、Yara 和 YAML 格式的混合体。 这是一个 capa 规则的示例: ``` rule: meta: name: create reverse shell namespace: communication/c2/shell authors: - moritz.raabe@mandiant.com scopes: static: function dynamic: span of calls att&ck: - Execution::Command and Scripting Interpreter::Windows Command Shell [T1059.003] mbc: - Impact::Remote Access::Reverse Shell [B0022.001] examples: - C91887D861D9BD4A5872249B641BC9F9:0x401A77 features: - or: - and: - match: create pipe - api: kernel32.PeekNamedPipe - api: kernel32.CreateProcess - api: kernel32.ReadFile - api: kernel32.WriteFile - and: - match: host-interaction/process/create - match: read pipe - match: write pipe - and: - match: create pipe - match: host-interaction/process/create - or: - basic block: - and: - count(api(SetHandleInformation)): 2 or more - number: 1 = HANDLE_FLAG_INHERIT - call: - and: - count(api(SetHandleInformation)): 2 or more - number: 1 = HANDLE_FLAG_INHERIT ``` capa 在检查可执行文件时会解析这些规则的内容。 如果你遵循此规则格式的指导原则,就可以教会 capa 识别新的功能。 [doc/format.md](./doc/format.md) 文件准确描述了如何构建规则。 在为 capa 创建规则时,请参考该文档。 ## namespace 组织 此仓库的组织结构反映了其所包含规则的 namespace。 capa 使用 namespace 将同类事物分组在一起,特别是在渲染其最终报告时。 namespace 是分层的,因此 namespace 的子级编码了其特定的技术。 简要来说,顶层 namespace 包括: - [anti-analysis](./anti-analysis/) - 打包、混淆、反分析 (anti-X) 等。 - [collection](./collection/) - 可能被枚举和收集以用于外传的数据。 - [communication](./communication/) - HTTP、TCP、命令与控制 (C2) 流量等。 - [compiler](./compiler/) - 检测构建环境,例如 MSVC、Delphi 或 AutoIT。 - [data-manipulation](./data-manipulation/) - 加密、哈希等。 - [executable](./executable/) - 可执行文件的特征,例如 PE 节或调试信息。 - [host-interaction](./host-interaction/) - 访问或操纵系统资源,例如进程或注册表。 - [impact](./impact/) - 最终目标。 - [internal](./internal/) - capa 内部使用以指导分析。 - [lib](./lib/) - 用于创建其他规则的构建块。 - [linking](./linking/) - 检测依赖项,例如 OpenSSL 或 Zlib。 - [load-code](./load-code/) - 运行时加载和执行代码,例如嵌入的 PE 或 shellcode。 - [malware-family](./malware-family/) - 检测恶意软件家族。 - [nursery](./nursery/) - 尚未完全完善的规则的过渡区。 - [persistence](./persistence/) - 维持访问权限的各种方式。 - [runtime](./runtime/) - 检测语言运行时,例如 .NET 平台或 Go。 - [targeting](./targeting/) - 对特定系统的特殊处理,例如 ATM 机。 随着需求的出现,我们可以轻松添加更多的顶层 namespace。 ### 库规则 capa 支持匹配其他规则匹配结果的规则。 例如,以下规则集描述了各种持久化方法。 请注意,如果 `run key` 或 `service` 与样本匹配,则规则 `persistence` 就会匹配。 ``` --- rule: meta: name: persistence features: or: - match: run key - match: service --- rule: meta: name: run key features: string: /CurrentVersion\/Run/i --- rule: meta: name: service features: api: CreateService ``` 利用此功能,我们可以将通用逻辑提取到“库规则”中。 这些规则不会作为结果渲染,而是用作创建其他规则的构建块。 例如,在 Windows 上写入文件有很多种方法, 因此以下库规则使得其他规则能够轻松地全面匹配文件写入操作。 ``` rule: meta: name: write file lib: True features: or: api: WriteFile api: fwrite ... ``` 设置 `rule.meta.lib=True` 来声明一个 lib 规则,并将该规则文件放入 [lib](./lib/) 规则目录中。 库规则不应包含 namespace。 库规则不会作为结果渲染。 capa 只会尝试匹配被其他规则引用的 lib 规则, 因此定义大量可重用的库规则不会产生任何性能开销。 ### 规则过渡区 (nursery) 规则 [nursery](https://github.com/mandiant/capa-rules/tree/master/nursery) 是尚未完全完善的规则的过渡区。尽管元数据可能不完整,但 nursery 规则的逻辑仍应是可靠的。例如,缺少该技术公开实例的规则。 规则引擎会定期匹配 nursery 规则。然而,我们的规则 linter 只会枚举缺失的规则数据,而不会导致 CI 构建失败,因为我们理解该规则尚未完成。 会导致规则被放入 nursery 的情况示例: - 没有真实世界的示例 - 缺少分类 - (可能)对保真度存疑(例如 RC4 PRNG 算法)
标签:DAST, 云资产清单, 威胁情报, 安全, 开发者工具, 恶意软件分析, 超时处理, 逆向工具, 逆向工程