t-tani/defender2yara
GitHub: t-tani/defender2yara
将微软 Defender 防病毒签名(VDM)转换为 YARA 规则的 Python 工具,便于从官方签名库创建自定义检测规则。
Stars: 143 | Forks: 24

# 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, 数字取证, 无后门, 特征库转换, 签名提取, 网络安全, 自动化脚本, 自动化规则生成, 防病毒, 隐私保护