Arondy/lolbas-sysmon-rule-generator
GitHub: Arondy/lolbas-sysmon-rule-generator
从 LOLBAS 项目数据自动生成 Sysmon 检测规则的 Python CLI 工具,融合 Sigma 规则和 MITRE ATT&CK 映射以提升检测覆盖度和规则精度。
Stars: 0 | Forks: 0
# LOLBAS Sysmon 规则生成器
[](https://www.python.org/downloads/)
[](https://opensource.org/licenses/MIT)
🌍 *阅读其他语言版本: [English](README.md), [Русский](README-ru.md)*
一款 Python CLI 工具,用于从 [LOLBAS Project](https://lolbas-project.github.io/) (Living Off The Land Binaries and Scripts) 数据自动生成 Sysmon 检测规则,并结合 [Sigma Rules](https://github.com/SigmaHQ/sigma) 和 [MITRE ATT&CK](https://attack.mitre.org/) 映射进行增强。
## 概述
LOLBAS Project 记录了可能被攻击者滥用于恶意目的的合法 Windows 二进制文件。该工具自动化了针对这些二进制文件的 Sysmon 检测规则的创建,结合三个数据源以实现最大程度的检测覆盖:
1. **LOLBAS Project** — 包含命令示例和类别的 LOLBin 定义
2. **Sigma Rules** — 在 LOLBAS 条目中引用的社区检测规则
3. **MITRE ATT&CK** — 用于规则注释的技术 ID 和名称
### 核心功能
- **自动规则生成** — 获取 LOLBAS Project 数据并生成 Sysmon XML 规则
- **Sigma 规则增强** — 从 LOLBAS 引用中下载并解析 Sigma 检测规则,以生成更精确的 CommandLine 规则(优先级高于提取的 flags)
- **多种事件类型** — 支持 ProcessCreate (Event ID 1), NetworkConnect (Event ID 3), ImageLoad (Event ID 7), ProcessAccess (Event ID 10), 和 FileCreate (Event ID 11)
- **两种规则类型**:
- **CommandLine 规则** — 使用可执行文件 + 命令行 flags 进行更具体的检测(来自 Sigma 或 LOLBAS 命令示例)
- **Fallback 规则** — 仅匹配可执行文件名称的更广泛检测
- **MITRE ATT&CK 集成** — 使用技术 ID 和名称丰富规则内容
- **智能缓存** — 所有外部数据 (LOLBAS, MITRE, Sigma) 均在本地缓存,并支持可配置的自动更新(默认:28 天)
- **灵活配置** — 基于 TOML 的类别、映射和前缀配置
- **合并支持** — 将生成的规则与现有的 Sysmon 配置合并
- **覆盖率分析** — 分析现有 Sysmon 配置覆盖了多少 LOLBins
- **去重功能** — 可选的 `--unique-rules` flag 用于跳过跨类别的重复规则
- **详细统计** — 包含下载/解析/跳过计数器的 Sigma 增强摘要
## 安装说明
### 前置条件
- Python 3.11 或更高版本
- pip 或其他 Python 包管理器
### 设置
1. 克隆仓库:
```
git clone https://github.com/Arondy/lolbas-sysmon-rule-generator.git
cd lolbas-sysmon-rule-generator
```
2. 通过 pip 安装依赖:
```
pip install -r requirements.txt
```
3. 通过 Poetry 安装(替代方案):
```
pip install poetry
poetry install --no-root
```
## 使用方法
### 基本用法
为所有已启用的类别生成规则:
```
python -m lolbas_sysmon
```
这将:
1. 获取 LOLBAS 数据(或使用缓存的 `lolbas.json`)
2. 获取 MITRE ATT&CK 数据(或使用缓存的 `enterprise-attack.json`)
3. 下载并解析 LOLBAS 条目中引用的 Sigma 规则
4. 生成规则并保存到 `lolbas_rules.xml`
### 命令行选项
```
usage: lolbas_sysmon [-h] [-i INPUT] [-o OUTPUT] [-f] [-c CONFIG]
[--category CATEGORY] [--dry-run] [--lolbas-json PATH]
[--mitre-json PATH] [--unique-rules] [--coverage]
[--show-missing] [--show-covered] [--only-cmd | --only-fallback]
[--update-data] [--update-lolbas] [--update-mitre]
[--no-sigma] [--update-sigma]
Generate Sysmon detection rules from LOLBAS data
options:
-h, --help Show this help message and exit
-i, --input INPUT Input Sysmon config XML file to merge with
-o, --output OUTPUT Output XML file path (default: lolbas_rules.xml)
-f, --force Replace existing rules instead of skipping
-c, --config CONFIG Path to TOML configuration file
--category CATEGORY Comma-separated list of categories (e.g., Execute,Dump)
--dry-run Print generated rules without saving to file
--lolbas-json PATH Path to local LOLBAS JSON file
--mitre-json PATH Path to local MITRE ATT&CK JSON file
--unique-rules Skip duplicate rules for same executable within same event type
--coverage Analyze LOLBAS coverage in existing Sysmon config (requires -i)
--show-missing Show list of LOLBins missing from config (use with --coverage)
--show-covered Show list of LOLBins covered in config (use with --coverage)
--only-cmd Generate only CommandLine rules (more specific)
--only-fallback Generate only fallback rules (executable name only)
--update-data Force re-download of LOLBAS, MITRE, and Sigma data
--update-lolbas Force re-download of LOLBAS JSON data from URL
--update-mitre Force re-download of MITRE ATT&CK JSON data from URL
--no-sigma Disable Sigma-based rule enrichment
--update-sigma Force re-download of cached Sigma rules
```
### 示例
**为特定类别生成规则:**
```
python -m lolbas_sysmon --category "Execute,Download,Dump"
```
**预览规则而不保存(dry-run):**
```
python -m lolbas_sysmon --dry-run
```
**与现有的 Sysmon 配置合并:**
```
python -m lolbas_sysmon -i sysmonconfig.xml -o merged_config.xml
```
**在合并期间强制替换现有规则:**
```
python -m lolbas_sysmon -i sysmonconfig.xml -o merged_config.xml --force
```
**生成去重后的规则:**
```
python -m lolbas_sysmon --unique-rules
```
**仅生成 CommandLine 规则(不含 fallback):**
```
python -m lolbas_sysmon --only-cmd
```
**仅生成 fallback 规则(不含 CommandLine):**
```
python -m lolbas_sysmon --only-fallback
```
**禁用 Sigma 增强(仅使用 LOLBAS 命令示例):**
```
python -m lolbas_sysmon --no-sigma
```
**强制更新所有缓存数据:**
```
python -m lolbas_sysmon --update-data
```
**仅强制更新 Sigma 规则:**
```
python -m lolbas_sysmon --update-sigma
```
**显示已覆盖和缺失的 LOLBins:**
```
python -m lolbas_sysmon --coverage -i sysmonconfig.xml --show-covered --show-missing
```
**使用自定义配置:**
```
python -m lolbas_sysmon -c my_config.toml
```
**强制更新 LOLBAS 和 MITRE 数据:**
```
python -m lolbas_sysmon --update-data
```
### Docker 使用
构建镜像:
```
docker build -t lolbas-sysmon .
```
生成规则(独立运行):
```
docker run --rm -v .:/app lolbas-sysmon python -m lolbas_sysmon -o /app/lolbas_rules.xml
```
与现有的 Sysmon 配置合并:
```
docker run --rm -v .:/app lolbas-sysmon \
python -m lolbas_sysmon -i /app/sysmonconfig.xml -o /app/merged_config.xml
```
使用自定义配置和去重:
```
docker run --rm -v .:/app lolbas-sysmon \
python -m lolbas_sysmon -c /app/config.toml --unique-rules -o /app/lolbas_rules.xml
```
## 配置
该工具使用 TOML 配置文件(默认为 `config.toml`)。
### 类别
启用或禁用 LOLBAS 类别以进行规则生成:
```
[categories]
enabled = [
"ADS",
"AWL Bypass",
"Compile",
"Conceal",
"Copy",
"Credentials",
"Decode",
"Download",
"Dump",
"Encode",
"Execute",
"Reconnaissance",
"Tamper",
"UAC Bypass",
"Upload",
]
```
可用类别:
| Category | Description |
|----------|-------------|
| ADS | 备用数据流操作 |
| AWL Bypass | 应用程序白名单绕过 |
| Compile | 代码编译 |
| Conceal | 隐藏恶意活动 |
| Copy | 文件复制操作 |
| Credentials | 凭据访问/转储 |
| Decode | 解码编码的 payload |
| Download | 从互联网下载文件 |
| Dump | 内存/进程转储 |
| Encode | 编码 payload |
| Execute | 任意代码/命令执行 |
| Reconnaissance | 系统/网络枚举 |
| Tamper | 修改系统设置/文件 |
| UAC Bypass | 用户账户控制绕过 |
| Upload | 数据窃取 |
### 事件类型映射
将类别映射到一个或多个 Sysmon 事件类型:
```
[mappings]
"Execute" = ["ProcessCreate", "ImageLoad"] # Event ID 1, 7
"Download" = ["ProcessCreate", "NetworkConnect"] # Event ID 1, 3
"Credentials" = ["ProcessAccess"] # Event ID 10
"ADS" = ["FileCreate"] # Event ID 11
"Dump" = ["ProcessAccess", "ImageLoad"] # Event ID 10, 7
```
### 规则组设置
```
[rule_groups]
prefix = "LOLBAS_" # Prefix for fallback rules
cmd_prefix = "LOLBAS_CMD_" # Prefix for CommandLine rules
unique_rules = false # Enable deduplication by default
```
### 数据源
```
[lolbas]
json_file = "lolbas.json"
url = "https://lolbas-project.github.io/api/lolbas.json"
auto_update = true
max_age_days = 28
[mitre]
json_file = "enterprise-attack.json"
url = "https://raw.githubusercontent.com/mitre/cti/master/enterprise-attack/enterprise-attack.json"
auto_update = true
max_age_days = 28
```
### Sigma 配置
```
[sigma]
enabled = true
cache_dir = "cache_sigma_rules"
auto_update = true
max_age_days = 28
```
## 输出格式
生成的规则遵循 Sysmon XML 架构:
```
CertUtil.exe
-decode;-decodehex;-urlcache;-encode
wmic.exe
```
## 工作原理
1. **获取数据** — 下载 LOLBAS JSON(包含命令、类别、MITRE 映射的 LOLBin 列表)和 MITRE ATT&CK 数据(技术名称)
2. **Sigma 增强** — 下载 LOLBAS 条目中引用的 Sigma 检测规则,解析检测块和条件表达式,并将可转换的规则附加到 LOLBins
3. **解析与过滤** — 解析 LOLBin 条目并按启用的类别进行过滤
4. **生成规则** — 对于每个类别和事件类型:
- 使用 Sigma 规则(优先)或 LOLBAS 命令 flags(后备)创建 CommandLine 规则
- 创建 fallback 规则(仅包含可执行文件名/OriginalFileName)
- ImageLoad 规则仅针对 `.dll` LOLBins 生成
5. **使用 MITRE 增强** — 将 `technique_id` 和 `technique_name` 添加到规则属性中
6. **输出** — 保存独立的 XML 或与现有的 Sysmon 配置合并
### Sigma 增强详情
该工具从 LOLBAS `Detection` 部分中找到的 URL 下载 Sigma YAML 文件,将 GitHub blob URL 转换为原始内容 URL,并使用 [pySigma](https://github.com/SigmaHQ/pySigma) 解析它们。支持的 Sigma 功能:
- **Logsource 类别**: `process_creation`, `file_event`, `network_connection`, `image_load`, `process_access`, `registry_event`
- **条件逻辑**: `and`, `or`, `not`, `1 of selection_*`, `all of selection_*`, 括号表达式
- **字段修饰符**: `contains`, `startswith`, `endswith`, `contains|all`, `contains|any`
增强完成后,会记录详细的统计摘要:
```
Sigma enrichment summary:
URLs: 292 total, 258 downloaded, 34 cached, 0 failed
Rules: 254 parsed, 231 convertible
Skipped: 15 (unsupported fields), 8 (unsupported features)
LOLBins enriched: 176
Top skip reasons: feature:re: 8, field:Initiated: 4, field:Description: 3
```
## 覆盖率分析
`--coverage` flag 分析现有 Sysmon 配置覆盖了 LOLBAS 项目中的多少 LOLBins:
示例输出:
```
LOLBAS Coverage Report
Total LOLBins in LOLBAS: 227
Covered in config: 97
Missing from config: 130
Coverage: 42.7%
CMD Rules: 85
Fallback rules: 97
```
如果某个 LOLBin 的 `Name` 或 `OriginalFileName` 出现在配置中的任何规则中(Image, OriginalFileName, SourceImage, TargetImage, 或 ImageLoaded 标签),则被视为“已覆盖”。
## 去重逻辑
启用 `--unique-rules` 后:
- **CMD 规则**: 按 `(executable, event_type, flags)` 去重 — 相同可执行文件在相同事件类型中具有相同 flags 的规则将被跳过
- **Fallback 规则**: 按 `(executable, event_type)` 去重 — 相同可执行文件在相同事件类型中的规则将被跳过
- CMD 和 fallback 规则单独跟踪(CMD 规则不会阻止 fallback 规则)
## 测试
从项目根目录运行测试:
```
python -m pytest tests -v
```
如果您使用 Poetry:
```
poetry run python -m pytest tests -v
```
## 开发
### Pre-commit 钩子
该项目使用 pre-commit hooks 确保代码质量。安装它们:
```
pip install pre-commit
pre-commit install
```
这些 hooks 将在 `git commit` 时自动运行:
- **ruff** — 代码格式化和 linting
- **trailing-whitespace** — 删除尾部空白
- **end-of-file-fixer** — 确保文件以换行符结尾
- **check-yaml/toml** — 验证 YAML 和 TOML 语法
在所有文件上手动运行 hooks:
```
pre-commit run --all-files
```
### 持续集成
GitHub Actions 在每次 push/PR 时自动运行:
- 在 Python 3.11-3.13 上测试
- 使用 ruff 进行 linting
- Docker 构建验证
有关详细信息,请参阅 `.github/workflows/ci.yml`。
## 贡献
欢迎贡献!请随时提交 Pull Request。
1. Fork 本仓库
2. 创建您的功能分支 (`git checkout -b feature/amazing-feature`)
3. 提交您的更改 (`git commit -m 'Add amazing feature'`)
4. 推送到分支 (`git push origin feature/amazing-feature`)
5. 打开一个 Pull Request
## 许可证
该项目依据 MIT 许可证授权 — 有关详细信息,请参阅 [LICENSE](LICENSE) 文件。
## 致谢
- [LOLBAS Project](https://lolbas-project.github.io/) — Living Off The Land Binaries and Scripts
- [Sigma Rules](https://github.com/SigmaHQ/sigma) — Generic Signature Format for SIEM Systems
- [pySigma](https://github.com/SigmaHQ/pySigma) — 用于 Sigma 规则处理的 Python 库
- [MITRE ATT&CK](https://attack.mitre.org/) — Adversarial Tactics, Techniques, and Common Knowledge
- [Sysmon](https://docs.microsoft.com/en-us/sysinternals/downloads/sysmon) — System Monitor by Microsoft Sysinternals
- [Sysmon Modular](https://github.com/olafhartong/sysmon-modular) — 模块化 Sysmon 配置
标签:AMSI绕过, Cloudflare, Conpot, EDR, Living Off The Land, LOLBAS, MITRE ATT&CK, Python, Python安全, Sigma规则, Sysmon, Windows安全, 威胁检测, 开源, 无后门, 渗透测试框架, 目标导入, 知识库安全, 网络安全, 网络调试, 脆弱性评估, 自动化, 规则生成, 请求拦截, 逆向工具, 防御, 隐私保护