kahz12/DroidNet-Sentinel

GitHub: kahz12/DroidNet-Sentinel

一款运行在 Android/Termux 和 Linux 上的网络安全监控工具,集主机发现、漏洞检测、风险分级、异常告警和主动响应于一体。

Stars: 1 | Forks: 0

# DroidNet Sentinel ![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg) ![Python](https://img.shields.io/badge/Python-3.10%2B-blue) ![Platform](https://img.shields.io/badge/Platform-Android%20%7C%20Linux-green) ![Tests](https://img.shields.io/badge/Tests-78%20passing-brightgreen) DroidNet Sentinel 发现存活主机、进行服务指纹识别、分类 风险、查找已知漏洞和 CVE,并跟踪网络在两次扫描之间的 变化——所有这些都可以通过一个单一的 CLI 和一个精美的 Web Command Center 来完成。 ## 目录 - [免责声明](#disclaimer) - [核心亮点](#highlights) - [快速开始](#quick-start) - [使用方法](#usage) - [模块](#modules) - [配置](#configuration) - [架构](#architecture) - [数据库](#database) - [风险等级](#risk-levels) - [Telegram 警报](#telegram-alerts) - [安全说明](#security-notes) - [许可证](#license) ## 免责声明 ## 核心亮点 | | | |---|---| | **发现** | 通过 ARP ping 扫描本地 /24 网段 (`nmap -sn`) | | **深度扫描** | Top 100 TCP 端口 + 版本检测 (`-F -sV -T4`) | | **风险引擎** | 单主机分类:MINIMAL / LOW / MEDIUM / CRITICAL | | **差异历史** | 跟踪两次扫描间新增的主机、消失的主机和端口变化 | | **漏洞查找** | 通过 `searchsploit` 进行本地 Exploit-DB 搜索 | | **CVE 监控** | 结合影响分析的 NVD 交叉参考 | | **主动响应** | 对不受信任的主机进行手动或自动 ARP 切断 | | **Deauth** | 通过 Scapy 发送 802.11 deauth 帧 (单播 / 广播) | | **Web 仪表盘** | 带身份验证的 Flask UI,包含扫描历史、差异对比和应用内帮助 | | **警报** | OS 通知和 Telegram 机器人 | | **跨平台** | 在 Android (Termux) 和 Linux 上使用相同的代码库 | ## 快速开始 ### Android — Termux ``` pkg install python nmap termux-api git clone https://github.com/kahz12/DroidNet-Sentinel.git cd DroidNet-Sentinel pip install -r requirements.txt python main.py ``` ### Linux — Debian / Ubuntu / Kali ``` sudo apt install python3 python3-pip nmap dsniff libnotify-bin wireless-tools git clone https://github.com/kahz12/DroidNet-Sentinel.git cd DroidNet-Sentinel pip install -r requirements.txt python main.py ``` **可选工具** — 仅安装您需要的模块: | 工具 | 模块 | 安装 | |---|---|---| | `searchsploit` (exploitdb) | Hunter | `apt install exploitdb`,或在 Termux 上克隆该仓库 | | `scapy` | Deauther | `pip install scapy` | | `iw` / `airmon-ng` | Deauther | `apt install iw aircrack-ng` | | `arpspoof` (dsniff) | Spoofer | `apt install dsniff` (仅限 Linux) | ## 使用方法 ### 交互式菜单 ``` python main.py ``` ``` [1] Sentinel — Quick scan Single-pass scan of the current network [2] Sentinel — Daemon mode Continuous background scanning + alerts [3] Hunter — Exploit lookup Match the latest report against Exploit-DB [4] CVE Watcher Cross-check the network against recent CVEs [5] Dashboard — Command Center Launch the web UI on http://127.0.0.1:5000 [6] Spoofer — Manual ARP cut Cut a single host off the LAN (root) [7] Deauther — 802.11 deauth Boot a client off the AP (root) [8] Saved reports Browse the JSON reports under reports/ [9] Help & user guide Built-in user guide [0] Exit ``` 选项 **[9]** 会打开一个 CLI 内置指南,涵盖功能、风险等级、 安全说明和 CLI 速查表。Web 仪表盘在 **/help** 下提供了相同 的指南。 ### 命令行 每个菜单选项都有一个非交互式的等效命令——适用于 cron 和脚本: ``` python main.py scan # one-shot scan python main.py daemon # continuous scan python main.py hunt # Hunter python main.py cve # CVE Watcher python main.py dashboard [--expose] # web UI (loopback by default) python main.py reports # list saved reports python main.py spoof VICTIM GATEWAY # ARP cut python main.py deauth MAC BSSID --iface wlan0mon python main.py db purge [--days N] # prune old scans ``` 在任何子命令后添加 `--help` 可查看其完整的标志集。 ## 模块 ### Sentinel — 核心扫描器 `droidnet/modules/sentinel.py` 1. 通过平台抽象层读取 SSID 和本地 IP。 2. 使用 ARP 检测对本地 /24 网段进行 ping 扫描。 3. 对每台存活主机进行深度扫描(Top 100 TCP 端口 + 版本检测)。 4. 对风险进行分类,并将结果持久化到 `sentinel.db` 以及 `reports/` 下带有时间戳的 JSON 文件中。 5. 可选择对不在 `trusted_ips` 中的主机发起 ARP 切断。 6. 发出 OS 通知和 Telegram 警报。 Daemon 模式每 5 分钟循环一次,并在 SSID 发生变化 或经过 6 小时后重新扫描。 ### Hunter — 漏洞查找 `droidnet/modules/hunter.py` 解析最近的一次扫描,从 Nmap 版本字符串中提取产品名称, 并通过 `searchsploit --json` 查询本地 Exploit-DB。 每个服务最多显示 5 个匹配项。 ### CVE Watcher `droidnet/modules/cve_watcher.py` 提取最近一次扫描的数据,解析服务 banners,查询 NIST NVD 以获取过去 120 天内发布的 CVE,对攻击向量进行分类 (RCE、DoS、提权、身份验证绕过、信息泄露), 并将去重后的警报存储在 `cve_alerts` 中。设置 `NVD_API_KEY` 可以 获得更高的速率限制。 ### Dashboard — Command Center `droidnet/web/dashboard.py` 经过身份验证的 Flask UI,具有会话登录、CSRF 保护以及 `/login` 上每分钟 5 次尝试的速率限制。凭证检查是 恒定时间的。自动生成的密码会被写入到 `~/.sentinel/credentials` 中(模式为 `0600`),而不是直接打印出来。 | 路由 | 描述 | |---|---| | `/login`, `/logout` | 会话身份验证 | | `/` | 仪表盘 — 扫描卡片、摘要磁贴、差异视图 | | `/help` | 内置用户指南 | | `/api/reports` | 每次扫描的 JSON 数据 | | `/api/scan//diff` | 单次扫描与上一次扫描的差异对比 | ### Spoofer — ARP MitM `droidnet/modules/spoofer.py` 通过 `arpspoof` 进行双向 ARP 毒化。两个 daemon 线程分别 向受害者和网关伪造回复;在按下 `Ctrl+C` 时会恢复 合法的 ARP 条目。**仅限 Linux**,需要 root 权限。 ### Deauther — 802.11 deauth `droidnet/modules/deauther.py` 通过 Scapy 制作并注入 802.11 deauth 帧(类型 `0xC0`,原因代码 `7`)。 针对单个 MAC 地址或进行广播。需要 root 权限和 支持监听模式的网卡。根据设计,对启用了 MFP (802.11w) 的 WPA3 AP 无效。 ## 配置 ### `config.json` 位于项目根目录的可选文件: ``` { "excluded_ips": ["192.168.1.100"], "trusted_ips": ["192.168.1.1", "192.168.1.100"], "db_retention_days": 90 } ``` | 字段 | 描述 | |---|---| | `excluded_ips` | Nmap 跳过的 IP(通常是您自己的设备) | | `trusted_ips` | 已知主机。其他任何主机都可能触发 ARP 切断 | | `db_retention_days` | 供 `db purge` 使用(默认为 `90`) | 该文件在加载时会进行 schema 验证:意外的类型会回退到 默认值而不会导致崩溃。如果缺少该文件,Sentinel 将使用 空列表运行。 ### 环境变量 | 变量 | 描述 | 默认值 | |---|---|---| | `TELEGRAM_TOKEN` | Telegram 机器人 token | 未设置 | | `TELEGRAM_CHAT_ID` | Telegram 数字聊天 ID | 未设置 | | `SENTINEL_USER` | Dashboard 用户名 | `admin` | | `SENTINEL_PASS` | Dashboard 密码 | 自动生成,持久化到 `~/.sentinel/credentials` (模式 0600) | | `SENTINEL_SECRET` | Flask 会话 secret | 随机生成 | | `NVD_API_KEY` | 用于提高 CVE Watcher 速率限制的 NVD API key | 未设置 | ## 架构 ``` main.py +-- droidnet/cli/ argparse + interactive Rich menu +-- droidnet/core/ database, env probe, notifier, risk engine +-- droidnet/modules/ sentinel, hunter, cve_watcher, spoofer, deauther +-- droidnet/platform/ cross-platform helpers (Android / Linux) +-- droidnet/web/ Flask dashboard + /help guide ``` 平台层会为当前 OS 自动选择合适的工具: | 功能 | Android (Termux) | Linux | |---|---|---| | Wi-Fi 信息 | `termux-wifi-connectioninfo` | `nmcli` | | 通知 | `termux-notification` | `notify-send` | | 网络接口 | `ip route` | `ip route` / `nmcli` | ## 数据库 扫描结果存放在 `sentinel.db` 中(SQLite,自动创建): ``` scans id, network, scan_time, total_devices, created_at hosts id, scan_id -> scans.id, ip, risk ports id, host_id -> hosts.id, port_entry cve_alerts id, cve_id, severity, score, service, ip, summary, impact, network, scan_id -> scans.id, created_at UNIQUE(cve_id, ip, service) ``` `get_all_scans_with_diffs()` 会根据同一网络的 上一次扫描,为每条记录丰富添加 `new_ips`、 `gone_ips` 和 `port_changes` 信息。`reports/` 下的 JSON 文件 会并行写入以保持可移植性。 ## 风险等级 根据主机暴露的一组开放 TCP 端口对其进行评分: | 等级 | 触发端口 | 颜色 | |---|---|---| | CRITICAL | FTP (21), Telnet (23), SMB (139, 445), RDP (3389) | 红色 | | MEDIUM | HTTP (80, 8080), DNS (53), SSDP (1900), NFS (2049)| 黄色 | | LOW | 任何其他开放端口 | 蓝色 | | MINIMAL | 无开放端口 | 绿色 | 仪表盘会内联显示相同的图例,并提供一个“这是什么 意思?”的链接指向 `/help`。 ## Telegram 警报 当设置了 `TELEGRAM_TOKEN` 和 `TELEGRAM_CHAT_ID` 时,Sentinel 会在 每次扫描周期后发送简短摘要。SSID 和服务 banners 在 内插之前会进行转义,以免在消息中注入 Markdown。如果 这些变量未设置,通知步骤会被静默跳过。 ## 安全说明 - Dashboard 默认绑定到 `127.0.0.1`。请仅在 TLS 代理(nginx / caddy)之后使用 `--expose`;否则凭证在 普通 HTTP 上将以明文传输。 - 登录限制为每个 IP 每分钟 5 次尝试,并受 每个会话的 CSRF token 保护。 - 自动生成的 Dashboard 密码会以 `0600` 模式持久化在 `~/.sentinel/credentials` 中,绝不打印到 stdout。 - 所有 `subprocess` 调用均使用列表参数(无 `shell=True`),且 TLS 验证从未被禁用。这些不变量由 `tests/test_security_invariants.py` 中 基于 AST 的回归测试强制执行。 - Spoofer 和 Deauther 属于攻击性工具。请仅针对 您拥有或被授权测试的目标运行它们。 ## 许可证 在 [MIT License](LICENSE) 下发布。由 Ale 精心构建。
标签:AMSI绕过, Android工具, ARP欺骗, C2日志可视化, CTI, Deauth攻击, Facebook API, Flask, Nmap, Python, Telegram告警, Termux, Web面板, Wi-Fi扫描, 威胁检测, 密码管理, 局域网安全, 开源, 指纹识别, 插件系统, 无后门, 未知设备检测, 系统分析, 网络分析, 网络安全, 虚拟驱动器, 逆向工具, 隐私保护