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, 云安全监控, 云资产可视化, 无后门, 逆向工具, 静态分析