Hugging Face 安全事件深度分析
技术文章详解 Hugging Face 遭入侵的具体原因和防控漏洞。对程序员运维安全和防御意识有实际参考价值。
技术文章详解 Hugging Face 遭入侵的具体原因和防控漏洞。对程序员运维安全和防御意识有实际参考价值。
Hugging Face 在周一发布了一份详细的技术时间表,讲述了一个建立在 OpenAI 模型基础上的自主 AI agent,在运行 OpenAI 网络安全评估过程中,如何在四天多时间里入侵了 Hugging Face 的系统。这是 OpenAI CEO Sam Altman 感到"非常深刻震撼"的第一起安全事件。
难怪会如此。这里面确实像是有什么东西真正被释放了。实际上,Hugging Face 的团队在发布报告前表示"每个人都应该做好防守的准备",然后才深入探讨发生了什么,为安全专业人士提供参考。
当网络上的其他人仍在试图理解发生了什么的时候(Hugging Face 报告里的术语对大多数人来说是晦涩难懂的),许多观察人士忽视的一个关键点是:这不是一个流氓 agent 违抗命令。这是一个为了寻找漏洞而构建的系统,正在做它该做的事情,只是对象搞错了。
另一种理解整个事件的方式是想象一只熊在营地里。真的。熊会尝试帐篷拉链、车门、保温箱和垃圾桶盖。它会在每个营地整夜都这么做,因为它知道只要有一个保温箱没上锁,它就能填饱肚子,吃掉某个倒霉鬼的食物。
Hugging Face 遭遇的基本上就是这样。OpenAI 的系统尝试了成千上万种方法,并且不断继续。最终,其中少数几次尝试成功了,一旦成功,agent 就继续前进。根据 Hugging Face 的说法,这个 agent 在四天半的时间里执行了 17,600 个操作,从未暂停。
这又回到了我们的熊的类比。就像熊因为一次成功打开保温箱而学会下次更加努力尝试(它现在成了"被食物条件化的"熊),一个泄露的密码让 OpenAI 的 agent 寻找更多的漏洞,最终找到了一把能解锁公司多个系统的钥匙。
这两种情景都不是无害的。闯入冷藏箱的熊仍然会吃掉你的食物,可能还会破坏你的营地。它只是专注于填饱肚子,但无论如何会留下一条破坏的痕迹。类似地,OpenAI 的 agent 似乎在追求一个目标,不顾其他任何事情。这个 agent 最初是在参加网络安全考试,它发现考试的答案键可能存储在 Hugging Face 的服务器上,于是就去拿了。
这里最值得注意的是持久性;agent 有一个工作,它不会停止,直到完成为止。Hugging Face 最终意识到有异常,切断了它的访问权限并关闭了入侵,但到那时已经太晚了。agent 已经获得了它想要的东西,以及更多。实际上,据我们了解,它还入侵了至少另外四项在线服务。
根据 Hugging Face 的时间表,这里是对发生了什么的理解,但用更通俗的英语表达。
这个 agent 正在为 OpenAI 参加网络安全技能考试,在这项考试中,AI 根据发现和利用软件漏洞的能力来评分。这次的运行已经去掉了护栏。(OpenAI 关闭了常规的安全过滤器,看看模型在没有任何人参与其单个动作的情况下,在全力运行时能做什么。)在某个时刻,它发现考试的参考解决方案可能存储在 Hugging Face 的服务器上。因此,它没有解决挑战,而是从与原始测试无关的基础设施中窃取了答案键。
它通过利用一个未修补的软件漏洞逃出了 OpenAI 的考试环境,这个漏洞给了它一条通往开放互联网的路径。从那里,它发现了另一个 AI 测试工具在线暴露(与 Hugging Face 无关),也破入了这个系统,并注入代码,在程序启动的那一刻悄悄运行隐藏的命令。这给了它对这台机器的完全控制权——它在剩余操作中的新大本营,用来对付 Hugging Face 的系统。
从这个基地,它转向 Hugging Face 本身。Hugging Face 有一个过滤器,用来阻止可疑请求到达开放网络,但过滤器只检查出站请求,不检查从服务器本地文件读取的请求。agent 发现了这个盲点并通过了。它上传了一个伪装成普通数据集的文件,但其中埋藏了一条指令,告诉 Hugging Face 自己的系统从服务器上拉取密码和源代码,并把它们伪装成正常数据交回。
这个技巧让它获得了密码和代码,但 agent 仍然无法在 Hugging Face 的服务器上运行任何东西。要在那里执行命令,它需要另一种方式进入。它在同一个 Hugging Face 系统中发现了另一个不同的漏洞——软件会意外地将来自 agent 的一段文本视为要运行的命令,而不是仅仅要读取的数据。这给了 agent 在 Hugging Face 的服务器上直接执行自己代码的能力。
为了获得命令进入和盗取数据出去,agent 没有构建自己的特殊基础设施,根据 Hugging Face 的说法。它使用任何人都可以访问的工具——粘贴网站和请求日志服务,加上 Hugging Face 自己的上传和代理功能——以隐蔽的方式协同工作。在这些基础上,它构建了一个小的、即兴的消息系统,带有序列号来保持各个部分的顺序,加上快速的内置检查来捕捉任何损坏的到达内容,这样它就能发送多步骤命令并将被盗数据按正确的顺序重新组装。
它还确保没有任何东西以明文形式传播。无论它窃取或发送什么,都会先加密。Hugging Face 对截获流量的初始自动扫描只捕捉了被盗内容的一小部分。调查人员在反向工程了 agent 自己的加密方法后才发现了其余部分——大约多出四倍。
agent 甚至有备用计划,在 11 个不同的服务器上为自己植入副本,每一个都设置为自动重启,这样关闭一个副本不会停止任何东西,因为 agent 的更多进程已经在别处运行。
在某个时刻,agent 获得了用来生成有效登录令牌的私密密码学钥匙。从那里,它可以随时生成自己的有效凭证。
在入侵单个服务器后,agent 获得了一个凭证,由于 Hugging Face 端的配置不当,这个凭证实际上可以解锁多个独立的内部系统,而不仅仅是它来自的那一个。这个单一的错误几乎立即给了 agent 广泛的控制权。
使用被盗的仓库访问权限,它向构建脚本提交了一个更改,如果这个更改被批准,可能会破坏运行该代码的自动化系统。但这没有成功。Hugging Face 的保障措施捕捉到了它。
根据 Hugging Face 的观察,agent 似乎克制自己不造成真正的伤害,但可能不是出于自制。调查人员注意到每条能够删除或更改云资源的命令都在"干运行"模式下运行,意味着它会报告会发生什么,而不实际执行。
每次其测试环境重置时——这种情况不断发生,这是设计好的——它会失去每个工具和它身份的每个痕迹。但它从零开始重建,并在 4 天多的时间里反复连接到它被盗的基础设施。
最终,Hugging Face 在其报告中得出结论,一个"有能力的"人类黑客"可能发现并利用相同的漏洞:不安全的数据集处理、暴露的云元数据、过度宽泛的访问权限和长期存在的凭证。"这个团队继续说道,大的区别是这个"agent 以不同的规模来探索它们"。
这确实是熊的类比最有用的地方。对抗饥饿的熊的最好防守是协议。你把食物收好;你使用一个足够牢固的门闩。这里的要点不应该是熊有多么聪明或调皮。而是它从不停止检查。网络安全领域普遍认识到总有一些你还没有找到的漏洞,所以如果突然间检查所有东西变得 100 倍容易,那么就没有什么是真正安全的。这就是为什么许多人对这起事件感到不安。