mcpField
G
graph-the-network

graph-the-network

github.com/useosint数据与数据库571.8k 次安装12 周前更新
代码仓库

关于 graph-the-network

面向调查工作的实体关系图谱构建技能,指导分析人员整理节点、关系、来源与置信度。它强调实体去重、时间有效性和边的证据记录,帮助识别共享基础设施、网络桥接点及调查缺口。

主要功能

  1. 01定义实体与关系类型
  2. 02记录关系来源、时间和置信度
  3. 03合并别名并留存依据
  4. 04标注关系的时间有效性
  5. 05分析中心性、社群与连接路径

适用场景

  1. 01梳理人员、账户和公司的联系
  2. 02发现多个网站共享的独特标识
  3. 03评估网络中的关键桥接节点
  4. 04记录调查关系以供审查与报告

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/useosint/skills --skill graph-the-network

安装后在 Claude Code 中输入/graph-the-network确认已加载。

附带文件reference/schema-starter.mdreference/tool-comparison.md

详细介绍

绘制网络图

一份包含 30 个选择器的列表和一张包含 30 个选择器的图,信息完全相同;但只有后者能让你看出两个集群共享一个节点。这就是全部理由:人类无法从行与行之间发现共享元素,却能在布局中一眼看出。新手常犯的错误,是把图当作输出——在最后为报告绘制的一张图片。它是从第一次关联分析开始构建的案件工作记忆,报告则由此生成。

在添加第二个节点之前确定模式

所有有用的后续工作——去重、中心性分析、查询、报告表格——都取决于前 10 分钟做出的决定。两条规则:

现实中的每个事物只建一个节点。 别名是属性,不是节点。如果“J. Okonkwo”、“jokonkwo”和“Joseph Okonkwo”是三个节点,那么你计算的每项指标都是错的:度数被拆成三份,案件中最重要的人看起来反而无关紧要;两个集群之间的共享连接也永远不会出现,因为它被分散到多个重复节点中。根据证据进行合并,并记录合并信息(涉及哪些选择器、置信度如何)——不记录的合并,就是无法审计地断言两个事物其实是同一个。

有一种情况容易让人栽跟头:一个人和其账号是不同的事物。应建模为 Person —operates→ Account,因为运营者可能变更,而且账号也可能由多人共享。把两者合并,就无法表示这两项事实。

边类型应采用封闭集合。 自由文本边标签会让同一张图里出现 owns、owned-by、ownership 和 is owner of,而任何查询都无法一次找到它们。固定词汇表,保持精简,统一方向,并将其写在案件文件顶部。包含实体类型、边类型、必需属性以及别名/合并约定的入门模式:reference/schema-starter.md。

在边上记录来源和置信度

这项做法能区分有用的图和好看的图,却也最常被跳过。

节点的出处几乎从来不是问题所在。有争议的是关系:“此人控制这家公司”“此域名由该行为者运营”。因此,每条边至少都要记录:来源(URL、工具或证物 ID)、检索时间戳、来源等级(见 investigate-anything)和置信度。否则,登记备案中断言的边与根据两个账号发布相似文本推断出的边看起来毫无区别——图一旦绘制出来,薄弱的关联就无法与强关联区分开来,还会被当成事实据以推理。

用视觉样式呈现置信度:已确认的用实线,可能的用虚线,未确认的用点线。然后看看你的图,留意自己依赖的结构中有多少是点线。保留一个 confirmed-only 视图,并检查结论在该视图中是否仍然成立——如果结论不复存在,那么你的发现就是由最薄弱的边造成的假象。

对于可能终止的边,添加有效时间——valid_from / valid_to,例如任职、域名注册、地址、董事职务、IP 解析。如果图中没有时间信息,就会悄无声息地断言所有关系都同时存在,从而虚构出从未有过交集的人之间的关系。先后相隔 5 年担任同一家公司董事的两个人并无关联;没有时间信息的图却会说他们有关联。

