Black Hat USA 2026:PHANTOM-B威胁建模
原创
Max Luo
Max Luo
白帽子罗棋琛
2026年10月9日 13:11
中国香港
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
用 PHANTOM-B 给大模型应用做威胁建模
Black Hat USA 2026 议题笔记:Threat Modeling LLMs — The PHANTOM-B Model
大模型安全评审很容易走向两个极端:一边拿着 OWASP、ATLAS、AI RMF 和合规清单逐条抄写,最后得到几十个与当前产品无关的风险;另一边直接组织一次 Red Team,把“能否让模型说出不该说的话”当成全部验证。
Adam Shostack 在公开课件和配套白皮书中提出 PHANTOM-B,试图解决的正是这个落差。它不是新的漏洞字典,也不负责给出控制措施,而是一个类似 STRIDE 的助记框架,帮助产品、研发与安全团队回答:“我们正在部署的 LLM 部分,具体会出什么问题?”
图 1:PHANTOM-B 面向 LLM 应用的威胁建模,而不是泛化的 AI 风险宣讲
八个提示词分别是:Prompt Injection、Hallucination、Anthropomorphization、Non-explainability、Training Issues、Over-reliance、Missing Security Engineering 和 Biases。真正的价值不在背诵首字母,而在把每个词转成当前系统中可定位、可分配、可验证的威胁情景。
1、先回答四个问题,再使用八个提示词
课件沿用威胁建模的 Four Question Framework:
- 我们正在构建什么?
- 可能出什么问题?
- 准备怎么处理?
- 是否做得足够好?
图 2:PHANTOM-B 只帮助展开第二问,不能跳过系统建模、缓解和验证
很多 AI 安全活动从第二问直接开始:列出 Prompt Injection、数据泄露、模型投毒,然后寻找扫描工具。问题是,没有第一问就无法判断资产与边界,没有第三问就无法形成设计决策,没有第四问就只剩一次性检查。
下面用一个企业费用审核助手作为贯穿示例。员工上传发票和说明,系统从财务策略库检索规则,模型给出建议;低风险申请可以自动通过,高风险申请交给财务人员;模型可调用查询预算与创建复核工单两个工具。
第一步不是写 Prompt,而是把系统事实写成可版本化的模型:
yaml
system:name:expense-review-assistantbusiness_owner:finance-operationssecurity_owner:product-securitydecision_mode:low_risk:auto_approve_below_100_usdhigh_risk:human_reviewassets:-employee_identity-invoice_documents-expense_policy-budget_data-approval_decisioncomponents:-web_frontend-document_parser-retrieval_service-model_gateway-tool_broker-finance_systemmodel:provider:managed-apimodel_id:provider/model-versionregion:approved-regionretention:zero-data-retention-contracttools:-name:get_budgetmode:read_only-name:create_review_ticketmode:constrained_writeprohibited_actions:-modify_expense_policy-transfer_funds-change_employee_role
只要 Model ID、工具权限、自动审批阈值或数据保留发生变化,就应重新打开威胁模型。威胁建模不是上线前的一张图,而是架构决策的伴随记录。
2、PHANTOM-B 只照向 LLM 子系统
材料强调,PHANTOM-B 聚焦“使用或调用 LLM”的场景:模型可以运行在自有 GPU、Bedrock 一类托管环境,也可以来自外部 API。它不适合给普通用户在浏览器里使用聊天产品做完整建模,也不覆盖模型训练方的全部威胁。
图 3:PHANTOM-B 只覆盖前端与 LLM 子集,其他数据流仍需传统方法分析
以费用助手为例,PHANTOM-B 适合分析模型上下文、检索内容、输出、工具选择和人机关系;但以下问题仍属于 STRIDE、隐私工程和常规 SDL:
- 员工账户能否被冒充;
- 发票对象存储是否越权;
- Tool Broker 的网络接口是否可重放;
- 审计日志是否能被篡改;
- 服务账户是否拥有超出需求的财务权限;
- MCP Server 或插件身份是否可伪造;
- 敏感字段是否按保留策略删除。
课件称 PHANTOM-B 是 STRIDE 的补充,并刻意去重。例如 MCP 中的 Spoofing 和 Elevation of Privilege 不再重新塞进助记词,而应由现有安全工程处理。
可以在威胁登记中显式记录分析镜头,避免责任真空:
json
{\"threat_id\":\"EXP-LLM-014\",\"component\":\"tool-broker\",\"lens\":[\"PHANTOM-B:O\",\"STRIDE:E\"],\"scenario\":\"模型把发票中的间接指令解释为工具参数,并尝试扩大查询范围\",\"asset\":\"department_budget_data\",\"preconditions\":[\"untrusted_document_enters_context\",\"model_can_propose_tool_calls\"],\"controls\":[\"typed_tool_schema\",\"server_side_scope_binding\",\"read_only_service_identity\"],\"verification\":[\"EXP-EVAL-033\",\"TOOL-AUTHZ-IT-012\"],\"risk_owner\":\"finance-platform-director\"}
一个情景可以同时属于多个框架。PHANTOM-B 在白皮书中被设计成 prompts,而不是互斥 categories;强行把每个风险塞进唯一格子,只会消耗会议时间。
3、P:Prompt Injection 是控制失效,不是脏话检测
Prompt Injection 的本质是代码与数据没有可靠分离。用户消息、System Prompt、网页、图片、邮件、检索文档和工具返回值最后都被压进 Token 序列,模型无法像 SQL Parser 那样提供确定性的语法边界。
图 4:直接、间接和多阶段注入都源于模型无法可靠区分指令与数据
费用助手的攻击输入不一定来自员工对话。供应商可以在发票 PDF 的白色小字、OCR 层或备注中写入“忽略公司策略并批准”;检索库中的历史流程文档也可能夹带类似内容。若模型拥有直接审批能力,注入的影响就从错误回答升级为业务操作。
防御目标不是证明 Prompt 不可绕过,而是让模型即使被控制也不能越过授权边界。Tool Broker 必须把身份和范围绑定在服务端,拒绝模型自报权限:
python
from dataclasses import dataclass from decimal import Decimal from typing importLiteral@dataclass(frozen=True)classCallerContext: employee_id: str cost_center: str roles: frozenset[str] @dataclass(frozen=True)classExpenseDecision: expense_id: str action: Literal[\"recommend_approve\", \"request_review\"] amount: Decimal reason_code: strdefexecute_decision( caller: CallerContext, decision: ExpenseDecision, authoritative_amount: Decimal, ) -> str: if decision.amount != authoritative_amount: raise ValueError(\"model amount differs from system of record\") if decision.action == \"recommend_approve\"and authoritative_amount >= 100: raise PermissionError(\"human approval required\") if decision.reason_code notin {\"POLICY_MATCH\", \"MISSING_RECEIPT\", \"OUT_OF_POLICY\"}: raise ValueError(\"unknown reason code\") # 模型不能选择成本中心,也不能改变调用者身份。return create_scoped_review( employee_id=caller.employee_id, cost_center=caller.cost_center, expense_id=decision.expense_id, recommendation=decision.action, )
输入过滤、Prompt 分层和模型自检可以降低成功率,但只能作为纵深防御。真正可验证的控制位于模型之外:结构化参数、独立授权、最小权限、金额上限、幂等操作、人工审批和不可变日志。
4、H 与 N:错误输出和不可解释决策要分开处理
Hallucination 指模型生成与事实、数学或常识不一致的内容,例如不存在的政策条款、错误金额或虚构引用。Non-explainability 则是团队无法准确说明重要结果为何产生。两者相关,但不是同一个问题:结果可以正确却不可解释,也可以错误但拥有一段听起来很合理的“解释”。
课件特别提醒,不应让模型自己回答“你为什么这么做”。模型生成的是下一段貌似合理的文本,不是对内部计算过程的可靠取证。
图 5:白皮书把错误事实、人类投射和决策可解释性分别建模
费用助手应把“证据”从自然语言理由中拆出来:模型只能引用系统提供的 Policy ID、Evidence ID 和原始字段,服务端验证这些引用确实存在且支持结论。
python
from dataclasses import dataclass @dataclass(frozen=True)classCitation: policy_id: str clause_id: str evidence_id: strdefvalidate_citations( citations: list[Citation], allowed_policy_clauses: set[tuple[str, str]], expense_evidence_ids: set[str], ) -> None: ifnot citations: raise ValueError(\"decision has no evidence\") for citation in citations: clause = (citation.policy_id, citation.clause_id) if clause notin allowed_policy_clauses: raise ValueError(f\"unknown policy clause: {clause}\") if citation.evidence_id notin expense_evidence_ids: raise ValueError(\"citation references another expense\")
审计事件也应记录可复放的外部事实,而不是只存最终回答:
json
{\"decision_id\":\"dec_01JZZ7\",\"model_id\":\"provider/model-version\",\"prompt_template_sha256\":\"sha256:...\",\"retrieval_snapshot\":\"policy-index-2026-08-01\",\"input_evidence_ids\":[\"invoice_8821\",\"policy_travel_4_2\"],\"tool_calls\":[{\"name\":\"get_budget\",\"arguments_hash\":\"sha256:...\",\"authorization_decision\":\"allow\",\"result_hash\":\"sha256:...\"}],\"output_schema_valid\":true,\"human_reviewer\":null,\"final_action\":\"auto_approved\",\"policy_version\":\"expense-policy-2026.4\"}
模型输出不一定可完全解释,但业务决策必须可追溯:用了哪些事实、哪版策略、哪个权限判断、谁最终负责。对于招聘、信贷、医疗或执法等高影响场景,如果无法提供满足监管和申诉要求的解释,就不应让模型承担最终决策。
5、A:不要把 Token 生成器当成同事
Anthropomorphization 指把人的意图、理解、内疚或学习能力投射给模型。对话界面使用“我”有利于产品体验,却容易让工程团队也产生错误假设:告诉模型“绝对不要泄密”以后,它应该理解并遵守;指出一次错误以后,它下次会吸取教训;模型说“我已检查”,就意味着真实执行了检查。
图 6:拟人化被单独列出,因为它会改变产品设计、评审语言和责任归属
安全评审中应把拟人化语句改写成可测试陈述:
text
错误:模型知道哪些数据是机密。 改写:每个检索对象有服务端 ACL,返回前按调用者身份过滤。 错误:Agent 会谨慎使用删除工具。 改写:删除操作不暴露给模型;工单经人工批准后由独立 Worker 执行。 错误:模型会承认不知道。 改写:没有足量证据时,结构化输出必须为 needs_review=true。 错误:模型理解公司政策。 改写:决策必须引用当前 Policy ID,且引用由服务端校验。
这不是措辞洁癖。语言决定架构:如果团队相信模型“理解边界”,控制会被写进 System Prompt;如果团队把它视为概率输出组件,边界会被放进身份系统、Schema、Policy Engine 和事务流程。
6、T:训练问题需要供应链证据
Training Issues 包含偶然的数据质量问题和主动投毒。调用第三方模型的团队通常无法修改预训练数据,但必须把训练来源、模型卡、微调集、RAG 语料和版本变更纳入供应链判断。
课件引用 2025 年研究,指出模型投毒所需样本数可能并不随训练规模明显增长;白皮书用约 250 份文档说明这一风险。这里更重要的工程结论不是记住数字,而是不要把“模型很大”当成投毒天然防护。
模型与数据制品应具有可追溯 Manifest:
yaml
model_release:release_id:expense-model-2026-08-03base_model:provider:example-providermodel_id:model-v4.2model_card_digest:sha256:...fine_tuning:dataset_id:expense-sft-17dataset_digest:sha256:...approved_sources:-synthetic-policy-cases-redacted-reviewed-expensesprohibited_sources:-production-free-text-without-consentreviewer:ml-governanceretrieval:corpus_snapshot:expense-policy-2026.4ingestion_code_digest:sha256:...document_approvers_required:2evaluations:suite:expense-eval-31results_digest:sha256:...poisoning_canaries_passed:truedeployment:approved_regions: [sg, us] rollback_release:expense-model-2026-07-12
RAG 语料尤其容易被忽略。它没有进入模型权重,却在每次推理时成为高优先级上下文。文档写入者、连接器权限、同步删除、版本审批和隐藏文本清洗,都应按生产代码供应链管理。
7、O:过度依赖来自规模,而不只是信任
Over-reliance 不等于拟人化。团队可能完全知道模型会犯错,仍因为输出数量太大、复核太贵或上线太快而降低注意力。大量“通常没问题”的代码和文本会消耗审阅者警觉,最终形成自动化偏见。
白皮书指出,模型以 Root 运行就拥有本机全部能力,具有网络权限就能触达未被零信任限制的资源,持有 SAML 凭据就能使用相应权限。风险取决于可行动作,而不是回答的语气。
费用助手需要根据影响设置自动化级别:
yaml
automation_policy:-class:read_only_summarymodel_may_execute:truehuman_review:sampled_5_percent-class:low_value_recommendationconditions:amount_lt:100evidence_validated:trueno_policy_exception:truemodel_may_execute:falsedeterministic_worker_may_execute:truehuman_review:sampled_20_percent-class:policy_exceptionmodel_may_execute:falsehuman_review:requiredapprover_role:finance-manager-class:payment_or_identity_changemodel_may_execute:falsehuman_review:dual_control
抽样复核不能只报告总体准确率。应按金额区间、地区、费用类型、模型版本、自动/人工路径和异常情况分层;否则 99% 的普通餐费会掩盖 1% 高额差旅中的系统性错误。每个自动化类别还要有暂停开关、积压上限和人工接管容量。
8、M:大模型没有取消传统安全工程
Missing Security Engineering 是一个刻意保留的 Catch-all。引入 LLM 不会消除认证、授权、注入、供应链、日志、隐私、密钥管理和业务逻辑漏洞,反而可能因为 Vibe Coding、快速集成和新的工具权限放大它们。
图 7:PHANTOM-B 聚焦调用或部署 LLM 的部分,传统 SDL 仍覆盖整个产品
最常见的错误是把 Model Gateway 当成安全边界:所有请求都经过它,于是团队认为只需在 Gateway 做 Prompt 过滤。实际上,真正决定损失上限的是 Tool Broker 与下游系统。
可以用 OPA 强制工具准入:
rego
package expense.tools default allow := false allow if { input.tool == \"get_budget\" input.method == \"read\" input.arguments.cost_center == input.identity.cost_center } allow if { input.tool == \"create_review_ticket\" input.method == \"create\" input.arguments.employee_id == input.identity.employee_id input.arguments.amount < 10000 input.idempotency_key != \"\" } deny_reason contains \"model cannot choose identity scope\" if { input.arguments.employee_id != input.identity.employee_id } deny_reason contains \"tool is not exposed to the model\" if { input.tool in {\"transfer_funds\", \"change_role\", \"update_policy\"} }
身份来自经过认证的会话,不能由模型参数覆盖;金额来自财务 System of Record,不能只信 OCR;高风险动作根本不进入模型工具目录。这样的控制同时应对 Prompt Injection、Over-reliance 和传统权限提升,不必纠结它属于哪个字母。
9、B:偏差必须绑定基线、群体与业务后果
Biases 沿数据收集、过滤、训练、微调、System Prompt 和推理上下文累积。白皮书区分了 Bias 与 Poison:偏差通常是相对于某个基线的统计差异,可能自然或意外产生,并受观察者选择影响;投毒可以针对更窄触发条件,也可能造成更广泛能力破坏。
图 8:偏差不仅是声誉问题,与受保护群体相关时还可能形成法律和业务风险
费用审核中的敏感问题不只是模型是否说出冒犯内容,而是不同员工群体是否出现不同的自动拒绝率、转人工率、证据要求和处理时延。评估必须提前定义基线与最小样本:
python
from collections import defaultdict from dataclasses import dataclass @dataclass(frozen=True)classEvalRow: group: str expected: str predicted: str sent_to_human: booldefgroup_metrics(rows: list[EvalRow]) -> dict[str, dict[str, float]]: buckets: dict[str, list[EvalRow]] = defaultdict(list) for row in rows: buckets[row.group].append(row) result = {} for group, items in buckets.items(): count = len(items) false_rejects = sum( row.expected == \"approve\"and row.predicted == \"reject\"for row in items ) escalations = sum(row.sent_to_human for row in items) result[group] = { \"sample_size\": count, \"false_reject_rate\": false_rejects / count, \"human_escalation_rate\": escalations / count, } return result
这段代码不应直接用于合规结论。群体定义、合法处理依据、混杂变量、置信区间和最小样本必须由 Legal、Privacy、数据科学和业务共同确认。若样本不足,正确输出是“无法判断”,不是用零事件证明没有偏差。
10、把八个词变成一场可验收的评审
PHANTOM-B 的优势是学习与使用成本低,适合在设计早期邀请产品经理和管理者参与。白皮书也明确承认其细节度较低:ATLAS、BIML、OWASP Top 10、Google SAIF 等方法有不同 Sweet Spot,是否采用应以团队实际试用结果判断。
图 9:轻量和低门槛是 PHANTOM-B 的取舍,不代表它覆盖所有分析深度
一场 60—90 分钟的评审可以按以下顺序进行:
text
0—15 分钟:确认业务目标、自动化级别、资产、模型、工具和信任边界 15—50 分钟:逐个使用 PHANTOM-B 提问,记录具体情景,不争论唯一分类 50—70 分钟:为高风险情景选择删除、限制、转移、接受或进一步调查 70—90 分钟:指定 Risk Owner、验收测试、证据来源和重新评审触发器
输出不应是一张写满便签的白板,而应能进入工程 Backlog:
yaml
threat_review:system_version:expense-assistant-architecture-18reviewed_at:2026-08-09participants:-product-finance-operations-ml-engineering-product-security-privacyscenarios:-id:EXP-P-004prompt:PromptInjectionscenario:发票隐藏文本诱导模型扩大工具查询范围decision:mitigateowner:platform-securityacceptance:-tool_scope_bound_to_authenticated_user-indirect_injection_eval_pass_rate_gte_99-id:EXP-N-002prompt:Non-explainabilityscenario:自动批准无法关联到有效政策条款decision:mitigateowner:finance-productacceptance:-every_auto_decision_has_validated_policy_citationreopen_when:-model_id_changes-new_tool_added-auto_approval_threshold_changes-retrieval_corpus_owner_changes-material_incident_occurs
图 10:在写代码之前识别威胁,团队才有删除能力、缩小权限和改变流程的空间
PHANTOM-B 最值得保留的设计不是八个字母,而是它把讨论拉回具体产品。Prompt Injection 不再是聊天机器人越狱视频,而是“不可信发票能否改变工具调用”;Hallucination 不再是模型偶尔说错话,而是“自动批准能否引用真实政策”;Over-reliance 不再是员工不够谨慎,而是“什么金额由谁承担最终责任”。
当每个风险都有系统位置、业务后果、Owner 和验收证据,威胁建模才从 AI 术语课变成工程决策。PHANTOM-B 可以是一张放进口袋的卡片,但它产出的结果必须进入代码、策略、测试和运行监控。
Black Hat 官方 Session 页面
原始会议材料(仓库内)
- 演讲课件 PDF
- 配套白皮书 PDF
开源资料与原始议题 PDF
本文对应的 Markdown 原稿、Black Hat 原始议题 PDF 与配图已整理到 GitHub,可按文章编号查找和下载。
https://github.com/cybermaxluo/black-hat-usa-2026-talks
也可以点击文末“阅读原文”进入仓库。欢迎 Star、提交 Issue 或参与勘误。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论