Neo23x0/yara-uuid-generator

GitHub: Neo23x0/yara-uuid-generator

一个为 YARA 规则自动生成并持久化确定性 UUID 的工具,帮助安全团队在整个规则生命周期内保持稳定的唯一标识。

Stars: 13 | Forks: 2

# YARA UUID 生成器 `yara-uuid-generator.py` 用于向 YARA 规则的 `meta` 部分添加确定性的 `id` 值。 该 UUID 派生自 [`plyara.utils.generate_hash`](https://github.com/plyara/plyara),但仅在首次分配 `id` 时生成。此后,该 `id` 将被保留,并且在规则后续发生更改时不会自动重新计算。 这是它与直接使用 `plyara` 规则哈希的主要区别: - `plyara` 哈希:规则当前逻辑的指纹 - 本工具的 UUID:一次性分配的稳定规则标识符 这使您能够在规则集上运行一次本工具,分配确定性的 UUID,并在每个规则的整个生命周期中保留这些 UUID。 如果在分配时,两个不同的规则集中存在完全相同的规则,它们将获得相同的 UUID。如果这些规则在后来发生了差异,它们仍会保留最初分配的 UUID。 ## 功能 - 为尚未定义 `id` 的规则添加 `id = ""` - 仅使用当前的 `plyara` 规则哈希来派生初始 UUID - 保留现有的 `id` 值,即使后续规则逻辑发生更改也保持不变 - 保留现有的 `meta` 缩进 - 当规则尚无 `meta` 部分时创建该部分 - 支持常规、`private` 和 `global` 规则声明 - 处理单个文件或目录中的每个 `.yar` 和 `.yara` 文件 - 原地写入输出、输出到另一个目录或合并输出到单个文件 ## 依赖 - Python 3 - `plyara` ## 安装 ``` python3 -m venv .venv ./.venv/bin/pip install plyara ``` ## 用法 ``` python3 yara-uuid-generator.py -i INPUT [-o OUTPUT] [-d] ``` ### 参数 - `-i`、`--input`:输入 YARA 文件或目录 - `-o`、`--output`:输出文件或目录。如果省略,则就地更新输入文件。 - `-d`、`--debug`:启用调试日志 ## 输出模式 ### 就地更新文件 ``` python3 yara-uuid-generator.py -i ./examples ``` ### 将处理后的文件写入另一个目录 ``` python3 yara-uuid-generator.py -i ./examples -o ./examples-output ``` ### 将规则目录合并为一个输出文件 ``` python3 yara-uuid-generator.py -i ./examples -o ./combined.yar ``` ### 将一个文件处理到另一个文件 ``` python3 yara-uuid-generator.py -i ./examples/example.yar -o ./example-with-ids.yar ``` ## 示例 ### 处理前 ``` rule HKTL_NATBypass_Dec22_1 : T1090 { meta: description = "Detects NatBypass tool (also used by APT41)" author = "Florian Roth (Nextron Systems)" reference = "https://github.com/cw1997/NATBypass" date = "2022-12-27" score = 80 hash1 = "4550635143c9997d5499d1d4a4c860126ee9299311fed0f85df9bb304dca81ff" strings: $x1 = "nb -slave 127.0.0.1:3389 8.8.8.8:1997" ascii $x2 = "| Welcome to use NATBypass Ver" ascii $s1 = "main.port2host.func1" ascii fullword $s2 = "start to transmit address:" ascii $s3 = "^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])" condition: filesize < 8000KB and ( 1 of ($x*) or 2 of them ) or 3 of them } ``` ### 处理后 ``` rule HKTL_NATBypass_Dec22_1 : T1090 { meta: description = "Detects NatBypass tool (also used by APT41)" author = "Florian Roth (Nextron Systems)" reference = "https://github.com/cw1997/NATBypass" date = "2022-12-27" score = 80 hash1 = "4550635143c9997d5499d1d4a4c860126ee9299311fed0f85df9bb304dca81ff" id = "365d17d4-8686-5614-90ec-55738c1246d4" strings: $x1 = "nb -slave 127.0.0.1:3389 8.8.8.8:1997" ascii $x2 = "| Welcome to use NATBypass Ver" ascii $s1 = "main.port2host.func1" ascii fullword $s2 = "start to transmit address:" ascii $s3 = "^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])" condition: filesize < 8000KB and ( 1 of ($x*) or 2 of them ) or 3 of them } ``` ## 注意事项 - 已包含 `meta.id` 的规则将保持不变。 - UUID 旨在作为稳定的标识符,而不是当前规则内容的实时哈希。 - 名为 `yara-uuid-generator.log` 的日志文件将写入当前工作目录。
标签:DAST, IoC, plyara, Python, UUID生成器, YARA, YARA规则维护, 二进制发布, 云资产可视化, 哈希, 威胁情报, 开发者工具, 开源工具, 恶意软件分析, 指标管理, 文件处理, 无后门, 确定性ID, 规则管理