图谱实际能告诉你什么

  • 共享基础设施。 一个注册人邮箱、一个分析或广告标识符、一张 TLS 证书、一个重复使用的头像哈希,将表面上互不相关的网站关联起来。将 who-owns-this-domain、find-hidden-subdomains 和 find-exposed-servers 的结果导入图谱,这些关联就会作为高度节点显现出来,无需你主动寻找。
  • 桥接节点。 移除后会将图谱拆分成互不连通的多个部分的节点。在实际调查中,这通常是连接两个身份或两个网络的人或资产,而且往往就是关键发现。形式上,它具有较高的中介中心性;从图上看,它位于两个团簇之间的空隙中。
  • 度与中介中心性。 度最高的节点往往是最显眼的一方——公开的董事、台前人物或共享服务。实际控制方的度通常适中,但中介中心性较高:连接不多,但连接的都是关键对象。两项指标都要计算并比较;如果结果不一致,就仔细研究差异。
  • 社群。 模块度/社群检测会将图谱划分为多个簇。它的主要用途是找出归属异常的节点。
  • 空白。 在密集邻域中只有一条边的节点,说明的是信息收集缺口,而非现实世界的事实。让稀疏区域指引下一步调查。

中心性只能作为寻找线索的指引,绝不能当作结论。它反映的不只是现实,也反映了你的信息收集情况:你调查得最全面的对象,就会成为图谱的中心。

工具

情况可选工具
节点少于约 200 个,由一名分析师负责,最终需要写入报告用电子表格或 CSV 整理节点表和边表,再用 Graphviz 渲染或导入 Gephi
基于查询开展工作:路径、共享属性、“谁连接了 A 和 B”使用支持 Cypher 的 Neo4j
布局、指标、社群检测、演示Gephi
从节点自动扩展调查,且拥有相应许可Maltego

务实的默认方案:对大多数调查而言,两份 CSV——节点和边——加上简单的渲染工具,胜过所有重量级工具。它们可以进行差异比较、版本控制,也便于从未用过这些工具的人审查,还能导入上述所有工具。只有在有实际需求时才采用 Maltego 或 Neo4j(例如需要自动化转换,或图谱规模大到无法凭记忆掌握),而不要默认使用它们。

即使你不使用 Maltego,也值得了解它的模型:实体带有转换功能,可执行服务端查询,将一个实体扩展为相关实体(域名扩展为子域名,再扩展为 IP 和证书)。转换过程就是信息收集,因此每次转换都是可归因于你的网络操作;每条结果的准确度则取决于底层数据源。Maltego 自带的图谱只能说明转换的输出,不能代表现实世界。

学习 Cypher 有一个值得的理由:路径查询。询问“这个人和那家公司之间是否存在最多包含四种关系的链条?具体是什么?”在 Neo4j 中只需一次查询,在其他任何地方都得手动费力查找。

MATCH p = shortestPath((a:Person {id:'p-kestrel'})-[*..4]-(c:Company {id:'c-nordvale'}))
RETURN p

功能对比、导入格式、Gephi 的 CSV 列名,以及各工具不适用的情况:reference/tool-comparison.md。

容易出错的地方

连接过度。 这是典型的失败情形。边足够多时,所有节点都会彼此相连;图就会变成一团乱麻,不再承载信息。这种情况通常由低价值的边导致:位于同一国家、使用同一家注册商、同一家托管服务商、同一网域的网页邮箱,或同一个热门 CDN IP。两个网站都使用 Cloudflare,并不代表它们有关联。两个人都有 Gmail 地址,并不代表他们有关联。原则是:一条边只有在具备区分性时才值得保留——如果大量无关实体都会共享它,那它只是背景信息,而非关系。应将这类信息建模为节点属性,或直接省略。

将共享服务边误读为关系。 共享托管、注册商的隐私保护服务、公司注册代理的登记地址、支付处理商、邮件转发服务套件:这些都会产生真实的共享节点,但不代表各方之间存在关系。始终要问有多少其他实体与该节点相连——一个被四百家公司使用的登记地址,就是代理机构的地址。

实体消歧错误,双向皆然。 将一个人拆成三个人(掩盖发现),或将两个人合并成一个人(凭空捏造关联)。合并更危险,因为图会看起来像是有力的交叉印证:两个簇被你执行的一次合并连接起来。应记录每次合并及其证据,并确保能够撤销合并。

