zavetsec/ZavetSec-NetworkInventory

GitHub: zavetsec/ZavetSec-NetworkInventory

一个面向 SOC/IR 团队的无依赖 PowerShell 网络扫描与资产清点工具,专为隔离环境设计,能快速发现主机、识别服务并输出带风险评分的报告。

Stars: 1 | Forks: 0

# ZavetSec-NetworkInventory ![PowerShell 5.1+](https://img.shields.io/badge/PowerShell-5.1%2B-blue?style=flat-square&logo=powershell) ![Platform](https://img.shields.io/badge/Platform-Windows-lightgrey?style=flat-square) ![Version](https://img.shields.io/badge/Version-1.0-gold?style=flat-square) ![License](https://img.shields.io/badge/License-MIT-green?style=flat-square) ![ZavetSec](https://img.shields.io/badge/ZavetSec-DFIR%20Toolkit-orange?style=flat-square) ![No Dependencies](https://img.shields.io/badge/Dependencies-None-success?style=flat-square) ## 概述 - 适用于 Windows 的无代理网络扫描器 — 可在 PowerShell 运行的任何环境中执行,无需安装 - 支持离线运行 — 非常适合隔离和受限环境 - 专为 Windows SOC / IR 团队打造 - 120+ 端口、多线程、Banner 抓取、操作系统指纹识别 - 安全检查:MS17-010、SSL/TLS、SMB 签名、未经身份验证的访问 - MAC 厂商查询:本地 OUI 数据库 + maclookup.app API 回退机制 - 暗色主题的 HTML 报告,支持一键 CSV 导出 + 兼容 SIEM 的 CSV - 旨在直接融入 SOC 分诊和事件响应工作流 ## 快速开始 ``` git clone https://github.com/zavetsec/ZavetSec-NetworkInventory cd ZavetSec-NetworkInventory # 以管理员身份运行(raw socket 操作所需) .\ZavetSec-NetworkInventory.ps1 -Subnets '192.168.1.0/24' ``` 主脚本:`ZavetSec-NetworkInventory.ps1` 报告会自动保存在脚本所在目录中。 ## 报告预览 image ## 工作原理 1. **主机发现** — ICMP ping 扫描 + 5 个关键端口的 TCP 回退 2. **端口扫描** — 通过 RunspacePool 并行扫描 120+ 端口 3. **指纹识别** — Banner 抓取、基于 TTL 的操作系统识别,以及可访问情况下的 WMI 查询 4. **安全检查** — SMB 签名、MS17-010、SSL/TLS、未授权访问、ICMP 5. **MAC 厂商查询** — ARP 缓存 → 本地 OUI 数据库 → maclookup.app API 6. **风险评分** — 按主机评估 CRITICAL / HIGH / MEDIUM / LOW 7. **报告生成** — HTML (交互式) + CSV (兼容 SIEM) ## 为什么不使用 Nmap? | | ZavetSec-NetworkInventory | Nmap | |---|---|---| | 需要安装 | ❌ 否 | ✅ 是 | | 原生支持 Windows / PowerShell | ✅ | ⚠️ 需要安装 | | 完全离线运行 | ✅ | ⚠️ | | 内置 HTML 报告 | ✅ | ❌ | | 从报告一键导出 CSV | ✅ | ❌ | | 兼容 SIEM 的 CSV | ✅ | ❌ 需要编写脚本 | | 风险评分 | ✅ 自动 | ❌ | | 未授权访问检查 | ✅ | ❌ | | MS17-010 检测 | ✅ | ⚠️ 需要 Nmap 脚本 (NSE scripts) | | MAC 厂商识别 | ✅ OUI 数据库 + API | ❌ | | 适配隔离环境 | ✅ | ⚠️ | ## 使用场景 - **网络可见性** — 发现跨子网的所有存活主机和开放服务 - **事件响应分诊** — 快速剖析受损网段,按风险级别确定响应优先级 - **内部安全审计** — 识别配置错误、高风险暴露和停止维护 (EOL) 的系统 - **影子 IT 检测** — 查找未经授权的服务 (Redis、MongoDB、VNC、Docker、Grafana) - **合规性检查** — 检查 SMB 签名强制、停止维护的操作系统、弱 TLS 以及未授权访问情况 ## 何时不适合使用此工具 - **大规模企业级扫描** (10,000+ 台主机) — 请使用 Nmap / Masscan - **深度漏洞评估** — 请使用 Nessus / OpenVAS - **重度 UDP 环境** — 暂不支持 UDP 扫描 - **需身份验证的扫描** — 无基于凭据的检查 (WMI 需要现有的管理员权限) ## 功能特性 ### 发现与扫描 - 当 ICMP 被阻止时,使用 ICMP ping 扫描 + 5 个关键端口的 TCP 回退 - 默认扫描 120+ 个端口,且完全可自定义 - 通过 RunspacePool 实现多线程(建议:50–100 个线程) ### 服务指纹识别 - 抓取 15 个关键端口的 Banner(SSH 版本、HTTP Server 标头、FTP Banner) - 操作系统检测:TTL 启发式算法 + WMI(如果凭据允许) - 通过 ARP 缓存获取 MAC 地址 + 双层厂商查询 - 从 FQDN 主机名中提取域名(`HOST.corp.local` → `corp.local`) ### MAC 厂商识别 双层查询以实现最大准确性: 1. **本地 OUI 数据库** — 针对超过 200 家知名厂商(Cisco、Dell、HP、VMware、Mikrotik、Ubiquiti 等)的即时离线查询 2. **maclookup.app API 回退** — 针对未知的 OUI,查询与 IEEE 同步的数据库以获取确切的注册公司名称。需要互联网连接;在隔离环境中会平稳回退为 `Unknown`。 ### 安全检查 - **SMB 签名** — Required / Enabled / Disabled - **MS17-010 (EternalBlue)** — 基于签名的检测,只读模式 - **SSL/TLS 审计** — 弱协议 (SSLv3/TLS1.0/1.1)、过期证书、自签名证书 - **未授权访问** — FTP、Redis、Memcached、MongoDB - **ICMP Timestamp** — 操作系统时间泄露 / 违反策略 - **停止维护 (EOL) 操作系统检测** — XP、Server 2003/2008/2012、Windows 7/8 ### 报告输出 - 带有搜索栏和快速过滤器的交互式暗色主题 HTML - **从 HTML 报告一键导出 CSV** — 导出当前可见的行(遵循活动的过滤器) - 扫描完成后在脚本目录自动保存 CSV 文件 - 按协议类别区分的颜色编码服务徽章 - 每台主机的自动风险评分:CRITICAL / HIGH / MEDIUM / LOW ## 用法 ``` # 交互式 — 如果未提供,则提示输入 subnet .\ZavetSec-NetworkInventory.ps1 # 单个 subnet .\ZavetSec-NetworkInventory.ps1 -Subnets '192.168.1.0/24' # 多个 subnet .\ZavetSec-NetworkInventory.ps1 -Subnets '10.0.0.0/24','10.0.1.0/24','172.16.0.0/24' # 快速模式 — 仅发现 + 端口扫描,跳过所有漏洞检查(速度提升约 2-3 倍) .\ZavetSec-NetworkInventory.ps1 -Subnets '10.0.0.0/24' -FastScan # 跳过 ping — 当 ICMP 被防火墙阻止时很有用 .\ZavetSec-NetworkInventory.ps1 -Subnets '10.0.0.0/24' -SkipPing # 自定义端口和线程数 .\ZavetSec-NetworkInventory.ps1 -Subnets '10.0.0.0/24' -Ports @(22,80,443,8080,8443) -Threads 100 # 包含 SMB 共享枚举的完整扫描 .\ZavetSec-NetworkInventory.ps1 -Subnets '10.0.0.0/24' -ScanShares -Threads 75 ``` ## 参数 | 参数 | 类型 | 默认值 | 描述 | |---|---|---|---| | `-Subnets` | `string[]` | *(交互式提示)* | 采用 CIDR 表示法的一个或多个子网 | | `-Ports` | `int[]` | 120+ 端口 | 要扫描的自定义端口列表 | | `-Threads` | `int` | `50` | 并行扫描线程数(建议:50–100) | | `-TimeoutMs` | `int` | `500` | TCP 连接超时时间(毫秒) | | `-OutputPath` | `string` | *脚本目录* | HTML 报告输出路径 | | `-CsvPath` | `string` | *脚本目录* | CSV 输出路径 | | `-SkipPing` | `switch` | `false` | 跳过 ICMP,直接探测所有主机的 TCP | | `-ScanShares` | `switch` | `false` | 枚举已发现主机上的 SMB 共享 | | `-FastScan` | `switch` | `false` | 跳过 SSL/TLS、MS17-010、未授权访问和 ICMP 检查 | ## 输出 报告会保存在脚本同级目录下: ``` NetworkInventory_20260330_134500.html NetworkInventory_20260330_134500.csv ``` ### CSV 导出 **两种获取 CSV 的方式:** 1. **自动** — 扫描完成后立即保存在脚本同级目录下 2. **从 HTML 报告** — 点击过滤器栏中的 `↓ Export CSV`。仅导出可见行 — 请先过滤以导出子集(例如仅导出 HIGH/CRITICAL 主机) ### CSV 示例 ``` Risk,IP,Hostname,OS,Domain,SMB_Sign,Open_Ports,Risk_Indicators,MAC,Vendor HIGH,10.0.0.10,SRV-DC01,Windows Server 2019,corp.local,Disabled,445/SMB|135/MS-RPC|139/NetBIOS,SMB signing disabled|Risky ports: 445,3C:C7:86:D6:CE:E8,DONGGUAN HUARONG MEDIUM,10.0.0.22,WORKSTATION-04,,corp.local,N/A,3389/RDP|80/HTTP,Risky ports: 3389,04:7C:16:7B:B8:A8,HP CRITICAL,10.0.0.55,,,,N/A,23/Telnet,Telnet open,, ``` ### HTML 报告部分 - **统计栏** — 存活主机数,Critical / High / EOL 计数,RDP / SMB / SSH / DB 暴露情况 - **操作系统分布** — 带有可视化比例条的细分图 - **高频开放端口** — 所有已发现主机中的频率排名 - **主机清单** — 可过滤的表格: - 风险徽章、IP、主机名、操作系统、域名、SMB 签名 - 带有按协议类别区分的颜色编码服务徽章的开放端口 - 风险指标 — 垂直列表,按严重程度进行颜色编码 - MAC 地址 + 厂商(OUI 数据库或 API 查询) ## 风险评分 ``` CRITICAL ← EOL OS detected ← Telnet open (port 23) ← MS17-010 VULNERABLE HIGH ← SMB signing Disabled ← Unauthenticated access confirmed (FTP / Redis / MongoDB / Memcached) ← 4+ risky ports open simultaneously MEDIUM ← 1–3 risky ports open ← Weak TLS protocol (SSLv3 / TLS 1.0 / TLS 1.1) ← Expired SSL certificate ← Self-signed SSL certificate ← ICMP Timestamp reply ← FTP service detected LOW ← No significant findings ``` **高风险端口**(触发风险指标): `23` `69` `111` `135` `137` `139` `161` `445` `512` `513` `514` `1080` `1099` `1433` `1434` `1521` `2049` `2375` `2376` `3128` `3306` `3389` `4444` `4445` `4848` `4899` `5432` `5900` `5901` `6379` `6666` `7001` `7002` `8009` `8161` `9200` `11211` `27017` `27018` ## 安全检查详情 ### MS17-010 (EternalBlue) 发送 SMB Negotiate → Session Setup → NT_TRANSACT,并检查 `STATUS_INSUFF_SERVER_RESOURCES (0xC0000205)` — 这是未修补系统的已知响应特征。不使用任何载荷或漏洞利用技术。结果属于启发式判断 — 请将其视为一种指示,而非确凿证据。 ### SSL/TLS 审计 检查端口 443、8443、636、993、995、465、990、9443。报告内容:弱协议版本、证书过期、自签名颁发者。 ### 未授权访问 | 服务 | 端口 | 方法 | |---|---|---| | FTP | 21 | 匿名登录 (`anonymous` / `scan@scan.local`) | | Redis | 6379 | `PING` → `+PONG` 无需认证 | | Memcached | 11211 | `stats` 响应无需认证 | | MongoDB | 27017 | `isMaster` 查询无需认证 | ### ICMP Timestamp 构造 ICMP Type 13 数据包,检查 Type 14 回复。表明存在操作系统时间泄露 — 出现时会被标记为 MEDIUM 风险。 ## 性能表现 | 子网 | 主机数 | 线程数 | 完整扫描 | `-FastScan` | |---|---|---|---|---| | /24 | 254 | 50 | ~2–3 分钟 | ~45–90 秒 | | /23 | 510 | 100 | ~3–5 分钟 | ~90–120 秒 | | /22 | 1022 | 150 | ~6–10 分钟 | ~3–4 分钟 | ## 局限性 - **不支持 UDP 扫描** — SNMP (161) 和其他 UDP 服务需要单独的工具 - **无完整操作系统指纹识别** — 仅限 TTL 启发式判断;准确的操作系统识别需要具有管理员凭据的 WMI - **仅限本地网段的 MAC 地址** — ARP 不会跨越路由器 - **MAC API 需要互联网** — 在隔离环境中无法使用 maclookup.app 回退机制 - **MS17-010 为启发式检测** — 基于 SMB 响应特征,非绝对保证的结果 - **WMI 需要权限** — 仅当扫描器对目标具有管理员权限时,才能获取主机名 / 操作系统 / 域名 - **原始套接字需要提权** — ICMP Timestamp 需要管理员权限 ## 环境要求 - 安装了 PowerShell 5.1 或更高版本的 Windows 操作系统 - **以管理员身份运行** — 原始套接字操作需要此权限 - 具有到目标子网的网络访问权限 - 无需外部模块或安装 - 互联网访问为可选 — 仅用于 MAC 厂商 API 查询 ## 更新日志 ### v1.0 — 初始版本 - 主机发现:ICMP + TCP 回退 - 120+ 端口扫描及带有颜色编码的服务 Banner 抓取 - SMB 签名检测 - MS17-010 EternalBlue 签名检查 - SSL/TLS 审计(协议、过期、自签名) - 未授权访问检查:FTP、Redis、MemcachedMongoDB - ICMP Timestamp 指纹识别 - 通过 ARP 获取 MAC 地址 + 双层厂商查询(本地 OUI 数据库 + maclookup.app API) - 从 FQDN 中提取域名 - 停止维护 (EOL) 操作系统检测 - 用于快速发现的 `-FastScan` 模式 - 交互式子网提示 - 带有搜索、过滤器和一键 CSV 导出的暗色主题 HTML 报告 - 扫描完成后自动导出 CSV - 自动风险评分:CRITICAL / HIGH / MEDIUM / LOW ## 开发路线图 - [ ] UDP 扫描 (SNMP、TFTP、NetBIOS-NS) - [ ] JSON 输出格式 - [ ] IPv6 支持 - [ ] 差异报告 — 与上次扫描进行比较,高亮显示新增/消失的主机 - [ ] 针对关键 (CRITICAL) 发现的可选告警集成 (Telegram / Slack) - [ ] 通过 VirusTotal / AbuseIPDB 进行 IP 信誉检查 ## 应用场景 - 内部 SOC 网络审计与资产发现 - 事件响应分诊 — 快速剖析受损网段 - 合规性验证 — SMB 签名、停止维护 (EOL) 的操作系统、弱 TLS 检查 - 影子 IT 排查 — 揭露企业网络上的未经授权服务 ## 法律声明 ## ⭐ 支持该项目 如果您在工作中发现此工具很有用,请考虑给它点个 Star — 这有助于其他人发现它。 ## ZavetSec 工具包的一部分 `ZavetSec-NetworkInventory` 是 [ZavetSec](https://github.com/zavetsec) 开源 DFIR 工具包的一部分 — 专为 Windows SOC 环境构建的独立、无依赖工具。 | 工具 | 描述 | |---|---| | [`ZavetSec-Vault`](https://github.com/zavetsec/ZavetSec-Vault) | 离线 AES-256-GCM 密码管理器 — 零依赖 | | [`Invoke-ZavetSecTriage`](https://github.com/zavetsec/Invoke-ZavetSecTriage) | Windows 实时取证 — 标记 MITRE ATT&CK | | [`ZavetSec-NetworkConnections`](https://github.com/zavetsec/ZavetSec-NetworkConnections) | 活动网络连接分析器 | | [`ZavetSec-BrowserHistory`](https://github.com/zavetsec/ZavetSec-BrowserHistory) | 用于 DFIR 的浏览器历史记录提取器 | | [`Invoke-MBHashCheck`](https://github.com/zavetsec/Invoke-MBHashCheck) | MalwareBazaar / ThreatFox 哈希检查器 | | [`ZavetSec-HardeningBaseline`](https://github.com/zavetsec/ZavetSec-HardeningBaseline) | Windows 强化基线 — 审计 / 应用 / 回滚 | *请负责任地扫描。了解你的网络。*
标签:AI合规, C2日志可视化, Facebook API, HTML报告, IPv6, IR, Libemu, MAC地址查询, OUI数据库, PowerShell, RunspacePool, SMB签名, SSL/TLS检查, WMI, 云存储安全, 多模态安全, 安全基线, 安全检查, 安全运营中心, 库, 应急响应, 开源, 开源软件, 指纹识别, 插件系统, 操作系统指纹, 教学环境, 数字取证与应急响应, 数据统计, 无依赖, 无线安全, 未授权访问, 检测规则, 横幅抓取, 气隙环境, 离线运行, 端口扫描, 网络安全, 网络扫描, 网络映射, 网络资产发现, 资产清点, 资产盘点, 隐私保护