十层检测
探针逐层看什么
每一层都是一组可独立执行的模板。模板声明输入、步骤、检查项、发现和产物;探针执行模板并回传证据。
十层一览
| 层 | 能做什么 | 代表模板 |
|---|---|---|
| 1架构层 | 审计 rail 与多平面错配、PD 分离 KV 通道、IMEX 域、MoE/EP 集合通信、长上下文 KV 生命周期、多集群联邦与身份信任。 | rail-mismatch-forcing, prefill-decode-kv-channel-unauth, nvlink-imex-isolation |
| 2产品 / 框架层 | 枚举 vLLM、SGLang、TRL、verl、AReaL、SkyRL、OpenRLHF、slime、LLaMA-Factory、ms-swift、Megatron-LM、DeepSpeed、transformers、网关与 Agent 平台的管理面与控制面。 | vllm-plugin-auth-bypass, sglang-admin-failopen, verl-prime-code-exec |
| 3组件 / Operator 层 | 检查 Ray 与 LWS 控制面、GPU Operator 与驱动容器、DRA 策略、CSI 节点插件、BMC/Redfish 与 DPU offload。 | ray-dashboard-job, gpu-operator-driver-audit, gpu-dra-mig-policy |
| 4网络 / fabric 层 | 验证 hostNetwork、SR-IOV、macvlan 上的策略旁路,CNI 双控制面、IB 子网管理器、RoCE PFC/ECN、SHARP、NCCL bootstrap 与 DNS。 | multus-sriov-rdma-bypass, ib-sm-partition-audit, sharp-in-network-poison |
| 5数据 / 权重层 | 检查 checkpoint 与优化器分片、数据集管道、HF 缓存、权重桶、模型注册表与 KV/前缀缓存。 | checkpoint-shard-poison, skyrl-fetch-weights-traversal, model-registry-exposure |
| 6租户 / 隔离层 | 度量 MIG 与 MPS 残留、GPU 池化调度器、cache_salt 策略与路由指标泄露。 | gpu-tenant-residue, hami-scheduler-auth-gap, cache-salt-policy-audit |
| 7供应链 / 身份层 | 核验 trust_remote_code、revision 固定、证明链、SBOM、IRSA/工作负载身份、IMDS 与凭据暴露。 | trust-remote-code-supply-chain, gpu-cc-attestation-chain, cloud-irsa-trust-wildcard |
| 8缓存安全层 | 测试跨租户前缀缓存、语义缓存误命中、逐出残留、远程 KV 池、EPP 指标与 TTFT 时序。 | prefix-cache-cross-tenant-leak, remote-kv-pool-isolation, cache-timing-sidechannel |
| 9跨组合层 | 只在两个或三个组件同时满足条件时才成立的发现,合并到组合层报一次,并把组件级记录并入其中。 | sglang-weight-exfil, imex-computedomain-gpu-memory-crossing, long-context-cache-leak |
| 10防护绕过层 | 度量 HIDS、运行时 eBPF、准入、镜像扫描、主机代理、WAF 与流量可视化是否看得见良性授权行为。 | defense-bypass-elkeid, defense-bypass-falco, defense-bypass-admission |
逐层检测点与证据产出:DETECTION-LAYERS.md · PRODUCT.md
平台能力
- 一条执行路径。 立足、Rust 探针、帧通道、Pod 内任务、子探针、证据。
- 探针树。 probe_id 与 parent_id 标出位置;子探针用自己的 token,继承只能更严格;限制嵌套层数与并发子探针数量;清理先子后父。
- Agent 运行时。 带预算的目标图,含决策轨迹、journal 恢复与零执行回放。
- 跨集群中继。 集群间用同一套帧协议,并留下覆盖证明。
- 证据由探针产出。 任务结果、步骤日志、产物、SHA-256 manifest、流量表与清理回执。
- 规则可重放。 准入、运行时、网络三类规则包,输出拦截 / 检出 / 漏过矩阵。
- 报告与控制台。 双语渗透与修复报告、SARIF / OCSF / VEX 导出、本地控制台。
一条执行路径
三个组件,一棵探针树
控制端不在目标侧执行任何逻辑:它负责授权、渲染模板、执行预算与归档证据。探针是 Pod 里唯一运行的代码。
立足 ──▶ Rust 探针 ──▶ 帧通道 ──▶ Pod 内任务
│
├─▶ 子探针 ──▶ 子探针
└─▶ 证据 ──▶ 报告 / 规则 / 控制台
三个组件
- 模板层。 template.json 声明输入、载荷、步骤、computed 状态、检查项、发现与产物。
- 探针端。 静态 Rust 二进制使用 HMAC 认证的帧协议,执行 http、tcp、exec、fs、k8s、socks 与 spawn。
- 控制端。 Python 负责授权、范围、级别、备份与审计校验,并把探针证据汇总成发现。
探针树
每颗探针都有 probe_id 与 parent_id。子探针继承父探针的只读状态、命令白名单与预算,且只能更严格。清理先子后父,避免留下未清理、仍持有 token 的子探针进程。
静态 Rust 探针
一个二进制、286 个模板
探针是 linux/amd64 与 linux/arm64 各一个静态 musl 二进制。模板是 JSON 数据。
探针操作
| 操作 | 做什么 |
|---|---|
collect | 采集主机、Pod、进程、网络与 Kubernetes 上下文。 |
exec | 在预算内执行白名单命令。 |
audit-exec | 执行命令并留下审计轨迹与时序记录。 |
read-file | 读取文件,带大小上限与 SHA-256 哈希。 |
list-files | 列出目录树与元数据。 |
upload | 写入前先过授权与写权限校验。 |
download | 分块流式回传文件。 |
spawn | 启动子探针,给它独立 token 与更严格的预算。 |
dial | 向范围内目标建立 TCP 或 UDP 连接。 |
socks | 暴露回环 SOCKS5 监听,兼容本地工具。 |
beacon | 经帧通道发送心跳与状态更新。 |
cleanup | 移除产物并确认探针树已清空。 |
每个操作都受预算与范围约束,并写入证据库;探针树按先子后父的顺序清理。
每个模块都是模板;注册表不接受带 run.py 的模块。
代理协议支持
回连传输与 ML 服务代理
回连通道与 ML 代理属于两层:通道在控制端与探针之间承载帧,代理在探针与范围内目标之间承载服务协议。
| 层 | 支持 |
|---|---|
| 回连通道 | TLS · WSS · HTTPS · QUIC · WebTransport(experimental)· MASQUE |
| ML 服务代理 | gRPC · Redis · TCPStore · NCCL · UCX · ZMTP(experimental) |
| SOCKS5 | 仅回环兼容(127.0.0.1) |
认证与加密
- 每个帧都带 token 与 HMAC;token 或 MAC 不匹配就断开连接。
- TLS、WSS、HTTPS、QUIC 与 WebTransport 用 SHA-256 pin 校验控制端证书,可选 CA 文件。
- gRPC、Redis、TCPStore、NCCL 与 UCX 代理走 TLS;ZMTP 启用时使用 CURVE 与 Z85 密钥。
- SOCKS5 只留在回环,是本地工具的兼容路径,不是全网代理。
漏洞研究
模板目录背后的漏洞研究
模板目录对应 184 条漏洞记录,每条写清组件、受影响版本、根因、影响与检测方式;其中 68 条带可运行 PoC。研究集共 169 条:47 条经动态复现并确认未公开,46 条可以进入协调披露,去重后得到 39 个独立利用原语。103 条受影响版本记录与 121 条检测规则支撑 29 条攻击链。
漏洞研究
| 库存 | 数量 |
|---|---|
| 漏洞条目 | 184 |
| 可运行 PoC | 68 |
| 研究记录 | 169 |
| 确认未公开 | 47 |
| 可进入披露 | 46 |
| 独立原语 | 39 |
| 版本矩阵条目 | 103 |
| 载荷包 | 47 |
| 检测规则 | 121 |
| 攻击链 | 29 |
公开台账列出组件、类别、受影响版本与披露状态;利用细节不公开。
0DAY-PUBLIC.md · VULNERABILITY-LAYERS.md · DETECTION-LAYERS.md
从立足到报告
九个阶段,每步都留下下一步能校验的东西
阶段顺序很重要。任何阶段都可以拒绝,拒绝之后这次运行就停在这里。
- 1立足session open 记录入口方式、目标、命名空间、Pod 与凭据指纹。
→ 会话记录 - 2Rust 探针probe deploy 投放静态二进制并登记身份与哈希。
→ 探针身份 - 3通道channel listen 接收探针回连;有本地命令通道时也可以用 stdio 通道。
→ 通道状态 - 4检测session run、run 与 agent run 按十层执行模板。
→ 发现、证据 - 5逃逸execute 解析链;写步骤先过备份校验。
→ 逃逸路径 - 6横向通道转发、子探针与 agent 图边测绘内部可达性。
→ 可达图 - 7多探针probe spawn 扩展探针树;子探针继承更严格的预算与白名单。
→ 探针树 - 8跨集群agent relay 连接集群;agent coverage 写出完成证明。
→ 中继状态、覆盖证明 - 9报告 / 规则 / 控制台report、export、rules generate 与 ui 完成报告、规则与控制台。
→ 报告、规则包、控制台
写操作的五道校验
| 校验 | 拒绝条件 | 信号 |
|---|---|---|
| 授权 | 没记录、窗口过期、资产越界。 | exit 91 |
| 级别 | 模板级别高于记录。 | exit 91 |
| 备份 | 写步骤没有备份目标。 | exit 91 |
| 范围 | 目标或命名空间不在会话内。 | 拒绝 |
| 回滚 | 有步骤无法恢复。 | exit 3 |
探针优先接入
安装、接入、投放、运行、报告
从控制台开始,接入你已有的探针或立足点。默认立足点是一个普通的最低权限 Pod:非 root、没有 hostPath 或 privileged、没有 kubeconfig,只有出站 TCP。
- python -m pip install -e .安装控制端,需要 Python 3.10 – 3.13。
- python -m inkblade up启动控制台,在浏览器里登录并签授权记录。
- python -m inkblade probe list接入已有探针;控制端监听,探针主动回连。
- python -m inkblade session open --mode foothold ...用已有 shell、SA token 或 RCE 完成首次投放。
- python -m inkblade agent run --probe <probe-id> ...通过探针通道执行检测,再生成报告。
$ python -m inkblade up
$ python -m inkblade quickstart
$ python -m inkblade probe list
$ python -m inkblade channel listen
$ python -m inkblade session open --mode foothold --target <target> --credential-source pod-shell --namespace <namespace> --pod <pod>
$ python -m inkblade probe deploy --session <session-id> --via rce --binary ./inkblade-probe-linux-amd64 --probe-token-file ./probe.token --allow-write
$ inkblade-probe reverse --host <controller> --port <port>
$ python -m inkblade agent run --probe <probe-id> --objective read-only-recon --workspace ./work
$ python -m inkblade report --run <run-id> --lang bi
子探针由父探针用 probe upload + probe spawn 投放,回连方式相同。目标环境里有本地命令通道时,可以用 stdio 通道(channel start)。kubeconfig 是可选的,只用于首次批量 bootstrap。文档站点在本地:python -m inkblade docs 在 127.0.0.1:8766 提供 docs/ 并打开浏览器,--no-browser 则不打开。
命令表
实际输入的命令面
不访问集群或 LLM 的命令可以离线运行;`agent` 规划需要配置 LLM 端点。
| 任务 | 命令 |
|---|---|
| 接入向导 | inkblade up |
| 授权记录 | inkblade quickstart · inkblade roe |
| 会话 | inkblade session open|status|close|run |
| 探针 | inkblade probe deploy|list|collect|exec|read-file|list-files|upload|download|spawn|cleanup |
| 通道 | inkblade channel listen|start|status|stop |
| 单模板 | inkblade session run --id |
| 链 | inkblade execute --chain |
| Agent | inkblade agent run|status|trace|resume|replay|stop |
| 跨集群 | inkblade agent relay add|list|status · inkblade agent coverage status|proof |
| 报告 | inkblade report --run |
| 导出 | inkblade export --run |
| 规则 | inkblade rules generate · inkblade rules validate |
| 控制台 | inkblade ui |
| 文档站点 | inkblade docs --port 8766 --bind 127.0.0.1 |
| 模板 | inkblade template list|get|plan|validate |
Wheel、容器、Helm
一个控制端,三种交付方式
控制端是一个无第三方依赖的 Python 包;探针是独立的静态二进制。
python -m pip wheel . --no-deps -w dist/
python -m pip install --no-index --find-links dist/ inkblade
docker build -t inkblade:0.2.0 .
docker run --rm -v inkblade-data:/data inkblade:0.2.0 up
helm install inkblade deploy/helm/inkblade --namespace inkblade --create-namespace
uid 10001、根文件系统只读、证据写入 PVC。默认只给读动词;写操作需要 readOnly=false、rbac.allowWrite=true 与签署记录。卸载时保留 PVC。
安全与授权
授权是使用前提,不是功能开关
没有签署记录,InkBlade 拒绝运行。每个阶段都有自己的校验。
- RoE 记录目标、范围、级别、时间窗与应急联系人;记录带哈希,随每次运行进入证据。
- 默认只读采集、探测、读文件与只读模板不需要额外开关。
- 五道写权限校验会话级别、--allow-write、meta.writes、backup-write 模式、备份回执。
- 备份与回滚写前做快照,写操作与快照都记录,恢复按步骤进行。
- 审计与证据每次探针动作与文件访问进入证据库,带 SHA-256 manifest。
- 急停
inkblade abort停止整个工作区;agent stop停止单次运行。
| 控制 | 保证什么 |
|---|---|
| 授权文件 | 每次运行都带签署授权文件的哈希,并写入证据。 |
| 范围与级别 | 越界或超出级别的动作会在执行前被拒绝。 |
| 备份回执 | 没有可恢复快照就没有写操作。 |
| 证据 manifest | 每条发现都能落到 task、step、artifact、probe 或 manifest 哈希。 |
仅限授权使用。没有书面授权就不做。对不归你所有的系统动手,在多数司法辖区属于违法。没有签署记录,软件会拒绝。
安全问题走 SECURITY.md 的私密渠道;公开 issue 不要贴利用细节。
常见问题
接入、探针、检测、授权、交付
探针怎么进 Pod?
从你已有的立足点投放。默认是授权 RCE:二进制 base64 分块送进 Pod,落到 memfd;没有 memfd 就落到 /dev/shm 或 /tmp,chmod 700 后启动。另外三条路是 ServiceAccount token、共享卷与 EphemeralContainer 清单:probe deploy --via sa-token 生成临时 kubeconfig 后 kubectl cp + exec;共享卷把二进制放进目标容器挂载的卷;probe deploy --via manifest 生成 Pod、Job 或 EphemeralContainer 清单。kubectl 只在批量 bootstrap 时需要。探针启动后执行 inkblade-probe reverse --host <controller> --port <port> 回连控制端,之后的命令都走这条通道。
探针是不是后门?
不是。它不持久化、不改启动项、不改镜像、不回连固定 C2。它只在授权会话内运行,执行已注册模板,默认只读,写操作过校验,退出时清理。
写操作怎么保证安全?
五道校验:授权覆盖目标、级别与时间窗;--allow-write;meta.writes 与写步骤;backup-write 模式;备份回执。写后回读哈希,失败回滚。
能离线吗?
手动执行、模板、探针和报告可以离线;`agent run` 的 LLM 规划需要配置 LLM 端点(本地模型或内网 API),没有配置时就用手动或规则模式。
能商用或 fork 吗?
Apache-2.0 允许商用与 fork。保留 LICENSE 与 NOTICE,不要用 InkBlade 商标命名 fork。
更多:FAQ.md
许可
Apache-2.0、仓库政策
Apache-2.0。允许商用、fork 与嵌入到其他产品中;保留 LICENSE 与 NOTICE。
| 项目 | 说明 |
|---|---|
| 许可证 | Apache-2.0。保留 LICENSE 与 NOTICE。 |
| 商标 | fork 不要使用 InkBlade 名称。 |
| 政策 | SECURITY.md、CONTRIBUTING.md、CODE_OF_CONDUCT.md。 |
文档索引:DOC-INDEX.md