通过布局洗白置信度。 一条虚线表示的推断边被画出来,随后被截图,再被写进文字描述,几步之后就成了报告图示里的一条实线,却无人能追溯其来源。报告中的图应由数据文件生成,绝不要使用手动编辑的图片。

把图当作论据。 布局良好的图表,其说服力往往远超证据本身。布局算法追求美观;力导向图中的相邻关系并非发现。应引用边,而不是图像。

在不完整的图上计算指标。 如果你通过穷尽列举某个行为者来构建图,那么图上的中心性指标必然会让该行为者高居榜首。报告任何指标时,都应同时注明资料收集的覆盖范围。

置信度分级

对边分级,而不是对整张图分级。

  • 已确认 — 权威的一手记录明确说明了该关系(例如登记备案、签署的证书、两个端点彼此声明存在交叉链接),或有两个独立收集的来源通过循环报道检查。
  • 较可能 — 有一个强有力的来源,或有一种足够罕见、具备区分性的独特共享选择器(例如自托管分析 ID、不寻常的重复密码哈希、个人域名),且没有相矛盾的证据。
  • 未经确认 — 一种许多无关实体都可能共享的属性,或仅凭风格或时间上的相关性。用虚线表示,或干脆不画。
  • 已排除 — 经追溯后发现关联来自共享服务、经纪商数据源或巧合。应将已排除的边保留在文件中并标明原因;否则下一位分析师会把它们重新加回来。

一条路径的可信度取决于其中最弱的一条边。报告任何链路时,应注明其中最低的边置信度,而不是平均值。

示例

案例:三个看似毫不相关的欺诈域名。首次调查转向后,将节点和边分别存放在两个 CSV 文件中。

这三个域名的 WHOIS 信息都受到隐私保护,因此无法获取注册人关系——显而易见的方法行不通。通过 read-deleted-pages 找到的存档副本中,竟包含其中两个域名在启用隐私保护前的注册快照,由此获得两条 Person —registered→ Domain 关系,均有来源和日期,且评级为已确认。

添加 IP 解析结果后,出现一个看似连接了全部三个域名和另外四十个无关网站的中心节点:一个共享 CDN 地址。按度数计算,它是图中最中心的节点,但这毫无意义。于是将其降级为节点属性并移除相应边——杂乱的毛线团也随之消失。

真正的桥梁是一个自托管分析标识符,它出现在两个域名的存档 HTML 中,也出现在一个此前不在调查范围内的第四个网站上;该网站是一个带有真实姓名的个人作品集。在仅含已确认关系的视图中,介数分析显示,连接两个簇的是这个标识符,而非显眼的注册人。时间关系显示,作品集使用该标识符的时间早于第三个域名的创建时间,因此该域名仍保持未连接状态——如实说明这一点,才能让报告保持诚实。

调查转向

图谱中的新线索技能
共享的注册人电子邮件或个人域名who-owns-this-domain、what-an-email-reveals
共享证书或子域名模式find-hidden-subdomains
共享 IP 或托管痕迹find-exposed-servers
节点间重复使用的头像或图片find-the-original-image
新发现的用户名hunt-a-handle
新发现的人物find-anyone
新发现的公司或地址x-ray-a-company、who-really-owns-it
钱包集群及交易对手follow-the-crypto
完成的实体关系图write-the-intel-brief

法律与处理注意事项

案件关系图是针对已识别人员构建的专用档案,其敏感程度高于其中的任何单项信息——汇总正是这项技术的目的,也是数据保护制度重点审查的内容。第三方节点(亲属、同事、共同居住者)会迅速累积;在关系图流转之前,应剔除任何与调查目标无关的人员,并在公开的图表中将其隐去。按照 ../../ETHICS.md 的规定,使用与案件其他资料相同的加密和保留规则存储关系图文件。托管式图谱平台意味着要将案件上传给第三方——将对象的线索粘贴到云端转换工具之前,请先确认这样做是否获准。

评论

支持 Markdown