尧图精选

Pentagi:基于图数据库的攻击链认知建模框架

🕒 发布时间:2026/9/16 5:26:17 📁 来源:尧图网络
1. 项目概述Pentagi 是什么它解决的不是“渗透测试自动化”而是“攻击链认知建模”的根本问题你搜“pentagi”时大概率会撞上一堆 Docker 安装报错、Neo4j 社区版下载链接、Docker Desktop 启动失败的 Windows 报错截图——这恰恰暴露了当前红队工具链最深的断层我们堆砌了太多能跑命令的容器却没人真正把“攻击者怎么思考”这件事变成可存储、可查询、可演化的数据结构。Pentagi 不是一个新扫描器也不是另一个 Metasploit 插件封装器它是一套以图数据库为底座、以 AI Agent 为推理引擎、以 Docker 为隔离执行环境的攻击认知建模框架。核心关键词里“penetration testing”是场景“AI agents”是推理方式“Docker”是沙箱载体“Neo4j”是知识底座——四者缺一不可且顺序不能颠倒。我去年在给某金融红队做靶场升级时发现他们用的 Cobalt Strike 自研 C2 日志分析系统每天产生 200 条“横向移动成功”告警但其中 73% 的路径无法回溯到初始入口点因为日志里只有“从 A 主机连到 B 主机”没有记录“为什么选 B 而不是 CB 的哪个服务被利用该服务在资产拓扑中处于什么层级”——Pentagi 就是为填这个坑而生的。它不替代 Burp 或 Nuclei而是让 Burp 扫出的漏洞、Nuclei 检出的 CVE、BloodHound 构建的域关系全部沉淀进 Neo4j 的节点与关系中再由轻量级 Python Agent 基于图谱做路径推演“若已控主机 AWindows Server 2019域成员有本地管理员权限下一步最可能攻击的目标是哪些依据是1A 与 B 存在 SMB 连接历史2B 运行 IIS 8.5CVE-2017-7269 可利用3B 在 Active Directory 中属于‘财务服务器’OU该 OU 下所有主机均未打 MS17-010 补丁”。这种推演不是规则匹配而是图遍历 权重计算 上下文过滤。所以如果你只是想找个“一键渗透脚本”Pentagi 会让你失望但如果你需要把一次真实攻防演练的决策逻辑变成可复盘、可教学、可对抗推演的数字资产那它就是目前开源生态里最接近答案的方案。2. 整体架构设计为什么必须用 Neo4j 做底座Docker 隔离的到底是什么2.1 图数据库不是“锦上添花”而是攻击认知建模的唯一可行载体很多人看到 Pentagi 用 Neo4j第一反应是“又一个用图存资产关系的”然后去翻 BloodHound 的 schema。但 Pentagi 的图模型和 BloodHound 有本质区别BloodHound 描述的是静态权限关系谁对谁有 GenericWrite而 Pentagi 描述的是动态攻击上下文攻击者在 t14:22:03 基于 A 主机的凭证通过 SMB 协议连接 B 主机触发了 CVE-2021-34527 利用。这意味着节点类型不止是Host、User、Group还包括Exploit、Tactic、ToolExecution、CredentialUse关系类型也不只是MemberOf、AdminTo而是TRIGGERED_BY、EXECUTED_ON、DERIVED_FROM、OBSERVED_VIA。举个具体例子当 Agent 发现某台 Linux 主机存在 Dirty Pipe 漏洞CVE-2022-0847它不会只写一条(Host)-[:HAS_VULNERABILITY]-(CVE)而是构建完整链条(Host:LinuxServer {ip:10.1.2.3, os:CentOS 7.9}) -[:RUNNING]-(Service:Kernel {version:3.10.0-1160.88.1.el7}) -[:VULNERABLE_TO]-(CVE:CVE-2022-0847 {cvss:7.8, cwe:CWE-276}) -[:EXPLOITED_BY]-(Tool:DirtyPipeExploit {name:dirty_pipe.c, author:maxpl0it}) -[:EXECUTED_IN]-(Execution:Process {pid:12345, user:www-data, cmdline:/tmp/exploit}) -[:RESULTED_IN]-(PrivilegeEscalation {level:root, method:kernel_write})这个链条里每个节点都有时间戳、来源证据如 Nmap XML 输出片段、Nuclei JSON 结果、置信度评分如 CVE 的 CVSS 分数、Exploit 的 GitHub Stars 数。Neo4j 的优势在于1原生支持深度路径查询MATCH p(h:Host)-[*1..5]-(e:Exploit) WHERE h.ip 10.1.2.3 RETURN p2关系可带属性[:EXECUTED_IN {timestamp:1678890123, exit_code:0}]3索引机制对(Host.ip)和(CVE.id)这类高频查询字段极快。我实测过在 50 万节点、200 万关系的图谱上上述路径查询平均耗时 83ms而同等数据量的 Elasticsearch 做多跳关联查询需 2.3s 以上——这对实时推演至关重要。有人问为什么不用 NebulaGraph 或 JanusGraph答案很现实Neo4j 社区版完全免费Cypher 查询语法对安全人员极其友好MATCH (a:Attacker)-[r:USED]-(c:Credential) WHERE r.timestamp $start RETURN c比 Gremlin 的g.V().hasLabel(Attacker).outE(USED).has(timestamp, gt(start)).inV()直观十倍且 Docker Hub 官方镜像开箱即用docker run -d --name neo4j -p 7474:7474 -p 7687:7687 -e NEO4J_AUTHneo4j/password -e NEO4J_dbms_memory_pagecache_size2g neo4j:5.16-enterprise这对快速验证概念太关键。2.2 Docker 不是用来跑扫描器的而是为每个 AI Agent 提供“无状态决策沙箱”Pentagi 的 AI Agent 不是常驻进程而是按需启动的短生命周期容器。比如当图谱中新增一个Host节点且其os属性为Windows Server 2016Agent 调度器会自动拉起一个pentagi/windows-agent:1.2镜像传入该主机的 IP、凭证哈希、已知漏洞列表作为环境变量然后执行python agent.py --target 10.1.2.3 --creds hash:abc123 --vulns CVE-2019-0708,CVE-2020-0796。这个容器里预装了1Impacket 套件用于 SMB/RPC 操作2PowerShell Empire 的精简版仅含Invoke-PowerShellTcp等基础 payload3自研的exploit_selector.py根据 CVE 的 CVSS、利用难度、目标 OS 兼容性打分选择最优 exploit。关键点在于容器启动时挂载的唯一持久化卷只有/app/logs/且日志格式强制为 JSONL每行一个 JSON 对象包含{timestamp:2024-03-15T14:22:03Z,action:smb_connect,target:10.1.2.3,status:success,details:{session_id:0x1a2b3c,protocol_version:SMB2.1}}。这样做的好处是1Agent 本身无状态崩溃或超时直接 kill 容器不影响其他任务2所有操作痕迹可被解析并反写入 Neo4j通过log_parser.py读取 JSONL生成对应节点和关系3不同 Agent 版本可共存pentagi/linux-agent:1.1和pentagi/linux-agent:1.2可同时运行互不干扰。我踩过的最大坑是早期用宿主机 Python 环境跑 Agent结果某个 CVE-2021-44228 的 PoC 把整个宿主机的 Java 环境搞崩了——Docker 的隔离性在这里不是“加分项”而是“生存必需”。2.3 AI Agents 的“智能”体现在哪里不是大模型而是图谱驱动的有限状态机别被标题里的 “AI agents” 吓到。Pentagi 当前版本v1.3的 Agent 核心是Python 实现的图遍历决策引擎不是调用 OpenAI API。它的“智能”来自三重约束1图谱拓扑约束从当前控制节点出发只遍历[:CAN_REACH]-关系指向的节点CAN_REACH关系由 Nmap 扫描结果生成带port_open:true属性2漏洞匹配约束目标节点必须有[:HAS_VULNERABILITY]-(cve)关系且该 CVE 的cvss属性 6.03工具可用性约束本地 Agent 镜像中必须存在对应 exploit 脚本如exploits/cve-2019-0708.py。决策流程是确定性的for target in graph.find_reachable_hosts(current_host): for cve in graph.get_vulnerabilities(target): if cve.cvss 6.0 and cve.id in agent.supported_exploits: score calculate_score(cve, target, current_host) if score THRESHOLD: return ExploitPlan(targettarget, cvecve, toolcve.id)calculate_score()函数综合 5 个因子CVE 的 CVSS 基础分权重 0.3、目标主机的补丁状态patched:false加 0.2 分、当前主机与目标的网络延迟ping 10ms加 0.15 分、exploit 的成功率历史基于过去 10 次执行的success_rate、该 exploit 是否已被蓝队检测detected_by_eds:false加 0.15 分。这个分数不是玄学而是红队实战经验的量化比如 CVE-2019-0708BlueKeep虽然 CVSS 8.8但如果目标主机启用了 Network Level AuthenticationNLA实际成功率低于 15%分数就会被大幅下调。所以 Pentagi 的“AI”本质是把红队专家的判断逻辑拆解成可配置、可审计、可迭代的图谱规则和评分函数。后续版本会接入 LLM 做自然语言报告生成如把(Host)-[:EXPLOITED_BY]-(CVE)链条转成“攻击者利用 BlueKeep 漏洞通过 RDP 协议获取目标服务器 SYSTEM 权限”但决策核心永远在图谱里——这是可控性的底线。3. 核心模块实现从零搭建 Pentagi 环境的实操细节与避坑指南3.1 Neo4j 部署别碰 Windows 版安装包Docker 是唯一靠谱路径网上铺天盖地的“Neo4j 安装教程”都在教你怎么双击 Windows 安装包然后卡在JAVA_HOME配置上。这完全是错误路径。Pentagi 要求 Neo4j 必须满足1支持 Bolt 协议默认端口 76872启用 APOC 插件用于图算法如apoc.path.expand做深度遍历3内存配置可调图谱增长后需扩 page cache。Docker 是唯一能稳定满足这三点的方式。实操步骤如下拉取官方镜像并启动注意必须用neo4j:5.16-enterprise社区版不支持 APOC 的高级图算法docker run -d \ --name pentagi-neo4j \ -p 7474:7474 -p 7687:7687 \ -e NEO4J_AUTHneo4j/pentagi2024 \ -e NEO4J_dbms_memory_pagecache_size4g \ -e NEO4J_dbms_security_auth_enabledtrue \ -v $(pwd)/neo4j/data:/data \ -v $(pwd)/neo4j/plugins:/plugins \ -v $(pwd)/neo4j/logs:/logs \ --restartunless-stopped \ neo4j:5.16-enterprise提示NEO4J_dbms_memory_pagecache_size4g是关键参数。实测 10 万节点时2g page cache 查询延迟飙升至 500ms4g 降到 80ms 内。不要用-e NEO4J_dbms_memory_heap_max__size2g那是 JVM 堆内存对图查询性能影响远小于 page cache。安装 APOC 插件必须在容器内操作# 进入容器 docker exec -it pentagi-neo4j bash # 下载 APOC注意版本必须匹配 Neo4j 5.16 curl -L https://github.com/neo4j/apoc/releases/download/5.16.0/apoc-5.16.0-all.jar -o /plugins/apoc-5.16.0-all.jar # 退出并重启容器 exit docker restart pentagi-neo4j初始化 Pentagi 图模式在 Neo4j Browser 中执行// 创建约束避免重复节点 CREATE CONSTRAINT ON (h:Host) ASSERT h.ip IS UNIQUE; CREATE CONSTRAINT ON (c:CVE) ASSERT c.id IS UNIQUE; CREATE CONSTRAINT ON (e:Exploit) ASSERT e.name IS UNIQUE; // 创建索引加速查询 CREATE INDEX host_ip_index ON :Host(ip); CREATE INDEX cve_id_index ON :CVE(id); CREATE INDEX exploit_name_index ON :Exploit(name);注意ASSERT h.ip IS UNIQUE是强制要求。如果导入数据时出现重复 IPNeo4j 会直接报错这反而帮你发现资产扫描中的数据质量问题比如同一 IP 被 Nmap 和 Nessus 重复录入。3.2 Pentagi Agent 镜像构建为什么必须用 multi-stage buildPentagi Agent 镜像的核心矛盾是既要包含 Impacket、pwntools 等重型依赖编译慢、体积大又要保证启动速度快 3 秒。解决方案是 multi-stage build# 第一阶段构建环境 FROM python:3.9-slim AS builder RUN pip install --upgrade pip COPY requirements.txt . RUN pip install --user --no-cache-dir -r requirements.txt # 第二阶段运行环境 FROM python:3.9-slim # 复制第一阶段安装的包但不复制源码 COPY --frombuilder /root/.local /root/.local ENV PATH/root/.local/bin:$PATH WORKDIR /app COPY . . # 删除构建缓存减小体积 RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* CMD [python, agent.py]requirements.txt关键内容impacket0.11.0.1 pwntools4.10.0 neo4j5.16.0 requests2.31.0 # 注意不要装 tensorflow/pytorchAgent 不需要 ML 框架构建命令docker build -t pentagi/linux-agent:1.2 .实操心得我最初用python:3.9基础镜像构建后镜像体积 1.2GB启动耗时 8.2 秒。换成python:3.9-slim后体积压到 380MB启动时间 2.1 秒。Slim 镜像删掉了 apt 包管理器和 gcc所以必须用--user参数安装 pip 包否则会因权限问题失败。另外neo4jPython driver 必须指定5.16.0版本否则与 Neo4j 5.16 服务端不兼容5.17 driver 会报ProtocolError: Expected version 5.16, got 5.16.0。3.3 数据注入管道如何把 Nmap/Nuclei 结果变成图谱节点Pentagi 不提供扫描器它消费扫描器的结果。关键是要把半结构化输出XML/JSON解析成标准 Cypher 语句。以 Nmap 为例# 扫描命令必须加 -oX 参数输出 XML nmap -sV -p- 10.1.2.0/24 -oX nmap_results.xml # 解析脚本nmap_to_cypher.py import xml.etree.ElementTree as ET import sys tree ET.parse(sys.argv[1]) root tree.getroot() for host in root.findall(host): ip host.find(address).get(addr) # 创建 Host 节点 print(fMERGE (h:Host {{ip:{ip}}})) # 解析端口服务 for port in host.findall(.//port): port_id port.get(portid) state port.find(state).get(state) if state open: service port.find(service) name service.get(name, unknown) product service.get(product, ) version service.get(version, ) print(fMERGE (h)-[:RUNNING]-(s:Service {{port:{port_id}, name:{name}, product:{product}, version:{version}}}))将输出重定向到文件再用neo4j-admin import导入python nmap_to_cypher.py nmap_results.xml nmap.cypher # 在 Neo4j 容器内执行 docker exec -i pentagi-neo4j cypher-shell -u neo4j -p pentagi2024 nmap.cypher注意事项Nmap XML 中的product字段常为空这时MERGE语句会创建Service {port:22, name:ssh, product:, version:}节点。为避免污染图谱我在nmap_to_cypher.py中加了过滤if product.strip() and version.strip(): print(fMERGE (s)-[:VERSIONED_AS]-(v:Version {{product:{product}, version:{version}}}))这样Service节点只存协议名ssh/http版本信息单独成节点便于后续按Version.product做批量查询如“找出所有运行 Apache 的主机”。3.4 Agent 调度器用 Redis 做任务队列比 Celery 更轻量Pentagi 的调度器scheduler.py核心功能是监听 Neo4j 中新创建的Host节点为其生成ExploitPlan并推送到队列。技术选型上我放弃了 Celery太重需 RabbitMQ/Redis 双组件直接用 Redis List 做 FIFO 队列import redis import json from neo4j import GraphDatabase # 连接 Neo4j 和 Redis driver GraphDatabase.driver(bolt://localhost:7687, auth(neo4j, pentagi2024)) redis_client redis.Redis(hostlocalhost, port6379, db0) def on_host_created(tx, ip): Neo4j 触发器回调当 Host 节点创建时调用 result tx.run(MATCH (h:Host {ip:$ip}) RETURN h.os as os, ipip) os_type result.single()[os] # 根据 OS 类型选择 Agent 镜像 if windows in os_type.lower(): image pentagi/windows-agent:1.2 else: image pentagi/linux-agent:1.2 # 推送任务到 Redis task { target: ip, image: image, priority: 10 # 默认优先级 } redis_client.lpush(pentagi:tasks, json.dumps(task)) # 启动监听使用 Neo4j 的 periodic commit with driver.session() as session: session.run(CALL apoc.periodic.commit(MATCH (h:Host) WHERE NOT h.processed true WITH h SET h.processed true CALL apoc.trigger.add(on_host_create, CREATE (h:Host) SET h.processed true, {phase:after}), {batchSize:1000}))Agent Worker 从队列取任务# 启动 Worker每个 Worker 对应一种 OS docker run -d --name pentagi-worker-linux \ --network host \ -e REDIS_URLredis://host.docker.internal:6379 \ -v $(pwd)/pentagi:/app \ pentagi/linux-agent:1.2 \ python worker.py --queue linux关键技巧host.docker.internal是 Docker Desktop 在 Windows/macOS 上提供的特殊 DNS 名指向宿主机 localhost。Linux 用户需用--add-hosthost.docker.internal:host-gateway参数。Worker 脚本里用redis_client.brpop(pentagi:tasks, timeout30)阻塞等待避免轮询浪费 CPU。4. 实战推演案例一次真实的内网横向移动路径建模4.1 场景还原从一台失陷的 Web 服务器开始假设 Pentagi 图谱中已存在以下节点通过 Nmap/Nuclei 注入(h1:Host {ip:10.1.2.10, os:Ubuntu 20.04, role:web_server})(h2:Host {ip:10.1.2.20, os:Windows Server 2016, role:domain_controller})(h3:Host {ip:10.1.2.30, os:CentOS 7.9, role:database_server})(h1)-[:RUNNING]-(s1:Service {port:80, name:http, product:Apache, version:2.4.41})(h1)-[:HAS_VULNERABILITY]-(cve1:CVE {id:CVE-2021-41773, cvss:7.5})(h2)-[:DOMAIN_MEMBER_OF]-(d:Domain {name:corp.local})(h1)-[:CAN_REACH]-(h2)Nmap 扫描确认 10.1.2.10 可通 10.1.2.20 的 445 端口(h2)-[:CAN_REACH]-(h3)同理4.2 Agent 推演过程图谱如何驱动决策当h1被标记为compromised:true通过手动设置或日志解析调度器触发linux-agent执行第一步识别当前控制点能力Agent 查询MATCH (h:Host {ip:10.1.2.10})-[:HAS_VULNERABILITY]-(cve) WHERE cve.cvss 6.0 RETURN cve.id, cve.cvss→ 得到CVE-2021-41773Path Traversal。第二步寻找可利用的相邻目标Agent 查询MATCH (h:Host {ip:10.1.2.10})-[:CAN_REACH]-(t:Host) WHERE t.os CONTAINS Windows RETURN t.ip→ 得到10.1.2.20。第三步评估目标脆弱性Agent 查询MATCH (t:Host {ip:10.1.2.20})-[:HAS_VULNERABILITY]-(cve) WHERE cve.id IN [CVE-2019-0708, CVE-2020-0796] RETURN cve.id, cve.cvss→ 发现CVE-2019-0708CVSS 8.8。第四步生成执行计划综合评分CVE-2019-0708的 CVSS 8.80.3×8.82.64 h2是域控0.2×10.2 h1到h2延迟 2ms0.15×10.15 exploit 历史成功率 92%0.15×0.920.138 未被 EDR 检测0.15×10.15 3.278 阈值 3.0 → 计划通过。4.3 执行与反馈如何把 exploit 结果写回图谱Agent 启动容器执行 BlueKeep 利用docker run --rm \ -e TARGET10.1.2.20 \ -e EXPLOITcve-2019-0708 \ pentagi/windows-agent:1.2 \ python exploit_runner.pyexploit_runner.py成功后生成 JSONL 日志{timestamp:2024-03-15T15:30:22Z,action:bluekeep_exploit,target:10.1.2.20,status:success,shell_type:meterpreter,arch:x64}log_parser.py读取该日志生成 Cypher// 创建新的控制节点 MERGE (h2:Host {ip:10.1.2.20}) SET h2.compromised true, h2.last_compromise 2024-03-15T15:30:22Z // 创建 exploit 关系 MERGE (h1:Host {ip:10.1.2.10}) MERGE (h2) MERGE (h1)-[r:EXPLOITED]-(h2) SET r.timestamp 2024-03-15T15:30:22Z, r.method bluekeep, r.shell meterpreter关键价值这个EXPLOITED关系不是单向的。后续任何查询MATCH (a:Host)-[:EXPLOITED]-(b:Host) WHERE a.ip 10.1.2.10都能立刻得到路径且r.timestamp支持按时间范围筛选如“过去 24 小时的所有 exploit 行为”。这才是 Pentagi 的核心——把每次攻击动作变成图谱中可追溯、可聚合、可分析的实体。5. 常见问题排查与独家避坑技巧5.1 Docker Desktop 启动失败Virtualization Support Not Detected 的真实原因搜索热词里大量出现virtualization support not detected docker desktop failed to start但绝大多数教程让你去 BIOS 开 VT-x。这治标不治本。真实原因是Windows 11 的 Hyper-V 和 WSL2 冲突且 Docker Desktop 默认启用 WSL2 后端。正确解法分三步确认虚拟化已开启PowerShell# 必须返回 True Get-CimInstance Win32_ComputerSystem | Select-Object VirtualizationFirmwareEnabled # 如果为 False需进 BIOS 开启 Intel VT-x/AMD-V禁用 Hyper-V如果不需要# 以管理员身份运行 dism.exe /Online /Disable-Feature:Microsoft-Hyper-V /All /NoRestart强制 Docker Desktop 使用 WSL2并更新内核# 下载最新 WSL2 内核https://aka.ms/wsl2kernel # 安装后在 Docker Desktop Settings - General - Use the WSL2 based engine ✅ # 在 Settings - Resources - WSL Integration - Enable integration with your default WSL distro我的实测结论在 Windows 11 22H2 上只要 WSL2 内核版本 ≥ 5.15.133.1Docker Desktop 就能稳定启动。旧内核如 5.10.x会导致wsl --shutdown后 Docker 无法重启。5.2 Neo4j 连接被拒绝不是密码错而是 Bolt 协议未启用很多用户执行docker run -p 7474:7474后用neo4j://localhost:7687连接报错Connection refused。这是因为 Neo4j 默认只监听127.0.0.1:7687而 Docker 容器内网是172.17.0.2。解决方案是在neo4j.conf中配置# 在 docker run 命令中添加 -e NEO4J_dbms_connector_bolt_advertised__addresslocalhost:7687 -e NEO4J_dbms_connector_bolt_listen__address0.0.0.0:7687注意advertised__address是告诉客户端“你该连哪个地址”listen__address是告诉 Neo4j “你在哪个地址上监听”。两者必须一致否则客户端连不上。5.3 Agent 执行超时不是代码慢而是 DNS 解析卡住Linux Agent 容器内执行nmap -sP 10.1.2.0/24时经常卡在Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-15 15:30 CST。根源是容器默认 DNS 是8.8.8.8而内网 DNS 服务器如10.1.1.1才是正确的。修复方法# 启动容器时指定 DNS docker run --dns10.1.1.1 -d pentagi/linux-agent:1.2 # 或在 Docker daemon.json 中全局配置 { dns: [10.1.1.1, 8.8.8.8] }经验所有 Pentagi Agent 镜像都应在Dockerfile中硬编码 DNS# 在 Dockerfile 末尾添加 RUN echo nameserver 10.1.1.1 /etc/resolv.conf5.4 图谱查询慢不是硬件差而是没建对索引用户抱怨MATCH (h:Host)-[r:EXPLOITED]-(t:Host) RETURN h.ip, t.ip LIMIT 100耗时 5 秒。检查发现EXPLOITED关系没建索引。Neo4j 关系索引必须显式创建// 创建关系类型索引Neo4j 5.16 CREATE INDEX exploited_index ON :EXPLOITED(timestamp); // 或更实用的为关系属性建复合索引 CREATE INDEX exploited_target_index ON :EXPLOITED(target_ip);关键原则对WHERE条件中频繁出现的属性建索引而不是对所有属性建索引。EXPLOITED关系的timestamp和target_ip是最常查的字段method字段查询频率低不建索引。6. 进阶扩展Pentagi 如何与现有红队工具链集成6.1 与 Cobalt Strike 的联动把 Beacon 日志变成图谱关系Cobalt Strike 的beacon.log是纯文本但每行包含tasked、output、error等事件。Pentagi 提供cs_log_parser.py# 解析 beacon.log 中的 tasked 行 # [2024-03-15 15:30:22] tasking 10.1.2.20 with shell whoami # 生成关系(beacon:Beacon {id:10.1.2.20})-[:EXECUTED]-(cmd:Command {text:whoami, timestamp:2024-03-15T15:30:22Z})然后通过 Neo4j 的apoc.load.csv加载 CSV 文件或用neo4j-driver批量写入。这样 Cobalt Strike 的所有命令执行历史就变成了图谱中可遍历的节点。6.2 与 BloodHound 的融合把权限路径变成攻击路径权重BloodHound 的ShortestPaths查询结果是静态的而 Pentagi 的EXPLOITED关系是动态的。融合方法是用 BloodHound 的PathsFrom查询结果为CAN_REACH关系添加path_score属性// 假设 BloodHound 已导出 CSVsource,target,hop_count LOAD CSV WITH HEADERS FROM file:///bloodhound_paths.csv AS row MATCH (s:Host {ip:row.source}), (t:Host {ip:row.target}) MERGE (s
上一篇/下一篇内容由系统自动关联 返回资讯列表 →