nitrofx210/silentguard
GitHub: nitrofx210/silentguard
SilentGuard 是一款基于 Flask 仪表盘的 Windows 被动恶意软件扫描器,集成 YARA 规则和实时威胁情报源进行只读安全检测。
Stars: 1 | Forks: 0
# 🛡️ SilentGuard v2 — Windows 恶意软件分析器
[](https://python.org)
[](https://flask.palletsprojects.com)
[](https://github.com/mandiant/flare-vm)
[](LICENSE)
[](https://yara.readthedocs.io)
## ✨ SilentGuard 的功能
SilentGuard 是一款在浏览器仪表盘中运行的 **100% 只读** 恶意软件扫描器。它绝不会修改您的系统——仅进行观察和报告。您可以将其视为一个轻量级的、自托管的威胁检测控制台。
```
Start SilentGuard → Click "Scan" → Get threat report in your browser
```
**检测层:**
| 层级 | 检查内容 | 情报来源 |
|-------|---------------|-------------|
| 🔍 **进程扫描** | 进程名、路径、CPU 启发式检测 | SilentGuard 特征码 |
| 🧬 **YARA 扫描** | 进程可执行文件中的二进制模式 | Neo23x0 · Elastic · ReversingLabs |
| #️⃣ **哈希情报** | 运行中二进制文件的 SHA256 对比恶意软件数据库 | MalwareBazaar(100万+ 样本) |
| 🗝️ **注册表持久化** | Run keys · Winlogon · AppInit_DLLs | 内置启发式检测 |
| 📡 **网络关联分析** | 活动连接对比 C2 IP 黑名单 | FeodoTracker · ThreatFox |
| 📁 **文件扫描** | 对 Temp/Startup 目录进行 YARA + 哈希检查 | MalwareBazaar · YARA |
## 🆚 v1 → v2 改进
| 功能 | v1 | v2 |
|---------|----|----|
| 哈希数据库 | 2 个硬编码哈希 | MalwareBazaar(实时,100万+ 样本) |
| C2 检测 | 仅端口列表 | FeodoTracker IP 黑名单(实时) |
| IOC 匹配 | 无 | ThreatFox 7 天 IOC 订阅源 |
| YARA 扫描 | 无 | Neo23x0 + Elastic + ReversingLabs + 12 条内置规则 |
| 恶意 URL | 无 | URLhaus 活跃订阅源 |
| VirusTotal | 无 | 可选哈希查询(免费 API 密钥) |
| 订阅源缓存 | 无 | 6 小时本地缓存(可离线工作) |
| UI | 基础表格 | 实时 SSE 仪表盘,带有严重程度卡片 |
## 🚀 快速开始
### 1. 克隆并安装
```
git clone https://github.com/YOUR_USERNAME/silentguard.git
cd silentguard
pip install -r requirements.txt
```
### 2. (可选)设置 VirusTotal API 密钥
在 [virustotal.com](https://virustotal.com) 获取免费密钥 — 每天 500 次查询
```
# Windows
set VT_API_KEY=your_free_key_here
# Linux / Mac
export VT_API_KEY=your_free_key_here
```
### 3. 运行
```
# Windows(推荐:以 Administrator 身份运行以获取完整访问权限)
python app.py
# 或者在 VS Code 中按 F5(已包含 launch.json)
```
### 4. 打开仪表盘
```
http://127.0.0.1:5000
```
## 📸 仪表盘
仪表盘显示:
- **威胁卡片** — 严重程度徽章、受影响的进程/文件、注册表路径、检测来源、MITRE 技术以及逐步修复指南
- **网络选项卡** — 带有 C2/正常/可疑标签的所有活动连接
- **活动日志** — 实时 SSE 扫描进度
- **状态栏** — 已扫描进程数、YARA 命中数、情报订阅源计数
## 🏗️ 项目结构
```
silentguard/
├── app.py ← Flask backend + MalwareScanner engine (838 lines)
├── yara_engine.py ← YARA rule compiler + scanner
├── requirements.txt
│
├── intel/
│ ├── threat_feeds.py ← Feed fetcher: MalwareBazaar, FeodoTracker, ThreatFox, URLhaus
│ ├── cache.json ← Auto-generated local intel cache (gitignored)
│ └── __init__.py
│
├── yara_rules/
│ ├── 00_builtin_rules.yar ← 12 always-available rules (no internet needed)
│ ├── Neo23x0_signature-base/ ← Downloaded on first run
│ ├── Elastic_detection-rules/ ← Downloaded on first run
│ └── reversinglabs_yara/ ← Downloaded on first run
│
└── templates/
└── index.html ← Dashboard UI (single-page, vanilla JS + SSE)
```
## 🔍 检测引擎深度解析
### A. 进程扫描
每个进程进行五项检测:
```
# 1. Name signature 匹配
if name in SUSPICIOUS_PROCESS_NAMES:
# svchost32.exe, mimikatz.exe, meterpreter.exe, xmrig.exe, etc.
# 2. Suspicious path 启发式
if _is_suspicious_path(exe):
# AppData\Local\Temp, C:\Windows\Temp, C:\Users\Public, etc.
# 3. Hash 校验对比 MalwareBazaar
sha256 = hashlib.sha256(open(exe,"rb").read(512*1024)).hexdigest()
if sha256 in known_hashes: # critical alert
# 4. YARA binary 扫描
yara_matches = yara_eng.scan_file(exe)
# 5. CPU 飙升启发式(cryptominer 检测)
if proc.cpu_percent(interval=0.05) > 75:
```
### B. YARA 引擎
将 `yara_rules/` 中的所有 `.yar` / `.yara` 文件编译为一个单一的规则集:
```
yara_rules/
├── 00_builtin_rules.yar → 12 rules (keylogger APIs, shellcode, miner strings)
├── Neo23x0_signature-base/ → gen_rats, gen_ransomware, gen_mimikatz, gen_meterpreter, gen_cryptominer
├── Elastic_detection-rules/ → Emotet, WannaCry, Cobalt Strike, Metasploit, Cryptominer
└── reversinglabs_yara/ → Locky, WannaCryptor, Emotet
```
无效的规则会被自动跳过 —— 遇到错误的规则文件时编译过程绝不会失败。
### C. 威胁情报订阅源
| 订阅源 | URL | 提供内容 |
|------|-----|-----------------|
| **MalwareBazaar** | `mb-api.abuse.ch/api/v1/` | 最近的 100 个样本:SHA256 + 特征码 + 标签 |
| **FeodoTracker** | `feodotracker.abuse.ch/downloads/ipblocklist.csv` | 僵尸网络 C2 IP 黑名单 |
| **ThreatFox** | `threatfox-api.abuse.ch/api/v1/` | 7 天 IOC 订阅源(IP:端口 + 恶意软件名称) |
| **URLhaus** | `urlhaus.abuse.ch/downloads/csv_recent/` | 活跃的恶意 URL |
所有订阅源在 `intel/cache.json` 中缓存 6 小时。强制刷新:
```
python intel/threat_feeds.py --force
# 或通过 API:
curl http://127.0.0.1:5000/api/intel/refresh
```
### D. 网络关联分析
```
for conn in psutil.net_connections(kind="inet"):
if rip in c2_ips: # FeodoTracker → CRITICAL
elif rip in ioc_ip_map: # ThreatFox → CRITICAL
elif rport in KNOWN_C2_PORTS: # {4444,1337,31337,...} → suspicious
elif rport not in (80,443,53,...): # Unusual port → flag
```
### E. 注册表持久化
扫描 6 个自启动位置:
```
HKCU\Software\Microsoft\Windows\CurrentVersion\Run
HKLM\Software\Microsoft\Windows\CurrentVersion\Run
HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows (AppInit_DLLs)
```
## 🔌 REST API
| Endpoint | 方法 | 描述 |
|----------|--------|-------------|
| `/` | GET | 仪表盘 UI |
| `/api/status` | GET | 平台、psutil、YARA、VT 密钥状态 |
| `/api/scan` | GET | **SSE 流** — 实时扫描进度 → 最终结果 |
| `/api/results` | GET | 最新扫描结果 (JSON) |
| `/api/intel/refresh` | GET | 强制刷新所有威胁订阅源 |
| `/api/hash/` | GET | 手动哈希查询(本地情报 + VirusTotal) |
### 示例:哈希查询
```
curl http://127.0.0.1:5000/api/hash/a3b1c2d4e5f6a7b8c9d0e1f2a3b4c5d6
```
```
{
"sha256": "a3b1...",
"local": {
"name": "XMRig Miner",
"signature": "XMRig",
"tags": ["miner", "xmrig"],
"first_seen": "2024-01-15",
"reporter": "abuse_ch"
},
"virustotal": {
"malicious": 58,
"suspicious": 3,
"harmless": 0,
"total": 72
}
}
```
### 示例:SSE 扫描流
```
const es = new EventSource('/api/scan');
es.onmessage = e => {
const data = JSON.parse(e.data);
if (data.type === 'progress') console.log(data.message, data.percent + '%');
if (data.type === 'done') renderResults(data.result);
if (data.type === 'error') console.error(data.message);
};
```
## 🛠️ 依赖要求
```
flask>=3.0.0
psutil>=5.9.0
requests>=2.31.0
yara-python>=4.3.0 # strongly recommended
```
**可选(仅限 Windows,用于更深层扫描):**
```
pip install wmi pywin32
```
## ⚠️ 权限与安全
| 方面 | 详情 |
|--------|--------|
| **需要管理员权限** | 在 Windows 上以管理员身份运行,以获取完整的注册表和进程访问权限 |
| **只读** | SilentGuard 绝不会写入注册表、终止进程或修改文件 |
| **修复** | UI 中显示的所有修复步骤必须由分析师**手动**执行 |
| **演示模式** | 在非 Windows(Linux/Mac)系统上,显示逼真的演示数据 — 不进行真实扫描 |
| **网络** | 仅向 abuse.ch 订阅源 + 可选的 VirusTotal 发起出站 HTTPS 请求 |
## 🗺️ MITRE ATT&CK 覆盖范围
检测结果映射到以下技术:
| 技术 | ID | 检测方法 |
|-----------|----|-----------------|
| 进程注入 (Process Injection) | T1055 | YARA shellcode/inject 规则 |
| 注册表 Run Keys (Registry Run Keys) | T1547.001 | 注册表持久化扫描 |
| 凭据转储 (Credential Dumping, Mimikatz) | T1003 | YARA gen_mimikatz.yar |
| 命令与脚本 (Command & Scripting) | T1059 | 进程名 + 路径启发式检测 |
| 加密通道 (Encrypted Channel, C2) | T1573 | FeodoTracker + ThreatFox IP 关联分析 |
| 计划任务 (Scheduled Task) | T1053 | 注册表 + 进程路径检查 |
| 挖矿 (Cryptomining) | T1496 | CPU 峰值启发式检测 + YARA stratum 字符串 |
| 勒索软件 (Ransomware) | T1486 | YARA gen_ransomware + Neo23x0 规则 |
| Cobalt Strike | T1071 | YARA Elastic Cobalt Strike beacon 规则 |
## 📦 构建技术栈
- **Flask** — 后端 API + SSE 流式传输
- **psutil** — 跨平台进程 + 网络枚举
- **yara-python** — YARA 规则编译和扫描
- **requests** — 威胁订阅源获取
- **abuse.ch APIs** — MalwareBazaar, FeodoTracker, ThreatFox, URLhaus
- **Vanilla JS + SSE** — 实时仪表盘(无框架依赖)
## 作者
**Aryan** — 网络与系统安全硕士 (M.Tech Cybersecurity & Systems of Networks)
Amrita 计算机学院 (Amrita School of Computing), Amritapuri 校区
标签:Flask, IP 地址批量处理, YARA, 云资产可视化, 威胁情报, 开发者工具, 恶意软件扫描, 逆向工具