nuclide-research/VisorGraph

GitHub: nuclide-research/VisorGraph

VisorGraph是一款用于网络基础设施重建的轻量级工具,通过多种探测技术生成详细的网络图。

Stars: 0 | Forks: 0

# 视觉图 种子多态型基础设施重建引擎:证书跳转、服务指纹和域到操作者归因,全部在一个6.7 MB的静态二进制文件中。 VisorGraph接受一个或多个种子(IP、域名或种子文件)并运行一个固定点探测循环,直到图停止增长或预算耗尽。首先对每个种子运行被动探测;在被动饱和后启动主动探测。发现结果以JSONL流的形式输出到stdout进行实时链式处理;在文件末尾后跟一个最终的JSON图对象。沙箱检测器在扫描之前探测两个参考目标,比较响应形状,并在stderr中警告HTTP或TLS拦截活动,以便调用者知道主动探测结论是否可信。 ## 安装 ``` git clone https://github.com/nuclide-research/VisorGraph cd VisorGraph make setup-deps # installs gVisor (runsc) and Go deps make build # produces ./bin/visorgraph (6.7 MB static binary) ``` 或者,不使用make构建: ``` go build -o bin/visorgraph ./cmd/visorgraph ``` Go 1.25或更高版本。gVisor(`runsc`)对于沙箱主动探测是必需的;二进制文件可以不使用它运行,但主动探测将不会被沙箱化。 ## 使用 ``` visorgraph [-ip ] [-domain ] [-seeds-file ] [-workers N] [-rps N] [-max-iter N] [-no-active] [-sandbox-check] [-no-stream] ``` | 标志 | 默认值 | 影响 | |------|---------|--------| | `-ip ` | | 种子IP地址 | | `-domain ` | | 种子域名 | | `-seeds-file ` | | 每行一个种子的文件;通过`net.ParseIP`自动检测IP或域名;以`#`开头的行是注释;空白后的内联`# notes`将被删除 | | `-workers ` | 256 | Goroutine池大小 | | `-rps ` | 0(无限)| 所有探测每秒的最大请求数 | | `-max-iter ` | 50 | 最大固定点迭代次数 | | `-no-active` | false | 禁用主动探测;仅被动模式 | | `-sandbox-check` | false | 扫描前运行MITM/拦截检测 | | `-no-stream` | false | 抑制JSONL流;仅输出最终的图 | `-ip`、`-domain`和`-seeds-file`组合添加。至少必须提供一个。 ## 探测注册表 默认注册了五个探测。其中三个是主动的,并受被动饱和控制: | 探测 | 模式 | 实现 | |-------|------|-------------| | `ct_logs` | 被动 | 是(crt.sh JSON API) | | `passive_dns` | 被动 | 拖鞋(需要外部API密钥) | | `bgp_whois` | 被动 | 拖鞋(需要外部API密钥) | | `shodan_censys_cached` | 被动 | 拖鞋(需要外部API密钥) | | `rdns` | 被动 | 拖鞋 | | `tls_clienthello` | 主动 | 是(TLS握手+SAN提取) | | `http_head` | 主动 | 是(HEAD请求+头部提取) | | `prometheus` | 主动 | 是(未认证的Prometheus预言机) | | `well_known` | 主动 | 拖鞋 | | `banner_read` | 主动 | 拖鞋 | `ct_logs`、`tls_clienthello`、`http_head`和`prometheus`有实际实现。其余探测是接受正确种子类型的占位符,并返回空发现,准备连接到API密钥。 ## 图输出形状 JSONL流为每个事件输出一个对象。最终的图对象(stdout的最后一行)具有以下形状: ``` { "nodes": { "<16-char-hex-id>": { "type": "host | service | cert | domain | netblock | org | asn", "value": "...", "attrs": {}, "provenance": [["seed-id", "..."]], "first_seen": 1748000000.0, "last_seen": 1748000000.0, "exposure": "public_intended | public_accidental | mgmt_exposed | legacy_drift | unknown" } }, "edges": { "": { "src": "", "dst": "", "type": "observed_on | issued_for | resolves_to | announced_by | co_hosted_with | shares_cert_with | belongs_to | drift_from", "attrs": {}, "first_seen": 1748000000.0 } }, "created_at": 1748000000.0 } ``` 节点身份是其规范字符串的SHA-256,截断为16个十六进制字符。UpsertNode在图的RWMutex下是原子的,因此在工作池中没有TOCTOU竞争。 ## 沙箱检测 `-sandbox-check`向三个参考IP(example.com/Akamai、Google DNS、Cloudflare DNS)发送相同的有效载荷并比较响应形状。目标之间的相同形状表示HTTP拦截。它还检查`example.com:443`的TLS发行者并匹配已知的拦截CA。结果发送到stderr,以免污染JSONL流。 ## 引擎行为 引擎在最大堆种子优先队列上运行固定点迭代(最高置信度优先)。一个信号量限制并发goroutine的数量为`-workers`。`golang.org/x/time/rate`令牌桶为每个探测RPS设置门控。当队列为空且没有goroutine在飞行时,当预算耗尽或当`-max-iter`迭代完成时,引擎停止。SIGINT和SIGTERM通过上下文取消干净地排空引擎。 ## 示例 ``` $ ./bin/visorgraph -domain example.com -no-active -no-stream ``` ``` { "nodes": { "a3c1e4b2d5f60718": { "type": "domain", "value": "example.com", "attrs": {}, "provenance": [["a3c1e4b2d5f60718"]], "first_seen": 1748000000.0, "last_seen": 1748000000.1, "exposure": "public_intended" }, "9f2a8b1c3d7e4051": { "type": "cert", "value": "sha256:abcdef...", "attrs": {"cn": "www.example.com", "sans": ["example.com", "www.example.com"]}, "provenance": [["a3c1e4b2d5f60718", "9f2a8b1c3d7e4051"]], "first_seen": 1748000000.2, "last_seen": 1748000000.2, "exposure": "unknown" } }, "edges": { "a3c1e4b2d5f60718-issued_for->9f2a8b1c3d7e4051": { "src": "a3c1e4b2d5f60718", "dst": "9f2a8b1c3d7e4051", "type": "issued_for", "attrs": {}, "first_seen": 1748000000.2 } }, "created_at": 1748000000.0 } ``` ## VisorGraph不是什么 VisorGraph不是一个端口扫描器。它不会扫描范围、暴力破解目录或发送漏洞利用。主动探测是非侵入性的:TLS握手、HEAD请求和未认证的API读取。引擎的RPS标志和预算上限限制了其足迹。对于人口普查扫描,请使用aimap或JAXEN。对于单个监控主机,请使用tiptoe。 ## 许可证 MIT。属于NuClide工具链的一部分。联系:[nuclide-research.com](https://nuclide-research.com)
标签:CT日志遍历, EVTX分析, Go语言, gVisor沙箱, JSONL输出, MITM检测, Prometheus数据源, TLS指纹识别, 主动探测, 图分析, 域名归属地, 威胁情报, 安全测试, 开发者工具, 拦截检测, 攻击性安全, 数据流, 日志审计, 程序破解, 被动探测, 证书跳转, 静态二进制