zainabh4san/mini-yara-detector

GitHub: zainabh4san/mini-yara-detector

一个基于 Python 和 YARA 的教学用恶意软件检测器,通过 10 条手写规则和合成样本演示检测工程的基本流程。

Stars: 0 | Forks: 0

# Mini YARA 恶意软件检测器 这是我用 Python 和 YARA 构建的一个小型恶意软件检测器。YARA 是一款工具, 安全分析师用它来描述什么是“可疑的”——你编写的规则 会指定“如果文件包含这些字符串,就标记它”,然后引擎会根据 所有规则同时检查文件。我的扫描器加载了我自己编写的 10 条规则,扫描一组 测试文件,使用 SHA-256 对每个文件进行指纹识别,并将所有内容保存到 CSV 报告中。 ## ⚠️ 免责声明 仅供教育用途。所有测试样本均为合成文件——未使用或执行任何真实的恶意软件。 每个样本都是我自己编写的纯文本文件,每个虚假 URL 都使用了保留的 `.invalid` 域名(它永远不会解析到真实服务器),并且 每个文件在开头都声明了它是一个无害的测试产物。 ## 🧰 使用到的工具 | 工具 | 版本 | 用途 | |------|---------|---------| | Python | 3.13.5 | 扫描器本身 (`scan.py`) | | yara-python | 4.5.4 | YARA 引擎的 Python 绑定——用于编译和运行规则 | | Git | 2.47.1 | 版本控制 | | PowerShell | Windows 11 | 运行所有内容(无需 WSL,无需 VM) | ## 📁 项目结构 ``` malware-detector/ ├── rules/ # 10 YARA rules, one per detection theme │ ├── rule_01.yar # suspicious PowerShell (-enc, IEX) │ ├── ... │ └── rule_10.yar # reverse/bind shell indicators ├── samples/ # 10 safe synthetic test files (plain text) │ ├── sample_01.txt │ ├── ... │ └── sample_10.txt ├── results/ │ └── scan_results.csv # output of the most recent scan ├── scan.py # the scanner — loads rules, scans samples, writes results ├── hash_samples.py # rebuilds tracking.csv (SHA-256 of every sample) ├── tracking.csv # sample inventory: name, hash, theme └── README.md ``` ## ▶️ 如何运行 在 PowerShell 中(你只需要安装了 Python 即可): ``` # 1. 检查你是否安装了 Python 3.8+ python --version # 2. 安装 YARA 库 pip install yara-python # 3. 进入项目文件夹并运行 scanner cd malware-detector python scan.py ``` 扫描会在终端中为每个文件打印出一个信息块,并将完整的报告写入 `results/scan_results.csv`。如果 `rules/` 或 `samples/` 为空,脚本会停止 并提示明确的错误,而不是假装一切正常。 ## 📊 示例输出 以下是 `results/scan_results.csv` 中的实际行(为了便于阅读,此处的哈希值已缩短—— CSV 中存储了完整的 64 个字符): | filename | sha256_hash | matched_rules | scan_timestamp | |----------|-------------|---------------|----------------| | sample_01.txt | `9f03977e6e5933ea…` | Suspicious_PowerShell_EncodedCommand | 2026-07-13T02:30:58 | | sample_02.txt | `88d45cae416ac684…` | Office_Macro_AutoExecution | 2026-07-13T02:30:58 | | sample_03.txt | `43e713d8b9963b2e…` | Generic_Downloader_Indicators | 2026-07-13T02:30:58 | | sample_04.txt | `d278a3c0f9d3d365…` | UPX_Packed_Executable_Markers | 2026-07-13T02:30:58 | | sample_05.txt | `2492a4ebe3de09f2…` | Credential_Theft_Indicators | 2026-07-13T02:30:58 | | sample_06.txt | `24d639cde2c5c6bb…` | Ransomware_Note_Indicators | 2026-07-13T02:30:58 | | sample_07.txt | `e0c3fec25901696a…` | Paste_Site_And_URL_Shortener | 2026-07-13T02:30:58 | | sample_08.txt | `02fd2d19f55d631c…` | Registry_RunKey_Persistence | 2026-07-13T02:30:58 | | sample_09.txt | `9fd658a502e60152…` | Script_Obfuscation_Eval_Decode | 2026-07-13T02:30:58 | | sample_10.txt | `b93a6a8db9b8178c…` | Reverse_Or_Bind_Shell_Indicators | 2026-07-13T02:30:58 | 扫描了 10 个文件,10 个匹配,0 个遗漏——同样重要的是,每条规则也都在 *其他*九个样本上进行了测试,以确认它不会在 不该触发的地方触发。 ## 📜 编写的 YARA 规则 | 规则文件 | 检测内容 | 严重程度 | |-----------|-----------------|----------| | rule_01.yar | PowerShell 编码命令 (`-enc`) 和 `IEX(` 执行 | high | | rule_02.yar | Office 宏自动执行 (`AutoOpen`, `Document_Open`) | medium | | rule_03.yar | Downloader 行为 (`http://`, `wget`, `DownloadFile`) | medium | | rule_04.yar | 可执行文件中的 UPX 壳标记 | low | | rule_05.yar | 凭据窃取字符串 (`password=`, `passwd`, credential access) | high | | rule_06.yar | 勒索说明用语 ("YOUR FILES HAVE BEEN ENCRYPTED", bitcoin) | high | | rule_07.yar | Paste 站点和 URL 缩短器 (pastebin.com, bit.ly) | low | | rule_08.yar | 注册表 Run-key 持久化 (HKCU `...\CurrentVersion\Run`) | medium | | rule_09.yar | 脚本混淆链 (`base64_decode`, `chr(`, `eval(`) | medium | | rule_10.yar | 反向/绑定 shell 指标 (`reverse_shell`, `nc -e`) | high | 严重程度是我个人的判断:UPX 壳和缩短器 URL 被标记为 `low` 是因为 大量合法软件都在使用它们,而磁盘上出现勒索说明或 反向 shell 基本上意味着糟糕的事情已经发生了。 ## 🧠 我学到了什么 - **YARA 规则的实际工作原理** —— `strings:`/`condition:` 结构, `nocase` 匹配,以及一些小的坑,比如在注册表路径中必须将每个反斜杠双写,因为 `\` 在 YARA 字符串中是一个转义字符。 - **检测规则的好坏取决于它的误报率。** 真正的测试 不是“规则 3 是否匹配样本 3”——而是检查规则 3 *是否不会* 匹配其他九个样本。我不得不在不相关的样本中对 URL 进行无害化处理(`hxxp://`),这样我的 downloader 规则就不会在每一个包含链接的文件上都被触发。 - **哈希是安全领域为文件命名的方式。** SHA-256 指纹让我能够 证明我的样本在各个阶段之间没有发生变化,这也是真正的 威胁情报平台所使用的同一套身份识别系统。 - **你可以在没有 VM 的情况下安全地练习检测工程。** 带有 真实触发字符串的合成样本、不可达的 `.invalid` 域名,以及 自我声明的文件头,能让你在零风险的情况下获得真实的 YARA 匹配结果。 - **Windows 会让你在文本编码面前吃尽苦头。** 一个破折号导致我的规则文件中的 YARA 解析器崩溃, *并且*在我的终端输出中打印出了乱码——一个字符引发了 两个单独的 bug。对于任何会被解析器或控制台处理的内容,请坚持只使用 ASCII。 ## 👋 关于 我将此作为我的第一个网络安全动手项目来构建,以学习检测 工程基础知识——编写规则、如实地测试它们,并记录 结果
标签:AI合规, Python, YARA, 云安全监控, 云资产可视化, 安全, 教育项目, 无后门, 超时处理, 逆向工具, 静态分析