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, 规则管理