26zl/netsec-auditor
GitHub: 26zl/netsec-auditor
一款授权范围内、覆盖 IT/OT/IoT/无线全栈的只读网络安全审计 CLI 工具,支持漏洞优先级排序与多格式报告输出。
Stars: 2 | Forks: 0

**授权网络 · OT/ICS · Web · 无线安全审计工具**
[](https://github.com/26zl/netsec-auditor/actions/workflows/ci.yml)
[](LICENSE)
[](https://www.python.org/)
# NetSec Auditor
一个用于审计整个网络的 CLI 工具 —— 涵盖 IT、云、**OT/ICS**、**IoT** 和 **Wi-Fi/BLE**
— 可从笔记本电脑或 **Kali NetHunter** 手机上运行。它支持主机发现、端口与
服务扫描、结合 EPSS + CISA KEV 优先级的漏洞启发式分析、设备 Web 界面检查、只读的 OT/IoT 设备识别、被动的 Wi-Fi/BLE
侦察,以及 wardrive 数据导入 — 并能输出 JSON / HTML / PDF 格式的报告。
## 功能
- 范围控制的定向扫描(支持 IP、主机名、URL、CIDR 范围),包含允许/排除
规则,以及基于范围的端口白名单和扫描速率限制。
- 异步端口扫描(SYN / connect / UDP),支持服务和 OS 检测,并提供
针对大范围的快速 connect 扫描发现。
- 通过只读协议探测(Modbus、
Siemens S7、EtherNet/IP、BACnet、DNP3、OPC-UA、MQTT、CoAP、UPnP/SSDP、mDNS、
RTSP)进行 **OT/ICS + IoT 设备识别** — 请参阅下方的[安全性](#ot-safety)。
- **企业级服务检查:** SNMP 默认团体字符串(`public`/
`private`),SMB 协议版本 + **SMBv1/EternalBlue** 检测及签名状态,
以及 UDP 放大/反射器暴露检测(NTP monlist、memcached、chargen、SSDP)。
- **被动发现**(GRASSMARLIN 风格的嗅探),不发送任何数据包 —
非常适合脆弱的 OT 网络。
- 漏洞启发式分析以及内置、可定制的签名规则集
(`netsec_auditor/data/vuln-rules.yaml`)、NVD CVE 丰富化,以及**结合
EPSS + CISA KEV 的 CVE 优先级排序**。
- 通过 Shodan InternetDB 进行被动外部暴露查询(不向目标发送数据包)。
- **设备 Web 界面审计**
(路由器 / 摄像头 / NAS / 打印机 / PLC / HMI /
BMS 面板):安全标头、cookie 标志、TLS 证书分析
(过期 / 自签名 / 主机名不匹配)、**TLS 协议与弱密码套件
扫描**(已弃用的 TLS 1.0/1.1、RC4/3DES)、HTTP 方法、信息泄露。
严格只读 — 仅用于检查设备管理 UI 的安全态势,而非 Web 应用渗透测试。
- JSON / HTML / PDF 报告;`doctor` 环境检查;全局 `--ot-safe` 模式。
## OT 安全性
OT/ICS 设备非常脆弱 — 激进的扫描可能会扰乱 PLC 或生产过程。
该工具包**默认安全**:环境配置文件(`it` / `ot` / `iot`)
设置了保守的时序,并且当检测到 OT 服务时,互锁机制会自动降级为温和的
OT 配置文件(单线程、延迟、只读)。
所有 OT/IoT 探测均为只读识别;绝不发送写入/控制指令。
## 系统要求
- Python **3.11+**
- 必须安装 **`nmap`** 二进制文件并位于 `PATH` 中(端口扫描是通过
`python-nmap` 封装 nmap 实现的)。
- SYN 扫描(`-sS`,默认)、UDP 扫描、OS
指纹识别、ARP 发现、Wi-Fi 监视模式和被动嗅探需要 **Root/sudo** 权限。对于
无特权扫描,请使用 `--scan-type connect`。
- **核心安装没有系统库依赖。** 可选的额外组件:
`[wireless]`(BLE,在 Linux 上需要 BlueZ)和 `[pdf]`(PDF 报告,需要
Pango/HarfBuzz)。JSON 和 HTML 报告在没有它们的情况下也能正常运行。
- 运行 `netsec-auditor doctor` 以查看主机上可用的功能。
## 平台支持
| 平台 | 支持级别 | 说明 |
|---|---|---|
| **Linux / Kali NetHunter** | **完全支持** | scapy 原始套接字、Wi-Fi 监视模式、`nmcli`/`iw`、通过 BlueZ 使用 BLE。主要目标平台。 |
| **WSL2 (Windows)** | **近乎完全支持** | 真实的 Linux 内核:所有扫描 + pcap 导入均可工作。Wi-Fi 监视模式需要通过 `usbipd-win` 连接的 USB 适配器;BLE 通常不可用;被动 LAN 嗅探需要 Win11 的“镜像”网络(WSL2 默认使用 NAT)。 |
| **macOS** | 部分支持 | nmap/web/OT/IoT/BLE 可用;Wi-Fi 通过 `system_profiler` 只读;BLE 返回 UUID(而非 MAC)。 |
| **Windows (原生)** | 有限支持 | nmap/web/IP/OT/IoT 扫描可用;scapy 需要 Npcap;无监视模式 / `nmcli`。 |
IP 层扫描、漏洞情报、Web/TLS、OT/ICS + IoT 识别和
报告功能均可跨平台使用。完整的无线功能支持需要 Linux/NetHunter(或
带有 USB 适配器的 WSL2)。可选的 `masscan` 可加速特权
`discover --fast` 运行。精选的 nmap **NSE** 检查可通过
`vuln --nse` 使用;运行 `doctor` 以查看可用的运行时功能。
**在仅内置 Wi-Fi/Bluetooth 的普通笔记本电脑上(无外部硬件):**
除了监视模式下的 802.11 捕获外,其他所有功能均可运行。`wifi` 命令
通过 OS 扫描(`nmcli`/`iw`/`system_profiler`)枚举附近的 AP、加密方式、WPS 和邪恶双子 —
无需特权,且直接使用内置适配器。
`ble` 使用内置的 Bluetooth(在 macOS 上需授予 OS Bluetooth 权限)。仅在进行帧级别的被动捕获(客户端跟踪、`passive` 嗅探)时,
才需要外部监视模式适配器。
## 安装说明
该代码库目前为私有,版本 1.0.0 尚未发布至
PyPI 或 GHCR。因此,下方的源码安装是当前可用的安装
途径(需要代码库访问权限)。
```
# 从源码
pip install .
pip install -e ".[dev]" # for development
pipx install . # isolated CLI install
pipx install ".[all]" # BLE + PDF extras
# 本地 Docker 镜像(内置 nmap)
docker build -t netsec-auditor:local .
docker run --rm --net=host netsec-auditor:local scan 10.0.0.5 --scan-type connect
```
在发布工作流发布版本 1.0.0 之后,即可使用包安装器
执行 `pipx install netsec-auditor`(或 `netsec-auditor[all]`)。
`scripts/install.sh` 中的一键安装脚本同样需要该 PyPI 版本。
```
# Release 安装(在发布版本 1.0.0 之前不可用)
pipx install netsec-auditor
```
## 使用说明
```
# 端口扫描(无特权 TCP connect scan)
netsec-auditor scan 10.0.0.5 --ports common --scan-type connect
# 网络范围内的主机发现
netsec-auditor discover 192.168.1.0/24 --method both
# 漏洞评估,可选择使用 NVD CVE 数据进行丰富
# 首先在环境中导出 NVD_API_KEY;避免将密钥放置在 shell 历史记录中。
netsec-auditor vuln 10.0.0.5 --cve-check
# 设备 web-interface 审计(路由器 / 摄像头 / NAS / PLC / HMI 管理面板)
netsec-auditor web https://192.168.1.1 --deep
# 完整审计:网络 + 漏洞 + web
netsec-auditor full 10.0.0.0/24 --output ./reports
# 针对大范围的快速 connect-sweep 发现
netsec-auditor discover 10.0.0.0/16 --fast
# 识别 OT/ICS + IoT 设备(只读,自动选择 OT-safe profile)
netsec-auditor identify 10.0.0.5 --protocols ot
# 优先处理 CVE(EPSS + CISA KEV),或查询 IP 的被动暴露情况
netsec-auditor enrich CVE-2021-44228 CVE-2019-0708
netsec-auditor enrich 203.0.113.10
# 被动盘点 — 嗅探流量,不发送任何内容(需要 root)
sudo netsec-auditor passive --seconds 30 --iface eth0
# Wi-Fi 侦察 — AP、加密、WPS、evil-twin 检测(只读)
sudo netsec-auditor wifi --iface wlan1mon --duration 20
# BLE 侦察 — 广播 IoT 设备(在 Linux/BlueZ 上无需 root)
netsec-auditor ble --duration 10
# 从您的 ESP32/Flipper/Kismet 设备导入 wardriving 数据
netsec-auditor wardrive capture.wigle.csv --output ./reports
# 巡视审计 — 发现 + 扫描 + OT/IoT/SNMP + Wi-Fi/BLE → 一份报告
sudo netsec-auditor walk 192.168.1.0/24 --wifi --ble --output ./reports
# 在任何地方强制使用温和的 OT-safe profile(脆弱的 ICS 网络)
netsec-auditor --ot-safe walk 10.10.0.0/24
# 检查运行时环境(nmap、root、scapy、bleak、Wi-Fi 工具)
netsec-auditor doctor
# 查询 NVD 以获取 CVE
netsec-auditor cve CVE-2021-44228
```
全局标志:使用 `-v/--verbose` 进行调试日志记录,使用 `--json-logs` 输出结构化
JSON 日志。
## NetHunter / 巡检使用
专为在 **Kali NetHunter** 手机上运行而构建,方便网络/安全工程师在巡视
站点时随时进行审计:
- **尽可能在无特权模式下运行** — `ble`、`wardrive` 导入、`discover --fast`
和 connect 扫描不需要 root。监视模式 Wi-Fi(`wifi`、`passive`)和 SYN/OS
扫描需要 root,且对于 802.11,需要处于监视模式的外部适配器。
- **感知 OT 的安全互锁** — 包含已注册工业端口
和协议识别的扫描将使用温和的时序、只读探测和一个 worker。在扫描脆弱的 PLC 之前,请确保针对目标环境验证配置文件。
- **硬件设备集成** — 导入来自配套
[gadgets-tools](https://github.com/26zl/gadgets-tools) 项目中 ESP32/Flipper 工具的 **WiGLE CSV (1.4/1.6)、GPX 和 Kismet** 导出文件。
- **仅限只读 / 被动模式** — 仅接收和编目;从不发送
deauth/攻击帧或破解握手。
### 在 Kali NetHunter 上安装(例如 Galaxy S10)
Kali 阻止直接使用 `pip` (PEP 668),因此请在 chroot 内使用 **pipx**:
```
apt install -y nmap pipx bluez # add: fonts-dejavu libpango-1.0-0 libharfbuzz0b (only if you want PDF)
pipx install ".[wireless]" # from the source checkout; use [all] for PDF
netsec-auditor doctor # confirm what's available
```
- **Wi-Fi 监视模式:** **S10 支持通过
Nexmon 的内部监视模式 + 注入**(`nexutil`/`airmon-ng`),因此并非严格要求使用外部适配器
— 尽管 AR9271/RTL8812AU 适配器更为稳定。需在 chroot 内以 root 身份运行。
- **BLE:** 需要运行 `bluetoothd`;在用户命名空间 chroot 中,请导出
`BLEAK_DBUS_AUTH_UID=
`,以便 bleak 能够访问宿主机 D-Bus。
- 在部署之前,请验证特定 aarch64/NetHunter
镜像上的 wheel 和原生库的可用性。
## 范围文件
范围文件定义了授权目标和排除项。有关完整的
schema,请参阅 [`config/example-scope.yaml`](config/example-scope.yaml)。
```
netsec-auditor scope create --file my-scope.yaml # interactive
netsec-auditor scope validate --file my-scope.yaml --target 10.0.0.5
netsec-auditor scope show --file my-scope.yaml
```
通过 `--scope my-scope.yaml` 将范围传递给任何扫描。如果未指定,将使用 *ad-hoc* 范围,该范围仅授权命令行上给出的确切目标。
## 开发说明
```
pip install -e ".[dev]"
pytest # run the test suite
ruff check . # lint
mypy . # type-check
```
## 许可证
MIT标签:Blue Team, OT/ICS安全, Python CLI, 密码管理, 插件系统, 物联网安全, 请求拦截, 逆向工具, 防御绕过