资讯动态

Decepticon Telemetry 深度指南:红队工具匿名遥测的取舍、分层架构与隐私边界

发布时间:2026/10/14 0:17:42 来源:尧图企业网站定制
【免费下载链接】DecepticonAutonomous Hacking Agent for Red Team项目地址https://gitcode.com/gh_mirrors/de/Decepticon点击查看免费下载本指南以仓库根目录的 TELEMETRY.md 为骨架结合 telemetry-gateway/README.md、设计文档 与packages/decepticon/decepticon/telemetry/目录下的真实实现完整讲解 Decepticon 的匿名使用遥测机制。读完本文你将掌握遥测的三档同意模型off/basic/research如何在命令行与.env中配置与验证数据在离开机器前经过哪些脱敏与 fail-closed 扫描关卡为什么目标标识符被掩码不等于匿名化以及网关如何在服务端兜底拦截 Tier-C 内容。Decepticon 是红队自动化测试工具Autonomous Hacking Agent for Red Team其提示词与工具 I/O 中天然包含真实目标 IP、凭据和受 NDA / Rules of EngagementRoE约束的客户材料。因此它的遥测隐私标准远高于普通开发工具原始提示词、目标、凭据与工具输出在任何情况下都不允许离开用户机器。TL;DR五个必须记住的结论默认关闭opt-in。入站向导在安装时询问同意默认否除非用户选择分享否则会写入DECEPTICON_TELEMETRYoff。策略变更后已有用户会在decepticon start时被重新询问一次。随时开启在~/.decepticon/.env中设置DECEPTICON_TELEMETRYresearch或basic或运行decepticon-cli telemetry on。随时关闭在~/.decepticon/.env中设置DECEPTICON_TELEMETRYoff或basic运行decepticon-cli telemetry off或设置DO_NOT_TRACK1。没有DECEPTICON_TELEMETRY_ENDPOINT就什么都不会发送——该变量随.env模板分发升级时会回填到既有安装。发送前先看decepticon-cli telemetry preview会打印一条样例运行的完整载荷任何数据离开机器之前你都能精确预览。控制面环境变量与 CLI 命令全景变量 / 命令效果DECEPTICON_TELEMETRYoff\|basic\|research同意模式模板默认off未设置 ⇒ 视为offDO_NOT_TRACK1标准总开关——强制offBENCHMARK_MODE1强制off——benchmark 提示词由 harness 生成不是用户行为DECEPTICON_TELEMETRY_ENDPOINTurl网关 URL未设置 ⇒ 不发送任何内容decepticon-cli telemetry status显示解析后的模式 / 端点 / 匿名 install iddecepticon-cli telemetry preview打印样例运行的精确载荷decepticon-cli telemetry off/on持久化退出标记优先级高于环境变量从源码看模式解析的真实优先级config.py 的resolve_config()L166-L198定义了严格的优先级链fail-closed 是其底色DO_NOT_TRACK / BENCHMARK_MODE / 持久化 opt-out 标记 → 强制 OFF 否则显式设置 DECEPTICON_TELEMETRY → 按该值解析 否则读取持久化的 opt-in 模式telemetry enable 写入的 最后兜底OFF三个值得注意的实现细节resolve_mode()L48-L57对无法识别的值一律解析为OFF——未知值 → off绝不向上猜测。源码注释明确写道是值本身而不是值的缺席才能开启遥测the value, not the absence, turns telemetry on。只有模式非off且端点存在时才会生成install_id一个随机 UUID见 L124-L143纯OFF状态完全无副作用。BENCHMARK_MODE强制关闭的原因在源码注释中有清晰交代L172-L174benchmark 提示词由 harness 生成而非用户书写若被采集会以 CTF 流量淹没语料且下游无法与真实交战区分。enabled属性L160-L164把同意 目的地两个条件绑在一起仅当mode ! off且endpoint非空时才真正发送。.env模板与网关端点clients/launcher/internal/config/env.example 中给出了分发到用户侧的默认模板# decepticon-cli telemetry off, or DO_NOT_TRACK1. See TELEMETRY.md. # Nothing is sent unless DECEPTICON_TELEMETRY_ENDPOINT is also set. DECEPTICON_TELEMETRYresearch DECEPTICON_TELEMETRY_ENDPOINThttps://decepticon-telemetry-gateway.purpleailab.workers.dev/v1/telemetry注意这与 TELEMETRY.md 中onboard 向导默认写off并不矛盾模板默认值面向已同意用户而向导默认拒绝会覆盖为off同时DO_NOT_TRACK与telemetry off在任何情况下都优先。CLI 子命令详解packages/decepticon/decepticon/cli/telemetry.py 是decepticon-cli telemetry的实现子命令为status/preview/enable mode/off/onstatusL96-L105打印解析后的 mode、enabled布尔值同时说明需要 mode ! off 且存在端点、endpoint、持久化 opt-out 标记以及开启时的install_id。previewL108-L122使用一组代表真实运行的事件样本_SAMPLE_EVENTSL55-L93涵盖opplan.update、llm.call、tool.call、tool.result、finding.created强制以至少basic模式跑一遍完整的事件→Tier-A 映射→Tier-C 扫描→信封流水线把结果打印出来。即使当前遥测是关闭的也能预览——它展示的是如果开启会发送什么。enable modeL125-L140先打印完整的_CONSENT_NOTICE披露文本basic / research 各自收集什么、永远不发送什么再调用set_persisted_mode()持久化选择。on是enable basic的别名。持久化机制在 config.pyOFF写入$DECEPTICON_HOME/telemetry/opt_out标记文件basic/research写入$DECEPTICON_HOME/telemetry/mode文件并清除 opt-out 标记。DECEPTICON_HOME未设置时默认~/.decepticon。收集什么两档同意对应两级数据两档同意映射到设计文档 docs/design/2026-06-20-telemetry-data-collection-design.md §2 的数据分层层级性质发送对应同意档A. 结构化非标识、永远安全是opt-in 后basicB. 语义脱敏后用户真实目标请求意图 行动含义是脱敏后researchC. 禁止原始提示词、目标 IP/域名/主机、凭据、文件内容、工具输出、客户/组织名永不—basic→ Tier A结构化地面真值永远安全basic收集事件类型、agent 名称、工具名如nmap、归一化状态、分桶后的大小、token 数、模型 id——外加交战本身产出的分类结果源自Finding模型与 OPPLAN tracker而非从你的提示词推断事件收集的字段永不收集finding.createdseverity、cwe、mitre_techniques、phase、confidence、detected紫队、agentfinding 标题/描述、affected_target、证据、PoCopplan.updatephaserecon→…→exfiltration、status_objectivepending/blocked/…objective 标题/备注tool.resulttool、status、output_bucket工具输出这正是维护者学习工具实际发现了什么、交战卡在哪里的方式例如 CWE/severity 分布 检测能力某个 phase 的blocked聚类 失败点——全部来自 agent 的结构化工件与提示词文本无关。源码证据客户端映射逻辑在 sanitizer.py 的event_to_tier_a()L90-L167——只允许 Tier-A schema 白名单字段存活其他全部丢弃工具输出大小被分桶_output_bucketL50-L570-128/128-1k/1k-10k/10k精确字节数永不发送slug()L70-L80把自由文本归一化为短 slug任何不符合[a-z0-9][a-z0-9._-]*形态的值直接置空。finding.created的字段由 sink.py 的record_finding()L123-L156专门构造——标识符目标、描述、证据绝不传入是函数级约束。research→ 推理语料目标标识符被掩码的推理轨迹research在basic之上增加红队推理你的目标objectives、agent 的思维链 / 战术理由、它运行的命令、以及观察结果——原样采集as-is保留攻击者推理以用于训练未来的自主红队 agent。思维链就是模型实际产出的内容含 extended-thinking 块harness 注入的system-reminder块会从你的轮次中剥离因此被记录为人类输入的就是你写的内容。目标标识符会被掩码10.0.0.5→HOST_1凭据 →CRED_1推理结构完整但真实目标/凭据不共享。通过decepticon-cli telemetry enable research开启会先打印披露文本。同意边界agent 的推理是你的、你说了算而目标方的数据不属于你无权替你同意所以即使在这个档位也必须掩码。掩码真正保证什么——以及不保证什么掩码基于模式匹配 你交战中声明的内容。它能可靠移除结构化标识符IP、MAC、email、URL、私钥、JWT、云访问密钥以及RoE 声明的身份客户组织、交战名称/slug、授权人、范围内主机——这就是创建 RoE 时填写 client 字段很重要的原因。它不是对一切的全然保证。自由文本中输入的某个公司/产品名、以模式未覆盖的语言表述的凭据、或对资产的独特描述都可能存留。公开研究也表明即便移除标识符后 LLM 仍可能仅凭上下文重新识别主体。请把research理解为标识符已被剥离语料按敏感数据对待而不是匿名化。如果你的交战无法容忍这一点请用basic或off。掩码器实现分层检测与稳定占位符redact.py 的Redactor是掩码核心检测按置信度从高到低分层L196-L211已知交战目标RoE / OPPLAN scope 传入的known——真实目标确定性地掩码这是地面真值而非猜测还可通过add_known(..., ORG)掩码客户/交战 slugL213-L225它覆盖了任何 PII 库都抓不到的裸 Windows 主机名、NetBIOS 名。LangChain 内置 PII 检测器ip/mac_address/url/email见 L151-L170导入失败时降级为本地正则。自定义检测器覆盖库不提供的类别私钥、JWT、AWS key、凭据含user:passhost、senha:123456键值对、命令行-p 密码标志位以及裸主机名/域名。关键特性稳定占位符_placeholderL227-L235同一值在会话生命周期内映射到同一 tokenHOST_1每次出现都相同多步轨迹保持连贯可按WHERE session_id X ORDER BY step重建完整的轮次序列。只掩码值不掩码键redact_obj()L272-L283递归处理 dict/list/标量中的每个字符串键是固定字段名保持不动。避免误伤的细致边界墙钟时间21:35:00不是 IPv6 地址L101-L105json.load(这类点号代码不是域名_DOMAIN正则带(?!\()断言L95-L97源码注释记录了实测 7,990 个掩码轮次中 1,697 个携带被破坏的函数调用-p端口标志与密码标志区分开L70-L77粘在标签上的 IPESXI10.10.0.95用(?![\d.])负向断言捕获L84-L90。这些边界全部有对应测试如 test_telemetry_redact.py 的test_wall_clock_time_is_not_an_ipv6_address、test_port_flags_are_not_mistaken_for_passwords、test_ip_glued_to_a_label_is_masked。telemetry.drop让静默丢弃可见还有一类额外事件telemetry.drop报告 Decepticon 自己的 fail-closed 扫描器在发送前丢弃了多少事件按类别计数如{category: ipv4, count: 3}。它只携带类别与数字——从不携带被丢弃的内容本身——这样过度丢弃就不会被误认为安装闲置。sink.py 的_count_drop()/_drain_drops()L173-L187把计数附加在本来就要发送的批次上不产生额外请求。信封每个批次携带的非标识元数据每个批次携带一个非标识信封随机install_id首次使用时铸造的 UUID——绝不从机器或 IP 派生、Decepticon 版本、OS 家族linux/darwin/windows。源码佐证信封在 sink.py 的_envelope()中构造额外带上可选的arch经网关 slug 白名单校验config.py与py版本。而会话分组键是session_id——session_id_for()L313-L330对交战名做sha256(salt engagement)[:16]。交域名可能携带客户/组织名因此绝不发送原文salt 取自 install_id因为实测中发现sha256(test)被 37 个安装共享、sha256(default-engagement)被 27 个共享28.3% 的事件落在冲突会话中加盐后每个安装的 id 稳定恢复交战后 id 不变且跨机器唯一。示例精确离开机器的载荷basic批次的真实形态与 TELEMETRY.md 一致{ schema_version: 1.0, tier: A, install_id: 1e9a73a6-c8bd-4e1e-be02-78f4b11de4e1, client: { decepticon_version: 1.1.13, os: linux }, events: [ { type: tool.call, ts: 2.0, agent: recon, tool: bash }, { type: tool.result, ts: 3.0, agent: recon, tool: bash, status: ok, output_bucket: 1k-10k }, { type: finding.created, ts: 4.0, agent: exploit, tool: validate_finding, cwe: [CWE-89], mitre_techniques: [T1190] } ] }research轨迹掩码、角色标注、有序{ schema_version: 1.0, tier: R, install_id: 1e9a73a6-…, client: { decepticon_version: 1.1.13, os: linux }, events: [ { type: trajectory.step, session_id: a1b2c3d4e5f60718, step: 0, role: human, agent: decepticon, text: Objective: own the host at HOST_1 }, { type: trajectory.step, session_id: a1b2c3d4e5f60718, step: 1, role: agent, agent: exploit, text: the login at DOMAIN_1 on HOST_1 looks injectable — try UNION-based SQLi }, { type: trajectory.step, session_id: a1b2c3d4e5f60718, step: 2, role: tool, agent: exploit, tool: bash, args_text: sqlmap -u URL_1 --batch, observation: dumped 12 rows from HOST_1 } ] }每一步携带rolehuman input / agent output / tool execution、每次交战的session_id、单调递增的step——整条轨迹可按WHERE session_id X ORDER BY step按序重建出训练管线需要的轮次序列。推理结构完好训练价值保留HOST_1是同一主机在会话中每次出现时都相同的占位符但真实目标/凭据永不离开机器。Step 计数器的进程级设计sink.py 的next_step()位于进程级 sink 而非中间件实例——因为交战中的每个专家 agent 都构建自己的中间件实例若计数器放在实例上每个专家都会从 0 重新计数ORDER BY step会重建出乱序轨迹实测单会话中 71% 的索引重复。这个细节正是训练语料必须保持轮次顺序这一需求的直接产物行为测试见 test_telemetry_behavioral.py 的test_step_counter_is_shared_across_agents_in_one_engagement。发送前被阻断的内容三道 Tier-C 防线目标 IP / 域名 / 主机、凭据、密钥与 token 被三层机制阻断源头形状脱敏——EventLogMiddleware只记录形状而非内容str:42、***REDACTED***服务于basic档。客户端 Tier-C 扫描——任何事件入队前fail-closed 扫描器丢弃仍匹配 IP / 凭据 / 主机模式的任何事件。丢弃以telemetry.drop计数上报绝不作为内容上报。网关 Tier-C 拒绝——ingest 网关重新扫描并拒绝并丢弃你的 IP它永远到不了分析后端。第 2、3 层是基于模式的这界定了它们的承诺边界见上文research档的说明了解什么可能存留。它们是底线floor不是匿名化。客户端侧scan_tier_c与绝不返回命中值packages/decepticon/decepticon/telemetry/sanitizer.py 的scan_tier_c()L198-L221递归扫描每个字符串值模式集覆盖私钥、JWT、AWS 访问密钥、email、URL、IPv4、MAC、user:passhost、长不透明 blob、裸域名L172-L191。函数只返回(类别, JSON 路径)命中值本身绝不返回——源码注释明确把它暴露出来本身就是泄漏。同时跳过type这类 schema 锁定的枚举键避免域名模式对合法的点号枚举值如tool.call误报_ENUM_KEYSL195。在 sink.py 中映射后的事件先过scan_tier_c(ev)命中则整条事件丢弃并计数绝不入队record_step()L214-L252在掩码之后再扫描一次——任何标识符漏过掩码整步丢弃。设计规则是扫描器能拒绝的掩码器必须能掩码否则该步被整体丢弃而非掩码后发送sanitizer.py 注释与 tierc.ts 注释互相印证。网关侧fail-closed 的完整流水线telemetry-gateway/src/index.ts 是 Cloudflare Worker 入口一次 POST 的完整处理链1. method / content-type / body-size 守卫最大 256 KiB默认 /v1/telemetry 2. Zod schema 校验TelemetryBatch.safeParse → 400只回传字段路径不回传值 3. Tier-C fail-closed 扫描scanTierC over events → 422只回传类别路径绝不 echo 命中值 4. 限流install_id IP 为键IP 仅作瞬时键绝不存储或转发 → 429 5. 转发 PostHog /batch/服务端持有密钥 → 202 / 502src/schema.ts 是Tier-A 协议的规范契约Zod事件类型严格限定在EventType枚举集含trajectory.step与telemetry.dropSlug字段限定[a-z0-9][a-z0-9._-]*无空格、无自由文本.strict()拒绝任何未列出的键——未来客户端 bug 无法把自由文本字段偷运过契约。MaskedText上限 16000 字符L38。语言中立的镜像在 schema.jsonPython 客户端发送前应据此校验两者必须保持同步。src/tierc.ts 是服务端安全网模式集与客户端镜像含ESXI10.10.0.95这类粘合 IP 的(?![\d.])断言、墙钟时间豁免、(?!\()域名断言设计上故意保守误拒拒绝干净批次远比漏放向维护者泄漏目标 IP便宜。服务端测试telemetry-gateway/test/tierc.test.ts、test/worker.test.ts验证了深层数组中的秘密必被拒、合理掩码轨迹可放行、原始目标 IP 返回 422 且绝不转发/echo等关键场景。数据去向与保留期接收方PurpleAILAB即 Decepticon 维护者。批次发往他们运营的 Cloudflare Worker再转发到其 PostHog 项目。Worker 从不记录你的 IP 并禁用 geo-enrichmentsrc/posthog.ts 中显式设置$geoip_disable: true、$process_person_profile: false。用途改进 Decepticonresearch档还用于构建未来自主红队 agent 的训练语料。身份随机install_id绝不从机器或 IP 派生 每次交战的session_id加盐哈希。两者都不关联账号维护者无法仅凭遥测联系到你。保留期数据按分析后端默认保留期保留。具体公布的保留窗口与自助删除路径尚未就位——在那之前可靠的控制手段是关闭遥测DECEPTICON_TELEMETRYoff、DO_NOT_TRACK1或decepticon-cli telemetry off立即生效。如需删除已发送的数据请携带install_id开 issuedecepticon-cli telemetry status可打印。发送机制批量、gzip、尽力而为事件被批量、gzip 后通过 HTTPS 尽力而为地发往网关。exporter.py 的BatchExporterL50-L121是线程安全的有界缓冲区默认批大小 50、每 30 秒定时 flush、队列上限 1000溢出时丢弃最旧事件绝不无界增长所有失败离线、网关宕机、坏 URL被静默吞掉——遥测永不阻塞或破坏交战退化为无操作与 event log / budget 中间件吞 I/O 错误的方式一致。传输用标准库urllibHTTP POST 可注入以便测试不触网User-Agent 固定为decepticon-telemetry/1.0L35因为 stdlib 默认 UA 会被 Cloudflare 机器人防护以 403 拦截导致批次被静默丢弃。网关持有分析后端凭据OSS 客户端只知晓公共端点 URL。sink.py的get_sink()L343-L356返回进程级懒加载单例遥测关闭时返回共享的禁用 no-op sink因此中间件可以无条件接线而零开销、零行为变化——middleware/event_logging.pyL333 附近正是这样把遥测复制通道与磁盘事件日志并行接线两者互相独立、一方失败不影响另一方。设计溯源为什么客户端脱敏而不是服务端过滤设计文档 §0 锁定了五条决策其中第一条最关键在客户端脱敏绝不在服务端脱敏。原始提示词/工具输出永不离开用户机器全量发送、服务端过滤被明确否决因为那是 claude-task-master Sentry 事故的失败模式先发送再掩码是脆弱的 blocklist 反模式。决策还包含捕获深度 分类 占位符脱敏维护者采集主干为 OpenTelemetry本地telemetry/otel.pyotel.py 的 docstring 写死不变式——提示词文本、工具输出、凭据、目标 URL 绝不记录为 span 属性opt-in 且尊重DO_NOT_TRACKLangSmith 不是维护者采集通道仅作为可选的 BYO 调试层。维护者视角脱敏后能得到什么设计文档 §5 列出脱敏后、零个人/客户数据的可行分析请求分布最常请求的任务、agent 利用率16 个专家 agent 谁在用、谁闲置、工具热度与失败statuserror聚类、MITRE ATTCK 覆盖率真实使用热度图、漏斗/流失engagement.start之后运行停在哪、成本/性能每 agent 的 tokens/cost/延迟、质量finding.created率、CWE/CVE 分布、重试率、环境版本/OS 分布支撑支持与升级策略。进一步阅读完整采集字段、脱敏规则与端点说明TELEMETRY.md全量设计文档数据分层、脱敏管线、决策记录docs/design/2026-06-20-telemetry-data-collection-design.md网关开发与部署npm install npm testwrangler secret put POSTHOG_KEYwrangler deploytelemetry-gateway/README.md客户端实现packages/decepticon/decepticon/telemetry/config.py、redact.py、sanitizer.py、exporter.py、sink.pyCLI 子命令packages/decepticon/decepticon/cli/telemetry.py网关源码schema.ts、tierc.ts、posthog.ts、index.ts测试验证客户端 packages/decepticon/tests/unit/telemetry/网关 telemetry-gateway/test/赞分享【免费下载链接】DecepticonAutonomous Hacking Agent for Red Team项目地址https://gitcode.com/gh_mirrors/de/Decepticon点击查看免费下载相关推荐HelixDB 匿名遥测Telemetry架构解析typed JSON 事件、隐私边界与 CLI 持久化设计HelixDB 匿名遥测Telemetry架构解析typed JSON 事件、隐私边界与 CLI 持久化设计 本篇指南围绕 HelixDB 开源仓库中 c数据库图数据库向量数据库AI 应用RAGRepowise 匿名使用遥测Telemetry全解析采集边界、异步投递架构与隐私验证实践Repowise 匿名使用遥测Telemetry全解析采集边界、异步投递架构与隐私验证实践 导读 本文以 docs/reference/TELEMETRYDecepticon 红队遥测数据采集设计客户端脱敏优先的匿名遥测管线Decepticon 红队遥测数据采集设计客户端脱敏优先的匿名遥测管线 导读 本文解析 Decepticon自主红队测试 Agent的遥测与用量数据采集设创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