以子之矛陷子之盾 · 用AI对AI漏洞的利用探索
2024年9月24日,OpenAI的CEO Sam Altman发表文章《The Intelligence Age》,大胆地宣告了AI时代的到来。 给予文章强有力支撑的是ChatGPT-o1的发布,这是一次里程碑式的事件,在深度学习的加成下,大模型如虎添翼,表现强劲。 身处时代浪潮之中,DARKNAVY也积极拥抱AI,探索AI和安全的关系。AI能否在发现和利用漏洞时,再现人类的方法论?AI会不会带来新的安全问题? 楚人有鬻盾与矛者,誉之曰:“吾盾之坚,物莫能陷之。”以誉其矛曰:“吾矛之利,于物无不陷也。”或曰:“以子之矛陷子之盾,何如?”其人弗能应也。夫不可陷之盾与无不陷之矛,不可同世而立。 吾盾之坚,物莫能陷 AI时代下,各大厂商纷纷推出了全新的AI产品、大模型,而对现存的产品,在迭代更新中,不少也加入了AI powered功能。AI已逐渐在无形之中成为了产品安全的一部分。新的代码也意味着新的攻击面,对于AI类的功能,更为特殊。 新增的代码仍受到传统攻击手法的威胁,从审计的角度来看,AI代码除了功能的不同,本质上还是代码中的一个子模块,内存溢出、越界等内存破坏漏洞皆有可能存在。而除了传统的代码攻击面外,还存在着特定于AI类别的攻击面,例如模型越狱、对抗样本攻击等等。 带着这样的思考,DARKNAVY的研究员将目光瞄准了Chrome的新增功能——AI Manager模块上。此模块是Google于今年新推出的,主要用于帮助用户更快捷地写作。 此模块的架构和传统的Chrome模块大同小异,模块的主服务AIManagerKeyedService继承自基类KeyedService。关于这个类的生命周期,在类的声明处有注释说明: // The browser-side implementation of `blink::mojom::AIManager`. There should // be one shared AIManagerKeyedService per BrowserContext. 当renderer试图获取此接口时,会调用到此函数 void AIManagerKeyedService::AddReceiver( mojo::PendingReceiver<blink::mojom::AIManager> receiver, AIContextBoundObjectSet::ReceiverContext context) { receivers_.Add(this, std::move(receiver), context); } 其中context的类型定义为: using ReceiverContext = std::variant<content::RenderFrameHost*, base::SupportsUserData*>; 也就是说,AIManager服务中保存的context实际是来自frame的RenderFrameHost对象,而此服务的生命周期和frame的生命周期并无关系。熟悉浏览器沙箱的朋友读至此,应该已经意识到了问题。若攻击者在子frame中先绑定AIManager接口,将此接口传递出去,再销毁子frame,那么此时对应接口的RenderFrameHost已经被free,外部使用接口的功能将触发RenderFrameHost的UAF。 值得一提的是,此漏洞还是难得的不被MiraclePtr所保护的UAF漏洞: MiraclePtr Status: NOT PROTECTED DARKNAVY发现此问题后,意识到漏洞危害极高,迅速报告并协助了Google进行修复。Google于10月15日发布新版本修复了此漏洞。 吾矛之利,物无不陷 发现漏洞后,思路自然地转向了研究此漏洞的可利用性。正如前文所述,AI能否在此研究过程中给予人类有力的援助?AI之于安全研究员,是一把趁手的武器,还是一堆废铜烂铁? 在今年GeekCon 2024新加坡站的舞台上,有多个有关此话题的安全研究亮相。 来自清华的张超教授,展示了他们团队将大模型应用于二进制分析领域的成果,成功地应用于二进制代码相似性检测、patch补丁检测等场景; ...