MahdiHedhli/openclaw_scanner

GitHub: MahdiHedhli/openclaw_scanner

一款基于证据优先模式的开源 OpenClaw 网关指纹识别与漏洞分诊扫描器。

Stars: 3 | Forks: 1

OpenClaw Scanner logo

OpenClaw Scanner

重证据。非假设。
用于指纹识别暴露的 OpenClaw 网关的 OpenClaw 扫描器,包括 OpenClaw 18789 端口扫描器工作流,以及以证据优先的 OpenClaw 漏洞分诊。

Python 3.9+ Stdlib only License MIT Exact rules Latest OpenClaw Evidence first

授权的 Web 检查器: OpenClaw 暴露检查器

## 为什么开发此工具 `openclaw_scanner` 是一个开源的 OpenClaw 扫描器,旨在帮助防御者 在不夸大的情况下对暴露的 OpenClaw 网关进行指纹识别。它支持 OpenClaw 18789 端口扫描器工作流,从 Shodan/Censys/ FOFA/CT 导出中进行被动发现,低影响力的主动验证,以及当网络中可见 具备关联级别的精确版本证据时,进行保守的 OpenClaw 漏洞分诊。 该扫描器刻意保持低影响力。它不会利用主机、尝试 绕过身份验证、暴力破解凭据或运行侵入性 payload。 仅将其用于您拥有或获得明确授权评估的系统。本项目 不支持对未经授权测试的面向互联网的 IP 进行主动 扫描。 ## 概览 | 功能 | 您将获得 | | --- | --- | | 🔎 被动发现 | Shodan 查询 ID、Shodan/Censys/FOFA/CT 导入、mDNS 解析、hash 枢纽、置信度权重 | | 🌐 主动网关探测 | 低影响力的默认 GET/WebSocket 探测;在获得强家族证据后进行条件性深度验证 | | 🧬 指纹证据 | 状态分布、标题、JS 资产、favicon hash、JSON 键形状、body 标记、版本提示 | | 🧪 精确版本规则 | 通过实验室验证并推广的 17 个 OpenClaw 版本(截至 `2026.5.28`) | | 📦 最新 OpenClaw 包 | 已发布 `2026.6.1`;精确规则覆盖范围在推广前仍需进行实验室捕获 | | 🛡️ 防御上下文 | 反向代理检测、蜜罐启发式分析、漏洞关联 | | 🐍 可移植运行时 | 标准 `python3`;无第三方 Python 依赖 | ## OpenClaw Scanner 搜索短语 本项目特意涵盖了常见的防御性搜索意图: - OpenClaw scanner - 指纹识别暴露的 OpenClaw 网关 - OpenClaw 18789 端口扫描器 - OpenClaw 漏洞分诊 - OpenClaw 网关指纹识别 - Clawdbot 和 Moltbot 网关暴露检查 ## 快速导航 - [快速开始](#quick-start) - [实地校准快照](#field-calibration-snapshot) - [公开暴露检查器](#public-exposure-checker) - [已知版本语料库](#known-version-corpus) - [输入格式](#input-formats) - [黑盒校准工作流](#black-box-calibration-workflow) - [自定义指纹规则](#custom-fingerprint-rules) - [测试](#tests) ## 工作原理 对于每个目标,扫描器会: 1. 仅使用默认 GET 请求以及 WebSocket upgrade-header 握手来探测常见的 OpenClaw 网关 endpoint、兼容 OpenAI 的模型路径、 WebSocket 升级、静态资产以及安全的错误行为路径 2. 记录 header、header 顺序、状态码、剔除的错误文本、堆栈 跟踪提示、标题、favicon hash、JS 资产路径、JSON 键形状、 产品标记、响应时间、版本提示,以及 `status_distribution_signature` 3. 导入被动的 Shodan、Censys、FOFA 和 CT 元数据,例如标题、TLS 名称、JARM 值、favicon hash、Shodan 报告的 CVE,以及在可用时导入结构化的 mDNS 网关元数据 4. 从实时响应和被动的 Shodan WAF 提示中检测潜在的反向代理或 WAF 边缘 5. 应用保守的家族指纹规则和精确版本规则 6. 将推断出的版本与内置的 OpenClaw 漏洞数据进行关联 ## 证据模型 OpenClaw Scanner 将发现、识别、版本归因和 漏洞关联区分开来: | 阶段 | 含义 | 可驱动的操作 | | --- | --- | --- | | 候选 | 被动来源、查询、CT 名称、标题、favicon hash、TLS 名称、JARM 值或 mDNS 记录表明某台主机可能值得检查。 | 仅用于分诊和目标选择。 | | 主动服务信号 | 实时的低影响力探测返回状态、header、标题、JSON 键、body 标记、静态资产或 WebSocket 握手行为。 | 更强力的分诊和响应聚类。 | | 家族指纹 | 多个远程可见信号与内置的 OpenClaw 家族行为规则匹配。 | 家族级别的识别和可选的条件性深度验证。 | | 精确版本证据 | 实验室推广的精确规则或显式的关联级元数据(如 mDNS `cliPath` 包版本)匹配。 | 精确版本归因。 | | 漏洞关联 | 关联级别的版本匹配与内置的漏洞范围相交。 | 防御性漏洞分诊,而非可利用性证明。 | 被动发现元数据并不等于版本证据。被动数据集 对于寻找候选目标很有用,但目前的现场数据表明,它们自身无法提供 可靠的精确版本指纹识别。CDP/Chromium 信号是 浏览器代理证据;仅凭 CDP 并不能独立证明 OpenClaw 的存在,且永远不会 驱动漏洞关联。 ## 快速开始 扫描单个目标: ``` python3 -m openclaw_scanner --target https://127.0.0.1:18789 --format pretty ``` 扫描目标列表并输出 JSON: ``` python3 -m openclaw_scanner \ --targets-file targets.txt \ --format json \ --output results.json ``` 被动分析 Shodan 导出数据: ``` python3 -m openclaw_scanner \ --shodan-file shodan-results.json \ --format csv \ --output triage.csv ``` 主动重新探测源自 Shodan 的候选目标: ``` python3 -m openclaw_scanner \ --shodan-file shodan-results.json \ --rescan-shodan \ --format json \ --output active-results.json ``` 运行实时 Shodan 查询: ``` SHODAN_API_KEY=... python3 -m openclaw_scanner \ --shodan-query 'product:"mDNS" "clawdbot-gw"' \ --shodan-pages 2 \ --format pretty ``` 列出内置发现查询并按 ID 运行其中一个: ``` python3 -m openclaw_scanner --list-discovery-queries SHODAN_API_KEY=... python3 -m openclaw_scanner \ --discovery-query shodan-title-openclaw-control \ --shodan-pages 1 \ --format csv ``` 导入其他被动数据集: ``` python3 -m openclaw_scanner \ --censys-file censys-export.json \ --fofa-file fofa-export.csv \ --ct-file ct-export.jsonl \ --format json ``` 探测备用端口上的潜在网关并使用条件性深度验证: ``` python3 -m openclaw_scanner \ --shodan-file shodan-results.json \ --rescan-shodan \ --probe-ports \ --deep-validation \ --format json ``` 从匿名的主动 CSV 中导出下一个公开安全的校准目标: ``` python3 -m openclaw_scanner \ --calibration-candidates-from artifacts/shodan/2026-06-03/public/openclaw-active-default-100-anonymized.csv \ --format csv \ --output next-calibration-candidates.csv ``` 使用内置的演示数据: ``` python3 -m openclaw_scanner \ --shodan-file openclaw_scanner/data/demo_18789-03-17-2026.json \ --rescan-shodan \ --format pretty ``` ## 实地校准快照 OpenClaw Scanner 目前进行了两次公开安全的校准运行,展示了 将发现与识别分开的价值。 ### 2026-06-02 mDNS 导向运行 首次面向公众的校准运行使用了来自 500 行被动 Shodan 数据和 100 个主动目标入围名单的匿名数据: | 指标 | 结果 | | --- | ---: | | 被动 Shodan 候选 | 500 | | 主动入围名单 | 100 | | 响应的主动主机 | 14 | | 主动 OpenClaw 家族匹配 | 13 | | 精确版本匹配 | 0 | | 候选到响应率 | 14% | | 候选到家族匹配率 | 13% | | 被动到家族匹配率 | 2.6% | 主动样本还产生了聚类后的 `status_distribution_signature` 值,例如 `200:13;401:1;404:23` 和 `200:13;401:3;404:21`。 ### 2026-06-03 标题查询跟进 跟进运行使用了扩展的发现查询支持来针对 `http.title:"OpenClaw Control"`,规范化了 500 个被动候选目标,并主动 验证了一个 100 台主机的入围名单两次:一次是默认的低影响力模式, 另一次启用了 `--deep-validation` 但仍禁用了 POST 探测。 | 指标 | 被动候选 | 主动默认 | 主动深度(无 POST) | | --- | ---: | ---: | ---: | | 处理结果 | 500 | 100 | 100 | | 响应的主动主机 | N/A | 100 | 100 | | OpenClaw 家族匹配 | 0 | 70 | 70 | | 精确版本匹配 | 0 | 25 | 25 | | 漏洞关联 | 0 | 10 | 10 | 标题查询运行的关键比率: - 主动候选到家族匹配率:70 / 100,即 70%。 - 主动候选到精确版本率:25 / 100,即 25%。 - 被动到家族匹配率:70 / 500,即 14%。 更深入的 CSV 审查得出了以下额外发现: - 被动门控在现场数据中依然有效:65 个被动候选目标带有 `product_confidence=1.0` 且无关联的类版本证据,但仍然 产生了 0 个精确版本和 0 个漏洞关联。在旧的 被动 banner 逻辑下,这些行的数据类型原本可能成为 纯被动版本或漏洞的误报。 - 25 台具有精确版本的主动主机分布在 `2023.11.3` (8)、 `2026.5.28` (7)、`2026.5.7` (4),以及 `2026.1.29-beta.1`、 `2026.2.2-1`、`2026.5.3-1`、`2026.5.18`、 `2026.5.22` 和 `2026.5.27` 各一台主机。 - 漏洞关联保持在证据门控内:8 台 `2023.11.3` 主机 各自关联了 32 条记录,一台 `2026.1.29-beta.1` 主机关联了 30 条, 一台 `2026.2.2-1` 主机关联了 29 条。没有纯被动行产生 漏洞关联。 - 版本后缀保留已在实地得到确认,包括 `2026.2.2-1`、 `2026.1.29-beta.1` 和 `2026.5.3-1`。 - 30 行无家族匹配的主动数据分为误报、 错误频繁和有响应/无家族类别。有响应/无家族行 聚集在 `200:35;400:2;404:1` 或 `401` 身份验证质询变体周围,它们 是下一个规则挖掘目标。 - 被动候选集包括明显的非 OpenClaw 产品,例如 Ivanti EPMM、Sophos SSL VPN、D-Link 网络摄像头、Ncat proxy、IIS 和 Apache。 扫描器现在会注释或降级这些被动候选目标,而不是 将发现置信度视为识别结果。 在此样本中,深度验证并未改变家族、精确版本或漏洞数量, 但它增加了更丰富的响应形状证据。最常见的 默认状态特征码是 `200:19;404:19`、`200:17;404:19` 和 `101:2;200:17;404:19`;最常见的深度验证特征码是 `200:34;404:23;405:1`、`200:32;404:23;405:1` 和 `101:2;200:32;404:23;405:1`。 这些特征码被作为关联信号进行跟踪,用于未来的版本、 部署模式和反向代理分析,但它们自身不被视为 精确版本证明。 公开安全的匿名产物位于: - `artifacts/shodan/2026-06-02/public/` - `artifacts/shodan/2026-06-03/public/` ## 公开暴露检查器 实时授权自我评估页面: 代码仓库包含一个可部署的、位于 `site/` 下的 GitHub Pages 检查器前端, 以及位于 `cloudflare/worker/` 下的 Cloudflare Worker API。该页面是刻意 静态的,本身不执行扫描;它调用单独的、受速率限制的 Worker 后端,进行一次授权的、低影响力的检查。 检查器流程受到刻意限制: - 用户必须确认:“我确认我拥有此系统或已获得明确 授权对其进行评估。” - 用户必须在请求被接受之前完成 CAPTCHA - 后端会验证目标并阻止 localhost、私有、链路本地、 多播、元数据、保留和内部主机名目标 - 检查器路径仅使用低影响力的 GET 检查 - 不允许进行 POST 探测、身份验证尝试、debugger socket 连接、VNC 交互或 payload 执行 - 除非存在关联级别的精确版本 证据,否则漏洞输出将被抑制 - 部署详情位于 `docs/exposure-checker.md` ## 文档 - 官方 GitHub 仓库: - [路线图](docs/roadmap.md) - [已知版本语料库工作流](docs/corpus-workflow.md) - [公告草案](docs/openclaw-scanner-announcement.md) - [2026 年 6 月校准博客更新](docs/openclaw-scanner-blog-update-2026-06-03.md) - [静态暴露检查器](docs/checker/index.html) - [暴露检查器 API 契约](docs/checker/api-contract.json) - [暴露检查器部署指南](docs/exposure-checker.md) ## 已知版本语料库 内置的精确版本规则目前包括 17 个实验室推广的 OpenClaw 版本:
显示已覆盖的版本 - `2026.1.29-beta.1` - `2026.2.2-1` - `2026.2.6` - `2026.2.13` - `2026.2.21` - `2026.5.3-1` - `2026.5.7` - `2026.5.18` - `2026.5.19-beta.1` - `2026.5.20` - `2026.5.22` - `2026.5.24-beta.1` - `2026.5.24-beta.2` - `2026.5.25-beta.1` - `2026.5.26` - `2026.5.27` - `2026.5.28`
这些规则基于短暂的 VLAN 30 捕获,应被视为 高价值的分诊证据。它们不是利用证明,并且异常的部署 模式、代理、自定义构建或隐藏的静态资产仍然可能将扫描结果 降级为家族级别的置信度。截至 2026-06-02 的版本监视运行,稳定 包的差距已通过 `2026.5.28` 弥补。截至 2026-06-04 的 npm 注册表 检查,最新发布的 OpenClaw 包是 `2026.6.1`;该版本尚未 在此扫描器中进行实验室推广,在添加精确版本规则之前,应经过 受限的版本监视捕获工作流。 ## 输入格式 ### 直接目标 传入一个或多个 `--target` 值或使用 `--targets-file`。 示例: - `https://host.example:18789` - `http://10.0.0.5:8080` - `gateway.example.com:18789` - `192.0.2.10` 当目标不包含 scheme 时,扫描器默认 先尝试 `https://`,如果失败则回退到 `http://`。 ### Shodan 导出 扫描器接受以下常见形式: - 包含 `matches` 数组的 JSON 对象 - 由结果对象组成的顶层 JSON 数组 - 每行都是一个 Shodan 匹配对象的换行符分隔的 JSON 有用的字段包括 `ip_str`、`port`、`hostnames` 和 `ssl`。 如果 Shodan 记录包含 favicon hash,扫描器会将该被动 信号导入到离线观察模型中。 扫描器还会在存在这些字段时导入 Shodan 产品/版本、OS、CPE、hash 枢纽、 `ssl.jarm`、Shodan 报告的 CVE ID 以及结构化的 mDNS 网关元数据。 默认情况下,Shodan 导出会根据 JSON 本身进行离线分析。如果 您想主动探测每个导出的主机,请使用 `--rescan-shodan`。 ### Censys、FOFA 和 CT 导出 扫描器将额外的被动数据集规范化为 Shodan 导入使用的相同内部目标 记录: - `--censys-file` 接受包含主机/服务行的 JSON、JSONL 或 CSV 导出。 - `--fofa-file` 接受 JSON、JSONL、CSV 以及 FOFA `fields` + `results` JSON。 - `--ct-file` 接受被动证书透明度导出,且仅导入 包含 `openclaw`、`clawbot`、`clawdbot` 或 `moltbot` 的 名称。 规范化导入保留了安全的被动信号,例如 HTTP 标题、HTTP 状态、server header、favicon hash、TLS/JARM 元数据、证书 CN/SAN 名称以及发现置信度/来源标签。包含凭据的 header,如 `Authorization`、`Cookie`、`Set-Cookie` 和 API 密钥 header,在进入扫描器产物之前 会从规范化的外部记录中被剔除。 被动 TLS、提供商和 CT 元数据可以提高发现置信度,但它们 不能独立产生精确版本的断言。 ### 实时 Shodan 搜索 使用一个或多个 `--shodan-query` 值直接从 Shodan REST API 获取 banner。扫描器按以下顺序查找 API 密钥: - `--shodan-key` - 当前环境中的 `SHODAN_API_KEY` - `.env` 中的 `SHODAN_API_KEY=...` - 仓库根目录或 `openclaw_scanner/.shodanapi` 中的 `.shodanapi` 原始 token 以及 `key=...` / `SHODAN_API_KEY=...` 格式均受支持。 有用的标志: - `--list-discovery-queries` 列出可重用的 Shodan 发现查询 ID - `--discovery-query shodan-title-openclaw-control` 运行内置的查询 ID - `--shodan-pages 3` 翻页浏览多个结果页面 - `--shodan-fields ip_str,port,http.title,data` 请求更窄的字段集 - `--shodan-minify` 使用 Shodan 更小的响应模式 - `--rescan-shodan` 在摄取后主动探测返回的主机 实时查询路径会消耗 Shodan 查询额度,尤其是当您使用 搜索过滤器或获取第一页之后的结果时。 ### 主动验证控制 `--probe-ports` 是可选启用的。如果在提供时不带值,发现衍生出的 主机除了导入的端口外,还会尝试 `18789,8080,8443,9000,3000,5000`。您可以提供一个自定义的逗号分隔列表,例如 `--probe-ports 18789,8443`。 `--deep-validation` 仅在基础探测已经 产生强有力的 OpenClaw 家族指纹之后,才会增加第二阶段。该阶段收集额外的 存在性、状态、header 和响应形状证据,用于 Socket.IO 轮询、 noVNC、websockify、兼容 OpenAI 的 GET 路由、 浏览器工具路由、画布相关路由、CORS 预检行为以及 WebSocket 升级行为。 它不会进行身份验证、连接到 debugger socket、附加到 VNC、发送工具 执行 payload 或建立浏览器 debugger 会话。 POST 探测默认被禁用。如果您明确希望对受身份验证限制的 API 路由进行 空 body 或 `{}` 感知方法的 POST 检查,请添加 `--enable-post-probes` 和 `--deep-validation`。 ## 黑盒校准工作流 扫描器始终专注于外部发现。黑盒工作流仅用于 从受控测试节点生成更好的远程指纹规则。 预期的循环流程是: 1. 搭建一个或多个已知版本的测试网关。 2. 使用 `openclaw_scanner` 扫描它们,并使用 `--capture-output` 加上 `--capture-version` 写入捕获包。 3. 对其他版本重复此操作。 4. 对保存的包运行 `--suggest-rules-from`。 5. 在将它们推广到 [`openclaw_scanner/data/openclaw_rules.json`](openclaw_scanner/data/openclaw_rules.json) 之前,检查生成的候选 `version_rules`。 重要的范围护栏: - 捕获包仅存储远程可见的信号,例如路径/状态对、 方法/状态对、标题、内容类型、header 顺序、剔除的错误 文本、favicon hash、JSON 键、JS 资产名称和 body hash。 - 版本标签仅是用于校准的带外元数据。 - 扫描器不依赖于主机端文件、进程或本地配置来 对远程目标进行指纹识别。 - 已知版本校准节点的 Oracle Cloud 免费套餐部署脚本位于 [`deploy/oracle_free_tier/README.md`](deploy/oracle_free_tier/README.md)。 ## 自定义指纹规则 内置的漏洞情报位于: - [`openclaw_scanner/data/openclaw_rules.json`](openclaw_scanner/data/openclaw_rules.json) 规则文件支持两层: - 用于家族或行为分类的 `fingerprint_rules` - 用于精确或近似版本推断的 `version_rules` 家族规则示例: ``` { "id": "openclaw-ui-only-404-api", "family": "openclaw_ui_only_404_api", "label": "OpenClaw UI-only gateway with JSON /health and 404 API paths", "confidence": 0.93, "notes": "Observed on live port 18789 responders.", "all": [ { "type": "title_contains", "path": "/", "value": "OpenClaw Control" }, { "type": "path_status", "path": "/api/version", "statuses": [404] }, { "type": "json_key", "path": "/health", "value": "ok" } ] } ``` 版本规则示例: ``` { "id": "lab-ui-family-2026-2", "version": "2026.2.x", "confidence": 0.78, "notes": "Example placeholder rule based on a known dashboard bundle.", "all": [ { "type": "script_contains", "value": "dashboard.7f2f57d4.js" }, { "type": "path_status", "path": "/api/version", "statuses": [404] } ] } ``` 支持的条件类型: - `path_status` - `path_status_not` - `method_status` - `status_distribution_signature` - `title_contains` - `marker_present` - `script_contains` - `header_contains` - `json_key` - `body_hash` - `body_contains` - `error_pattern` - `header_order` - `has_stack_trace` - `favicon_hash` - `ws_upgrade_supported` - `ws_upgrade_status` - `ws_subprotocol_contains` - `ws_extension_contains` - `version_hint_prefix` - `cdp_present` - `cdp_debugger_url_present` - `cdp_browser_family` - `cdp_engine` 结果中呈现的有用的被动元数据字段包括: - `mdns_version` - `mdns_service_types` - `mdns_instance_names` - `mdns_txt_records` - `mdns_advertised_ports` - `mdns_product_markers` - `proxy_detection` - `honeypot_assessment` - `status_distribution_signature` 内置的家族规则目前可识别: - `claw_gateway_tools_invoke_auth_json` - `chromium_devtools_exposed` - `openclaw_cdp_devtools_exposed` - `socketio_polling_handshake` - `novnc_presence` - `websockify_presence` - `openclaw_openai_chat_surface_enabled` - `openclaw_mdns_gateway_advertisement` - `clawdbot_mdns_gateway_advertisement` - `openclaw_ui_only_404_api` - `openclaw_spa_fallback_all_200` - `clawdbot_spa_fallback_all_200` - `moltbot_spa_fallback_all_200` | 家族 | UI 标题 | `/api` | `/api/version` | `/health` | 解释 | | --- | --- | --- | --- | --- | --- | | `openclaw_ui_only_404_api` | `OpenClaw Control` | `404 text/plain` | `404 text/plain` | `200 application/json`,包含 `ok,status` | UI 存在,但 API 路径返回稳定的 `Not Found` body,且 `/health` 是真正的 JSON 存活探测 endpoint。 | | `openclaw_spa_fallback_all_200` | `OpenClaw Control` | `200 text/html` | `200 text/html` | `200 text/html` | 看起来像 API 的路由回退到了相同的 SPA shell,因此这里的 `200` 并不意味着是真正的版本 endpoint。 | | `clawdbot_spa_fallback_all_200` | `Clawdbot Control` | `200 text/html` | `200 text/html` | `200 text/html` | 与 OpenClaw 的 SPA 回退模式相同,但品牌为 Clawdbot。 | | `moltbot_spa_fallback_all_200` | `Moltbot Control` | `200 text/html` | `200 text/html` | `200 text/html` | 与 OpenClaw 的 SPA 回退模式相同,但品牌为 Moltbot。 | 被动的 Shodan mDNS 导出也可以匹配网关播发家族: | 家族 | 服务 | 必需的 TXT 标记 | 解释 | | --- | --- | --- | --- | | `openclaw_mdns_gateway_advertisement` | `_openclaw-gw._tcp.local` | `role=gateway`, `gatewayPort=18789` | 被动确认 OpenClaw 家族网关播发了默认网关端口。 | | `clawdbot_mdns_gateway_advertisement` | `_clawdbot-gw._tcp.local` | `role=gateway`, `gatewayPort=18789` | 被动确认 Clawdbot 家族网关播发了默认网关端口。 | 这些家族和存在性匹配改善了聚类和分诊,但除非也 推断出关联级别的版本,否则它们不会 产生漏洞命中。与产品无关的 CDP、Socket.IO、noVNC 和 websockify 信号并 不能独立证明 OpenClaw 的存在。 ## 变更日志衍生的网关信号 当前官方的 OpenClaw 文档和发行说明使得网关 HTTP 接口对于 外部指纹识别来说,比 2026 年 3 月初时更有用。 | 信号 | 探测 | 解释 | | --- | --- | --- | | 受身份验证限制的 tools API | `POST /tools/invoke` 返回 `400/401/403/429` 以及 JSON `error` |烈的 Claw 家族网关信号。此 endpoint 是当前受信任操作员 HTTP API 接口的一部分,因此结构化的身份验证失败比单纯的仪表板获取更具信息量。 | | 启用了兼容 OpenAI 的聊天接口 | `POST /v1/chat/completions` 返回 `400/401/403/429` 以及 JSON `error` | 将其视为功能生成信号,而非精确版本。它与较新的兼容 OpenAI 的网关行为一致,表明聊天路由处于活动状态,而不是不存在或被方法阻止。 | | 模型路径是真实的 JSON | `GET /v1/models` 或 `GET /v1/models/openclaw/default` 返回 JSON | 当发生这种情况时具有潜在的高价值,特别是如果响应包含 `data`、`object` 或 `id`。 | | 模型路径仅为 SPA 回退 | `GET /v1/models` 返回 `200 text/html` 以及控制台标题 | 不要将此视为真实的模型 API。在当前的实时目标上,这通常会镜像与 `/` 相同的仪表板 shell。 | 扫描器现在将这些视为网关接口信号,而不是精确 的版本指纹。它们对于产品确认、行为 聚类和下限功能定年很有用,但在没有额外版本提示的情况下,还不能用于 精确的漏洞映射。 ## 建议的工作流 1. 针对目标或导出的 Shodan 数据运行扫描器。 2. 查看 JSON 或 CSV 输出中的原始特征以及任何家族匹配。 3. 根据您自己的实验室捕获构建产物或行为规则。 4. 使用丰富的规则文件重新运行扫描器。 5. 使用精确版本或家族匹配来确定漏洞分诊的优先级。 ## 注意事项 - 漏洞映射是基于版本的。它不能证明可利用性。 - 在最终研究扫描期间发现的仅包含 GHSA 的安全公告记录在 研究笔记中,但在 将其规范化为稳定的扫描器数据之前,不会 捆绑到默认的漏洞匹配中。 - 内置的漏洞数据现在包括 2026 年 3 月的其他建议,修复 延长至 `2026.3.2`,以及后来 截至 `2026.2.26` 的研究批次中经过筛选的低风险添加项。 - 更大规模的 2026 年 3 月研究批次仍记录在 [`research/proposed_changes/`](research/proposed_changes) 中, 但明确标记为需要验证的条目尚未 捆绑到默认漏洞匹配中。 - 当 banner OS 数据明显不匹配时,特定平台的 CVE 会被过滤掉, 当目标平台未知时,则会标记得更加谨慎。 - 一些内置的 CVE 需要身份验证、特定的工具权限或本地访问权限。 - 反向代理和自定义仪表板可以隐藏有用的信号。 - 蜜罐评估刻意保持保守,应被视为 分诊提示,而不是证明目标为伪造的确实证据。 - 默认的实时探测保持低影响力:扫描器仅使用 GET 请求和 WebSocket upgrade-header 检查。第二验证阶段可通过 `--deep-validation` 获得,且仅在强有力的 OpenClaw 家族 指纹识别后运行。CORS OPTIONS 检查和额外的 GET/WebSocket 存在探测位于 该条件性阶段中。空 body 或 `{}` JSON POST 探测需要 显式的 `--enable-post-probes`。 WebSocket 检查仅发送 HTTP upgrade header 并记录可见的 握手响应;扫描器不会建立完整的经过身份验证的 会话。 - `--format csv` 为每个目标输出一行汇总数据,用于分诊。 - 除了版本和 漏洞之外,CSV 输出还包括顶级指纹家族列,以及在可用时包括状态分布、被动 Shodan 产品/平台/ 枢纽列、mDNS 版本、反向代理列和蜜罐评估 列。 - `--format ndjson` 每行输出一个完整的 JSON 记录,适用于流水线。 - JSON 和 NDJSON 输出在 `matched_versions` 旁边包含 `fingerprint_matches`、 `proxy_detection`、`honeypot_assessment`,且 源自 Shodan 的元数据在适用时包括被动枢纽查询、mDNS 字段和 Shodan 与扫描器 CVE 交叉引用数据。 - 演示数据集位于 [`openclaw_scanner/data/`](openclaw_scanner/data)。 - 大规模的互联网使用应尊重速率限制和授权。 ## 未来范围 - 主机端扫描可能会在稍后添加,但对于当前的外部发现工具而言,这是故意不在考虑范围内的。 ## 测试 运行本地单元测试: ``` python3 -m unittest discover -s tests -v ```
标签:C2日志可视化, Python, 主机安全, 指纹识别, 插件系统, 无后门, 漏洞审计, 程序员工具, 资产测绘, 逆向工具