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, 反勒索软件, 数据备份, 文件监控, 无后门, 终端安全, 逆向工具