t-tani/defender2yara

GitHub: t-tani/defender2yara

将微软 Defender 防病毒签名(VDM)转换为 YARA 规则的 Python 工具,便于从官方签名库创建自定义检测规则。

Stars: 143 | Forks: 24

![title](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/3647ffaf4d215302.svg) # defender2yara `defender2yara` 是一个 Python 工具,用于将 Microsoft Defender Antivirus Signatures (VDM) 转换为 YARA 规则。该工具便于从最新的签名数据库或手动提供的 Microsoft Defender .vdm 文件创建自定义 YARA 规则,从而增强恶意软件检测、分析和威胁狩猎能力。 本项目仅专注于防病毒签名,**不**涉及 EDR 签名或检测逻辑。 ## 功能 - 将 Microsoft Defender Antivirus Signatures (VDM) 转换为 YARA 规则。 - 支持具有类正则表达式的字符串和十六进制字节模式匹配。 - 支持将评分规则转换为 YARA 条件。 - 下载最新的签名数据库。 - 将 YARA 规则导出为单个文件或按恶意软件家族分类的文件。 - 向规则添加文件头检查,以优化使用生成的 YARA 规则进行的扫描。 - 手动指定 base 和 delta VDM 文件的路径。 ## 生成的 YARA 规则 用户可以在 [*yara-rules*](https://github.com/t-tani/defender2yara/tree/yara-rules) 分支中找到由 `defender2yara` 生成的规则。 该分支每 30 分钟更新一次规则。 ## 安装 用户可以使用 `pip` 或 `Poetry` 安装 `defender2yara`。 ### 使用 `pip` 确保系统上安装了 Python 3.10 或更高版本。用户可以使用 `pip` 安装该工具: ``` pip install defender2yara ``` ### 使用 `Poetry` 1. 克隆 GitHub 仓库: ``` git clone https://github.com/t-tani/defender2yara.git ``` 2. 进入克隆的目录: ``` cd defender2yara ``` 3. 使用 `Poetry` 安装依赖项: ``` poetry install ``` ## 用法 使用 `defender2yara` 时可用的选项如下: ``` usage: defender2yara [options] Convert Microsoft Defender Antivirus Signatures(VDM) to YARA rules. options: -h, --help show this help message and exit -v, --version show defender2yara version -l, --latest_signature_version show latest signature version -o OUTPUT, --output OUTPUT output directory for YARA rules [default: ./rules] -d, --download only download the latest signature database -c CACHE, --cache CACHE directory to save signature database(vdm/dll files) [default: ./cache] -s, --single_file export YARA rules into a single file --header_check add file header check to generated YARA rules --full_engine FULL_ENGINE, --fe FULL_ENGINE manually specify the path of mpam-fe.exe --base BASE manually specify the path of mpa{v|s}base.vdm --delta DELTA manually specify the path of mpa{v|s}dlta.vdm --proxy PROXY use a proxy to download signatures (e.g. http://localhost:8000) --debug print detailed logs --suppress suppress all logs ``` ## 示例 ### 下载最新的签名并将其转换为 YARA 规则 要下载最新的签名数据库并将其转换为 YARA 规则,请使用以下命令: ``` defender2yara ``` `defender2yara` 生成以下文件: - ./rules/[signature_version]/[platform]/[malware_type]/[family_name].yara 如果用户想要更改 .rules 目录,可以使用 `--output` 或 `-o` 选项指定目录。 ### 下载最新的签名 要下载最新的签名数据库,请使用以下命令: ``` defender2yara -d ``` `defender2yara` 将最新的签名下载到以下目录: - ./cache/vdm/[major_version]/0.0/mpa{s,v}base.vdm - ./cache/vdm/[major_version]/[minor_version]/mpa{s,v}dlta.vdm - ./cache/engine/[engine_version]/mpengine.dll 如果用户想要更改 .cache 目录,可以使用 `--cache` 或 `-c` 选项指定其目录。 ### 将签名转换为单个 YARA 文件 要将 YARA 规则导出为单个文件,请使用 `--single_file` 选项: ``` defender2yara --single_file ``` `defender2yara` 生成以下两个文件: - ./rules/[signature_version]/anti-virus.yara - ./rules/[signature_version]/anti-spyware.yara ### 向 YARA 规则添加文件头检查 要向生成的 YARA 规则添加文件头检查,请使用 `--header_check` 选项: ``` defender2yara --header_check ``` 目前,`--header_check` 选项向 YARA 规则添加以下头检查,旨在检测以下文件: - PE 文件 - MACH-O 文件 - ELF 文件 ### 手动指定签名更新文件 如果用户想要手动指定 mpam-fe.exe 的路径,请使用 `--fe` 或 `--full_engine` 选项: ``` defender2yara --fe /path/to/mpam-fe.exe ``` ### 手动指定 Base 和 Delta VDM 文件 如果用户想要手动指定 base 和 delta VDM 文件的路径,请使用 `--base` 和 `--delta` 选项: ``` defender2yara --base /path/to/mpavbase.vdm --delta /path/to/mpavdlta.vdm ``` ### 使用代理下载签名 如果用户需要使用代理下载签名,请使用 `--proxy` 选项指定代理 URL: ``` defender2yara --proxy http://localhost:8000 ``` ### 调试和日志记录 使用 `--debug` 选项显示详细日志。使用 `--suppress` 选项抑制所有日志。 ``` defender2yara --debug ``` ``` defender2yara --suppress ``` ## 限制 - 由于以下原因,Microsoft Defender 中的某些类正则表达式模式匹配无法完全转换: - YARA 引擎的限制 - `mpengine.dll` 中未记录或未知的实现 - 不支持 Microsoft Defender 的若干高级功能,例如: - 模拟器引擎 - 用 Lua 实现的逻辑 - 解包模块 - 以及其他专有技术 ## 许可证 本项目根据 MIT 许可证授权。有关详细信息,请参阅 [LICENSE](./LICENSE) 文件。 ## 贡献 欢迎贡献。请提交 pull request 或开启 issue 以讨论更改或改进。 ## 联系方式 如有任何问题或疑问,请在 [此 GitHub 仓库](https://github.com/t-tani/defender2yara) 上开启 issue。 ## 致谢 如果没有以下资源提供的宝贵见解,本项目是不可能完成的: - **GitHub - commial/experiments** 和 **Windows Defender: Demystifying and Bypassing ASR by Understanding the AVS Signatures**:特别感谢 GitHub 上 [commial/experiments](https://github.com/commial/experiments) 仓库的作者以及在 Black Hat Europe 2021 上发表的富有洞察力的论文 [Windows Defender: Demystifying and Bypassing ASR by Understanding the AVS Signatures](https://i.blackhat.com/EU-21/Wednesday/EU-21-Mougey-Windows-Defender-demystifying-and-bypassing-asr-by-understanding-the-avs-signatures.pdf)。他的工作和研究极大地帮助了我们理解防病毒签名的各个方面,并为深入理解 Windows Defender 签名的运作机制提供了见解。 - **GitHub—taviso/loadlibrary**:特别感谢 Tavis Ormandy 在 GitHub 上的仓库 [loadlibrary] (https://github.com/taviso/loadlibrary)。该仓库为理解 Microsoft Defender 提供了极佳的见解,也是逆向 `msmpeng.dll` 的切入点。 - **Retooling Blog**:我们还要感谢 Retool 博客的作者撰写的详细文章 [An Unexpected Journey into Microsoft Defender's Signature World](https://retooling.io/blog/an-unexpected-journey-into-microsoft-defenders-signature-world)。他们对 Microsoft Defender 签名机制的探索和文档对本项目非常宝贵。 - **Threat Name Definitions**:我们要感谢 Microsoft 提供详细的 [Threat Name Definitions](https://learn.microsoft.com/en-us/defender-xdr/malware-naming?view=o365-worldwide)。该文档对于理解 Microsoft Defender 使用的恶意软件命名约定至关重要。 感谢所有这些来源为该领域做出的贡献并与社区分享他们的知识。
标签:DNS信息、DNS暴力破解, EDR辅助, Microsoft Defender, Python, VDM文件, YARA规则, 威胁情报, 开发者工具, 微软Defender, 数字取证, 无后门, 特征库转换, 签名提取, 网络安全, 自动化脚本, 自动化规则生成, 防病毒, 隐私保护