na8877waf-cmd/YARA-malware-detector
GitHub: na8877waf-cmd/YARA-malware-detector
基于 YARA 和 Python 的教育性恶意软件静态检测工具,通过自定义规则扫描文件并生成 CSV 报告,帮助用户学习恶意软件分类基础。
Stars: 0 | Forks: 0
# Mini Malware Detector (YARA + Python)
一个小型、教育性的静态分析工具,它使用自定义的 YARA 规则扫描文件,并将 SHA-256 哈希值及匹配的规则记录到 CSV 报告中。
该项目旨在作为学习项目,帮助理解 YARA 规则的编写以及基础的恶意软件静态分类。**这是一个实验室/教育项目 —— 它不是生产级的防病毒引擎。**
## 安全规则(请先阅读)
如果你打算使用**真实的恶意软件样本**进行测试(可选 —— 该项目在包含的安全测试文件上也能完全运行):
1. **仅在隔离的虚拟机中运行。** 切勿在宿主机上针对真实样本运行此工具。请使用 VirtualBox、VMware、UTM 或类似软件,并将网络适配器设置为“Host-only”或直接禁用。
2. **在下载任何内容之前,先为虚拟机打快照。** 如果出现任何问题,可以立即恢复。
3. **保持宿主机与客户机隔离。** 不要使用会同步回宿主机的共享文件夹。将虚拟机视为一次性的。
4. **切勿直接运行/打开/双击未知文件。** 此扫描程序仅读取文件字节以进行模式匹配 —— 它不会执行样本。请保持这一点:不要添加任何执行功能。
## 1. 安装工具
以下步骤适用于隔离的虚拟机(Windows、Linux 或 macOS 客户机 —— 请根据操作系统调整命令)。
### YARA(引擎本身)
- **Linux (Debian/Ubuntu):** `sudo apt update && sudo apt install yara`
- **macOS (Homebrew):** `brew install yara`
- **Windows:** 从 https://github.com/VirusTotal/yara/releases 下载最新版本并将其添加到你的 PATH 中。
验证:`yara --version`
### Python 3
- **Linux:** `sudo apt install python3 python3-pip`
- **macOS:** `brew install python3`
- **Windows:** 从 https://www.python.org/downloads/ 下载,并在安装过程中勾选“Add Python to PATH”。
验证:`python3 --version`(或在 Windows 上使用 `python --version`)
### yara-python(让 Python 能够调用 YARA 引擎)
```
pip install yara-python
```
(或者在拥有此 repo 后运行 `pip install -r requirements.txt`)
### Git
- **Linux:** `sudo apt install git`
- **macOS:** `brew install git`
- **Windows:** https://git-scm.com/download/win
验证:`git --version`
### VS Code(可选但推荐)
从 https://code.visualstudio.com/ 下载并安装,然后从插件市场安装“YARA”扩展以获取语法高亮。
## 2. 运行项目
```
# Clone 或下载此 repo,然后:
cd malware-detector
pip install -r requirements.txt
python3 scan.py
```
默认情况下,它会使用 `rules/` 中的规则扫描 `samples/` 目录,并将结果写入 `results/scan_results.csv`。
## 3. 项目结构
```
malware-detector/
├── rules/ # 10 YARA rules, one per file
│ ├── rule_01_suspicious_powershell.yar
│ ├── rule_02_macro_behavior.yar
│ ├── rule_03_downloader_clues.yar
│ ├── rule_04_packed_binary_hints.yar
│ ├── rule_05_credential_theft.yar
│ ├── rule_06_ransom_note.yar
│ ├── rule_07_suspicious_urls.yar
│ ├── rule_08_persistence_clues.yar
│ ├── rule_09_obfuscation_patterns.yar
│ └── rule_10_remote_access_tool.yar
├── samples/ # files to scan
│ ├── README.md # safety notes for this folder
│ ├── sample_tracking.csv # hash/name tracking sheet
│ └── test_strings/ # safe benign files, one per rule,
│ # used to test rules without real malware
├── results/ # scan_results.csv gets written here
├── scan.py # the scanner
├── requirements.txt
├── .gitignore # keeps real malware samples out of git
└── README.md
```
## 4. YARA 基础
每个规则都包含相同的三个部分:
- **`meta`** — 自由文本信息:作者、描述、日期。它不影响匹配,仅作文档记录。
- **`strings`** — 要查找的模式:纯文本、十六进制字节或正则表达式。
- **`condition`** — 决定何时算作匹配的逻辑(例如 `any of them`、`2 of them`、`$a and $b`、`all of them`)。
最小示例:
```
rule Suspicious_Pattern
{
meta:
author = "yourname"
description = "Detects suspicious string pattern"
strings:
$a = "powershell" nocase
$b = "http://"
condition:
any of them
}
```
只要有一个字符串匹配,`any of them` 就会触发 —— 这非常适合快速的概念验证,但在处理真实文件时会产生大量噪音。此 repo 中的规则大多使用 `2 of them` 来减少误报,因为单个常见单词(如 "powershell")本身并不可疑,但两三个同时出现通常就意味着有问题。
## 5. 本项目中的 10 条规则
| # | 规则 | 查找内容 |
|---|------|--------------------|
| 1 | Suspicious_PowerShell | 编码命令、`IEX`、隐藏窗口、绕过标志 |
| 2 | Macro_Behavior_Strings | `AutoOpen`、`Shell()`、`CreateObject` 等 |
| 3 | Downloader_Clues | `URLDownloadToFile`、`DownloadFile`、`curl -o`、`wget` |
| 4 | Packed_Binary_Hints | UPX / ASPack / PECompact 节区标记 |
| 5 | Credential_Theft_Strings | mimikatz、lsass.exe、浏览器凭据存储 |
| 6 | Ransom_Note_Strings | "files have been encrypted"、比特币、.onion |
| 7 | Suspicious_URLs | 基于 IP 的原始 URL、被滥用的 TLD(.xyz、.top、.tk) |
| 8 | Persistence_Clues | 注册表 Run 键、schtasks、cron、launch agents |
| 9 | Obfuscation_Patterns | Base64/eval/char-code 混淆调用 |
| 10 | Remote_Access_Tool_Clues | TeamViewer、AnyDesk、ngrok、Meterpreter |
每一条规则都特意保持简单,并在 `.yar` 文件中附有注释说明 —— 请阅读这些注释以了解每个条件背后的逻辑。
## 6. 收集实验室样本(可选,进阶)
如果你想针对真实的恶意软件进行测试(强烈建议仅在下方基本的 test_strings/ 工作流程正常运行后再执行此操作):
1. 在你的隔离虚拟机内,访问 MalwareBazaar
(https://bazaar.abuse.ch/) 并从其受控的样本集中下载。
2. 将每个样本保存到 `samples/` 中。
3. 立即将其记录在 `samples/sample_tracking.csv` 中:
`sample_name, sha256, source, family_or_type, date_added, notes`
4. 自己获取 SHA-256 哈希值进行双重检查(不要只相信网站的标签):
- Linux/macOS: `sha256sum samples/myfile.exe`
- Windows PowerShell: `Get-FileHash samples\myfile.exe -Algorithm SHA256`
5. 切勿将这些真实样本提交到 GitHub —— `.gitignore` 已经配置为屏蔽它们,你的公开 repo 中只会保留跟踪表和规则。
## 7. 如何测试所有内容
你不需要真实的恶意软件来验证整个流水线是否正常工作 —— 该 repo 附带了 `samples/test_strings/`,包含十个普通的 `.txt` 文件(无可执行代码),每一个都经过精心设计,旨在触发其中一条规则。
### 运行完整测试
```
python3 scan.py --samples samples/test_strings
```
预期输出:扫描 10 个文件,标记 10 个,并显示每个匹配的规则名称(你可以在此 repo 的提交历史/你自己的首次运行中查看确切的验证输出)。
### 每次测试单条规则(调试)
直接使用 `yara` CLI 对单个规则和单个文件进行测试:
```
yara rules/rule_01_suspicious_powershell.yar samples/test_strings/test_powershell.txt
```
如果匹配,YARA 会打印规则名称。如果不匹配,则什么也不打印 —— 这对于排查究竟是哪条规则行为异常非常有用。
### 误报的健全性检查
扫描一个包含完全不相关的无害文件的文件夹(例如一个包含随机散文的 `.txt` 文件),并确认你得到的是 `NO MATCH` / 0 标记。这很重要 —— 一个把所有东西都标记为恶意的检测器是毫无用处的。
### 针对真实样本进行测试(可选)
一旦上述测试通过,将 `--samples` 指向你的真实(仅限隔离虚拟机)样本文件夹:
```
python3 scan.py --samples samples --out results/scan_results.csv
```
检查 `results/scan_results.csv` 并将哈希值与你的 `sample_tracking.csv` 进行交叉比对。
## 8. 发布到 GitHub
- `.gitignore` 已经将真实的恶意软件样本从 repo 中剔除 —— 只会发布规则、scan.py、跟踪表模板以及无害的 test_strings/ 文件。
- 考虑在你的 repo 主 README(即本文件)顶部添加一段简短的免责声明,指出这是一个教育项目,而不是生产级 AV 引擎 —— 对于任何公开的安全工具 repo 来说,这都是一个好习惯。
- 如果你想让其他人自由地复用它,宽松的许可证(如 MIT)通常是小型教育工具的标配。
## 局限性(请正视这些问题)
- 这**仅仅是静态字符串匹配** —— 没有行为分析,没有沙盒环境,没有 PE/结构解析,也没有熵分析。
- 与真实的 AV 引擎相比,简单的基于字符串的规则很容易被绕过,并且会产生误报/漏报。
- 其目的纯粹是为了学习而演示 YARA + Python 的集成。
标签:DNS 反向解析, IP 地址批量处理, Python, Web技术栈, YARA, 云安全监控, 云资产可视化, 无后门, 逆向工具, 静态分析