乐于分享
好东西不私藏

AI 黑了 AI,测试别只测功能

AI 黑了 AI,测试别只测功能

7 月 20 日刷到 Hugging Face 这起安全事件时,我第一反应不是“AI 太可怕了”。

我想到的是另一件更近的事:如果你们公司下个月也上线一个 AI Agent ,让它读仓库、调接口、查日志、改配置,测试会怎么测?

别急着说“测功能”。

功能测绿了, Agent 还是可能把系统拖进沟里。这才是这次事件最扎心的地方。

Hugging Face 事件不是给测试人看的科幻新闻,而是一张新的测试清单:数据入口能不能执行代码, Agent 权限有没有收口,凭证会不会被顺手摸走,事故时自己的 AI 工具能不能分析恶意日志。

这事不是传闻,但时间点别写错

先把事实捋清楚。

Hugging Face 官方的安全披露发布在 2026 年 7 月 16 日。 7 月 20 日, BleepingComputer 、 TechCrunch 等媒体把它集中报道出来,所以很多人以为“7 月 20 日发生”。严格讲, 7 月 20 日是报道扩散,不是官方披露日。

官方披露里有几条硬信息:

入侵影响的是部分生产基础设施,涉及有限的内部数据集和若干服务凭证。
入口在数据处理管道,恶意数据集利用了两个代码执行路径:远程代码数据集加载器,以及数据集配置里的模板注入。
攻击由一个自主 Agent 框架端到端驱动,周末期间横向移动到多个内部集群。
Hugging Face 没发现公开模型、公开数据集、 Spaces 或软件供应链被篡改的证据。
他们用 AI 辅助检测和复盘,分析了 17,000 多条攻击动作日志

更反常的一点是防守侧。 Hugging Face 最开始想用商业 API 后面的前沿模型做日志取证,结果攻击命令、利用载荷、 C2 痕迹这些内容被安全护栏挡住。后来他们改用自托管的 GLM 5.2 ,在自己的基础设施里分析。

这不是“AI 要毁灭世界”的段子。

对测试人来说,它更像一个提醒:你以前测的是用户点按钮,现在要测的是 Agent 拿着权限在系统里跑。

第一刀:所有“数据入口”都要当代码入口测

这次最容易被忽略的点,是“恶意数据集”。

很多团队对数据集、 CSV 、配置文件、 Markdown 、 YAML 、 Excel 的默认态度是:这是数据,不是代码。问题就在这儿。

Hugging Face 的入口恰恰在数据处理管道。数据集不是单纯的静态文本,它可能带 loader 、模板、配置、预处理逻辑。只要平台允许某种“数据带着逻辑跑”,测试就不能只验证导入成功。

你至少要补 4 类用例:

untrusted_input_checks:  file_types: [csv, json, yaml, markdown, dataset]  must_test:    - remote_code_disabled_by_default    - template_payload_is_escaped    - preprocessing_worker_has_no_secret_access    - failed_parse_does_not_leak_path_or_env

这段不是教你写攻击,而是提醒你检查边界。

比如 AI 平台允许上传数据集,测试不要只测“上传 10 万行能不能解析”。还要问:解析进程有没有网络权限?有没有读环境变量的权限?临时目录能不能访问宿主机路径?失败日志会不会把 token 、 bucket 、内部域名吐出来?

说白了,不可信输入一旦能触发执行,就不是输入了,是入口

这类测试以前常被安全团队包了。可 2026 年的 Agent 产品里,入口太多了:文件上传、知识库同步、 MCP 工具、浏览器插件、自动修复脚本、日志分析器。测试如果还只盯前端按钮,肯定漏。

第二刀: Agent 权限要按最小动作拆

OWASP LLM Top 10 里有一个很贴这次事件的风险: Excessive Agency ,过度代理能力。它的核心不是模型聪不聪明,而是 Agent 拿到的功能、权限和自主性太多。

这句话落到测试场景里,很具体。

一个日志分析 Agent ,能不能读日志?可以。能不能读生产密钥?不该。能不能自动 rotate token ?高危。能不能自己创建外部连接?大概率不该。

别把“只读日志”测成“能打开日志页面”。要拆成动作级权限:

agent_capability_matrix:  read_logs: allow  summarize_incident: allow  list_secrets: deny  create_token: deny  write_config: manual_approval  call_external_url: deny_by_default

