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 规则生成器 [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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安全, 威胁检测, 开源, 无后门, 渗透测试框架, 目标导入, 知识库安全, 网络安全, 网络调试, 脆弱性评估, 自动化, 规则生成, 请求拦截, 逆向工具, 防御, 隐私保护