chrakouaanas2-tech/anti-ransomware
GitHub: chrakouaanas2-tech/anti-ransomware
一个基于行为分析的 Windows 离线反勒索软件代理,通过实时监控文件系统异常行为检测并阻断勒索软件攻击,同时提供加密版本化备份以支持文件恢复。
Stars: 1 | Forks: 0
# Windows 反勒索软件保护平台
一个适用于 Windows 的无特征码、离线反勒索软件代理。它实时监控文件系统,检测类似勒索软件的行为(批量文件修改、高熵值写入、卷影副本删除、金丝雀文件篡改),对受保护文件进行本地版本控制和加密(并可选地备份到远程 SFTP 主机),并在确认攻击后终止违规进程。
## 功能
- 通过可配置路径进行**实时文件系统监控** (`watchdog`)
- **基于熵的加密检测**(文件内容的 Shannon 熵)
- **批量修改和可疑进程检测** (`psutil`)
- **金丝雀(诱饵)文件** —— 一旦勒索软件触碰即可立即检测
- **卷影副本删除检测**(捕获 `vssadmin delete shadows`)
- 受保护文件类型的**版本化本地备份**,通过哈希进行去重
- 通过 SFTP 进行 **AES-GCM-256 加密的远程备份**,并在两台主机之间轮换
- 在终止可疑进程前,对其打开的文件进行**紧急快照**
- **进程中和** —— 在确认攻击后终止勒索软件
- 通过 `HKCU\...\Run` 注册表键实现**登录时自动启动**
- **PySide6 桌面 GUI**,带有日志查看器、从备份恢复和系统托盘功能
## 架构
```
agent.py Main agent loop (CLI entry point)
run_gui.py GUI entry point (also starts the agent in a thread)
config.yaml All tunables (thresholds, paths, remote servers)
core/
file_monitor.py watchdog handler: counts modifications, triggers backup
entropy_detector.py Shannon entropy check on first 4 KiB
process_monitor.py Flags processes with too many open files
shadowcopy_monitor.py Detects vssadmin shadow-copy deletion attempts
canary.py Deploys + verifies bait files
behavior_engine.py Weighted scoring -> ransomware? boolean
response_engine.py Emergency snapshot + process kill
persistence.py Registers agent in HKCU Run key
backup/
config.py Loads backup settings from config.yaml
backup_engine.py Entry point — local versioned + optional remote
versioning.py Hash-deduplicated versioned local copies
crypto.py AES-GCM-256 encrypt/decrypt
key_manager.py Generates and stores the 256-bit key
remote_backup.py SFTP upload, rotates between two servers by hour
snapshot.py Emergency snapshot of in-use files
restore.py Restore latest version of a file
integrity.py SHA-256 helper
gui/
app.py Bootstraps Qt app + tray + agent thread
main_window.py Dashboard: log view, restore, browse backups
tray.py System tray icon + menu
alerts.py Modal alert when ransomware detected
backups_viewer.py Read-only list of all backups
agent_thread.py Runs the agent inside the Qt event loop
utils/
entropy.py Shannon entropy
logger.py File logger (writes logs/agent.log)
helpers.py Wi-Fi disable/enable helpers
```
## 环境要求
- Windows 10 或 11
- Python 3.10+(已在 3.14 上测试)
- 管理员权限(用于卷影副本检测、写入注册表、终止进程)
## 安装说明
### 1. 克隆
```
git clone https://github.com//.git
cd
```
### 2. 创建虚拟环境(推荐)
```
python -m venv .venv
.\.venv\Scripts\Activate.ps1
```
### 3. 安装依赖
```
pip install -r requirements.txt
```
### 4. 查看 `config.yaml`
打开 `config.yaml` 并至少调整以下内容:
| 键 | 控制内容 | 默认值 |
| --- | --- | --- |
| `watch_path` | 监控勒索软件行为的文件夹 | `C:/Users` |
| `backup_root` | 版本化备份的存放位置 | `C:/AntiRansomwareBackup` |
| `protected_extensions` | 每次修改时都会备份的文件类型 | docx/xlsx/pdf/jpg/png/txt/zip |
| `canary_files` | 诱饵文件路径 | `C:/Users/Public/Documents` 下的两个文件 |
| `file_modification_threshold` | 触发警报前在 `time_window` 内修改的文件数 | 40 / 10s |
| `entropy_threshold` | 被视为“已加密”的每字节熵值 | 7.5 |
| `remote_backup_enabled` | 开启 SFTP 备份 | `false` |
| `remote_servers` | SFTP 目标列表(主机/用户/路径) | 占位 IP |
| `remote_ssh_key` | 用于 SFTP 的私钥路径 | `~/.ssh/id_rsa` |
### 5. (可选)配置远程备份
如果您想进行加密的跨主机备份:
1. 在 `config.yaml` 中设置 `remote_backup_enabled: true`。
2. 在 `remote_servers` 中填写一个或两个您拥有的 SFTP 目标。
3. 确保相应的 SSH 密钥位于 `remote_ssh_key` 路径,并且公钥已添加到服务器的 `~/.ssh/authorized_keys` 中。
4. 文件在上传前会使用 AES-GCM-256 在客户端进行加密 —— 远程主机永远不会看到明文。
加密密钥会在首次运行时生成于 `C:/AntiRansomwareBackup/.key` 并标记为隐藏。**请将此密钥备份到安全的地方** —— 没有它,您的加密备份(本地和远程)将无法恢复。
### 6. 运行
**CLI 模式**(输出日志到控制台和 `logs/agent.log`):
```
python agent.py
```
**GUI 模式**(仪表板 + 托盘图标 + 代理线程):
```
python run_gui.py
```
两者都应在具有提升权限(管理员)的 PowerShell 会话中启动。
### 7. (可选)登录时自动启动
代理程序会在首次启动时将自己注册到 `HKCU\Software\Microsoft\Windows\CurrentVersion\Run` 中,因此它会在下次用户登录时自动启动。要禁用此功能,请从该键中删除 `AntiRansomwareAgent` 值(`regedit`)。
## 检测原理
`core/behavior_engine.py` 会在每次循环迭代中分配一个加权分数:
| 信号 | 权重 |
| --- | --- |
| 时间窗口内文件修改次数 > 阈值 | +30 |
| 时间窗口内 > 5 次高熵值修改 | +40 |
| 金丝雀文件被篡改 | +100(立即触发) |
| 观察到 `vssadmin` 卷影副本删除 | +60 |
| 进程打开的文件数 > `max_open_files` | +20 |
如果分数达到 **70**,代理程序将调用 `neutralize()`:它会对可疑进程打开的所有文件进行快照,然后终止这些进程。
## 恢复文件
在 GUI 中,点击 **Restore File From Backup**,选择您要恢复的文件的原始路径,最新加密的版本将被解密并写回原处。
通过代码方式恢复:
```
from backup.restore import restore_latest
restore_latest("C:/AntiRansomwareBackup/C/Users/you/Documents/important.docx",
"C:/Users/you/Documents/important.docx")
```
## 未提交的内容
`.gitignore` 排除了:
- `__pycache__/`,构建产物
- `.idea/`, `.vscode/` IDE 元数据
- `logs/`, `*.log`
- `.key`, `*.pem`, `id_rsa*`(任何泄露进来的机密信息)
- `backups/`, `SNAPSHOTS/`
- `.env*`, `config.local.yaml`
位于 `C:/AntiRansomwareBackup/.key` 的加密密钥在设计上被故意放置在代码仓库之外 —— 请保持这一设置。
## 限制 / 已知注意事项
- **不能替代真正的 EDR。** 启发式算法比较粗糙;如果攻击者足够小心,通过限制修改频率并避开金丝雀文件,就可以逃避检测。
- **递归监控 `C:/` 的开销非常大。** 默认值为 `C:/Users`。监控整个磁盘会导致磁盘 I/O 饱和,因为每次修改都会触发一次备份尝试。
- **首次运行权限:** 如果在启动时没有管理员权限,`vssadmin` 检测和进程终止将部分失败,并且注册表写入可能会被拒绝。
- **GUI 在同一个进程中运行代理程序。** 代理线程崩溃会导致 GUI 随之崩溃。如果您希望它们相互隔离,请单独运行 `agent.py`。
## 开发说明
对所有模块进行冒烟测试,确保它们能正常导入:
```
python -c "import agent, run_gui; print('OK')"
```
在整个代码树中快速进行语法检查:
```
python -m compileall .
```
## 免责声明
仅用于教育/防御目的。对于运行此软件造成的任何数据丢失、停机或其他后果,作者概不负责。在部署到您重视的任何环境之前,请先在虚拟机中进行测试。
标签:PySide6, Python, 反勒索软件, 数据备份, 文件监控, 无后门, 终端安全, 逆向工具