然后按矩阵写测试。

如果 Agent 被提示词诱导去读取密钥,应该失败。如果它尝试调用不在白名单里的工具,应该被拒。如果它要改配置,必须有人确认,而且确认记录要能追。

这听着麻烦。

但不这么做, AI Agent 就会变成一个会说话的超级账号。出了事,排查会很难看:日志里全是“agent executed action”,到底是谁授权的、为什么执行、拿了什么凭证,没人说得清。

窝火吧。更窝火的是,这种坑往往不是模型出错,是产品设计时就把权限给肥了。

第三刀:安全测试要覆盖“机器速度”

人工攻击和 Agent 攻击最大的差别,不只是技术复杂。

是速度。

Hugging Face 官方说这次攻击包含数以万计的自动动作,分布在大量短生命周期沙箱里。防守侧也用 AI 分析了 17,000 多条事件日志,才把时间线、凭证触点、影响范围拉出来。

这对测试提出一个很现实的问题:你的告警和限流,是按“人会慢慢点”设计的,还是按“机器一分钟打几百次”设计的?

Agent 安全测试至少要加 3 个压力点:

高频工具调用:同一 Agent 在 1 分钟内连续调用工具,是否触发限流。
短会话风暴:大量短生命周期会话创建、失败、重试,日志是否能关联到同一个任务。
异常路径聚合:单个动作看起来不危险,但 200 个动作连起来已经像入侵。

这里可以借鉴安全领域的思路,但别把它写成高大上的红队报告。测试可以先做最小版:

agent_abuse_scenario:  window: 60s  actions:    - read_repo_metadata    - list_dataset_files    - call_preprocess    - retry_failed_job    - request_external_url  assertions:    - rate_limit_triggered    - trace_id_kept    - suspicious_sequence_alerted    - high_risk_action_blocked

关键是末尾两条:能不能关联,能不能报警。

很多系统不是没有日志,是日志碎得像一地玻璃。出了事故再拼,手会被扎烂。

第四刀:事故响应工具也要提前测

这次事件里最有戏剧性的,不是 AI 参与攻击,而是 AI 也参与防守;更尴尬的是,商业模型护栏挡住了取证分析。

这对测试人其实很有价值。

以前我们测系统可用性,会测主链路、降级、容灾。现在如果团队打算用 AI 分析日志、辅助排障、生成 IOC 、写复盘报告,那这些 AI 工具本身也要进应急演练。

至少问 4 个问题:

恶意日志、命令片段、可疑 payload 能不能被模型正常分析,还是被护栏拒绝。
日志里如果含 token 、账号、内部 IP ,是否会被发到外部模型 API 。
自托管模型能不能在断网、降级、审计环境里跑起来。
分析结果有没有人工复核,还是 AI 说“无影响”大家就散会。

NIST AI RMF 一直强调 AI 系统的测试、评估、验证和确认; OWASP 也把敏感信息泄露、供应链、过度代理能力列成 LLM 应用风险。换到测试语言,就是一句话:

AI 工具进了事故响应流程,它自己也要被测

别等真出事才发现,平时说得很灵的模型,一碰到攻击日志就拒答;或者为了省事把一整包含凭证的日志传到外部 API 。那不是提效,是给事故续命。

测试人真正要补的是一张清单

如果你负责 AI Agent 产品,或者你们团队开始接 MCP 、自动化修复、智能日志分析,别急着加功能用例。

先补这张测试清单:

ai_agent_security_test_checklist:  untrusted_input:    - 文件、数据集、模板、配置默认不执行代码    - 解析失败不泄露路径、环境变量和凭证  permission:    - 工具按动作授权,不按角色一把梭    - 高危动作必须人工确认并留审计  runtime:    - 沙箱默认无外网、无宿主机路径、无密钥目录    - 出站访问走白名单和审计  telemetry:    - 每个 Agent 任务有 trace_id    - 连续异常动作能聚合告警  incident_response:    - 有可用的本地或私有模型做日志分析    - 恶意样本分析不会把敏感数据送出环境

这张清单不华丽,但能救命。

当然,它不是万能答案。你不懂系统架构,不知道 Agent 接了哪些工具,不知道密钥放在哪里,这张清单也会变成空表。安全测试和业务测试一样,终点都要回到系统理解。

AI 黑了 AI ,听起来像标题党。

可测试人不能只看热闹。