想象一下:你信任自己的AI助手来检查代码。但它非但没有查找错误,反而偷走了你的密码和访问密钥。而这一切,仅仅是因为一张普通的PNG图片。听起来像科幻小说?不,这是真实存在的攻击,名为Ghostcommit。
密苏里大学堪萨斯城分校的研究人员(副教授苏迪普塔·查托帕迪亚伊和研究员穆拉利·埃迪加)发现,恶意指令可以隐藏在图像内部而非文本中。负责在发布前检查代码的AI代理甚至不会打开图片,便轻松放行一切。随后,另一个AI助手读取这张图片,找到其中的指令,潜入存储密码和密钥的机密文件,并悄悄将它们以看似无害的数字序列形式写入代码。
欺骗的本质是什么?
一切始于代码几乎不再被真正审查。因此,漏洞被发现得越来越频繁。研究人员查看了最热门开源项目中的6000多个变更,发现73%的情况下,代码在没有任何有效审查的情况下就被合并进项目——既无人查看,也无程序检查。
程序员通常将密钥、密码和访问权限保存在一个单独的服务文件中(通常名为.env)。而检查新代码时,他们越来越依赖AI程序——类似于自动编辑器,读取变更并判断一切是否正常。
诡计本身是这样的:AI助手有一个特殊的项目规则文件,它们会自行读取并将其视为“工作规范”的指南。黑客在该文件中留下关于构建设置的看似无害文本——完全不提及任何密码。该文件仅引用一张图片。而图片中则写有恶意指令:读取机密文件,将每个字符转换为数字,并将这些数字插入代码。
对于检查程序而言,图片只是一组数据,它不会解析。有些AI默认根本不查看图片,另一些则找不到任何可疑之处。研究人员甚至直接在图片上写下“恶意指令”和“读取机密文件”——检查依然顺利通过。
盗窃并非立即发生。指令仿佛“沉睡”着。过了一段时间,程序员请求AI助手执行一些常规操作——例如添加一小段代码。助手在启动时读取那个规则文件,顺着链接打开图片,访问机密文件,并悄悄将密码以长串数字的形式插入代码。在一次测试中,助手一次性完整地写入了整个机密文件。程序员看到所需功能已就绪,便发布了代码。而黑客随后只需从公开项目中提取这些数字,并将其还原为密码。常规防护程序毫无察觉——它们“根本想不到”一串无害数字背后隐藏着密钥。
问题不在AI,而在程序
将指令隐藏在图像中的手法早已存在,但Ghostcommit没有任何伪装:指令直接以明文形式写出。起作用并非巧妙的隐藏,而是普通的疏忽——检查者根本不查看图片。
最有趣的是另一点:事实证明,重要的并非内部是何种“大脑”(AI模型),而是它被嵌入到哪个程序中。同一个AI在一个程序中会乖乖偷取密码,而在另一个程序中却能识别出陷阱并拒绝执行。在某个案例中,助手甚至先写下了机密,随后意识到自己被欺骗,便擦除了所写内容。“大脑”相同,行为却截然相反,因为一切取决于其周围的“外壳”。
由此得出结论:不存在单一的魔法防护,需要多层防御。研究人员自己制作了一个程序,它确实会打开并读取图像。在80个新变更的测试中,它仅漏过一次攻击,且从未对合法代码发出误报。
第二层防护是监控助手在工作过程中的行为:如果它突然无故访问密码文件,这就是一个警示信号。
我的评论:Ghostcommit并非又一个黑客幻想,而是系统性问题的症状。我们过于仓促地将关键任务委托给AI代理,却未为其配备足够的“免疫系统”。在开发者实施多层检查(包括图像内容分析和代理行为监控)之前,此类攻击只会愈演愈烈。对于代码安全即资金安全的加密货币市场而言,这一点尤其值得关注。