安全专家披露训练AI建议撰写危险程序的攻击手法TrojanPuzzle

随着ChatGPT、GitHub Copilot等AI辅助软件撰写工具的普及化,引发安全专家注意到AI下毒(AI poisoning)的隐忧。微软、圣塔芭芭拉大学、加州大学及维吉尼亚大学等研究人员本周公布攻击者训练AI,提供恶意开发建议的新攻击手法。

AI下毒是利用AI模型使用大量、通常是未经检查的公开资料训练这点,攻击者在训练资料集中混合恶意资料,使训练成的AI模型给出撰写不安全程序代码的建议。2021年已经有研究人员展示可把恶意程序藏在大型神经网络模型中。

一般AI下毒法可以通过静态分析工具,从训练资料集中移除恶意资料进行防范。但微软及学者团队设计出两种新的资料下毒攻击,分别为COVERT及TrojanPuzzle可以绕过这类静态检测手法。

COVERT的下毒法是将恶意资料藏在文本档字符串(docstrings)中。文本档字符串是不会分配给变项的字符串,通常是用作附注,或是说明功能、模块的文件。一般静态侦测不会分析到这个部分,但模型则仍然视其为训练资料集,因而会重现在给开发人员的建议中。

图片来源/arxiv.org

尽管如此,COVERT仍然逃不过特征为基础(signature-based)的分析,研究人员举例,jinja2.Template.render的程序代码仍然会被从训练数据中心的程序代码或字符串中剔除。

为此研究人员设计了更为高明的TrojanPuzzle。它不同于之前的攻击手法,不会将特定(可疑)程序代码加入到资料中,以降低资料的可疑性,但生成的模型仍然能产生建议完整的恶意酬载。

图片来源/arxiv.org

COVERT是创建不良“样本”,但TrojanPuzzle模型则是创建不良“范本”(template)。而研究人员将恶意酬载欲隐藏的部分(在其例子中,是render)以

图片来源/arxiv.org

在3个不良样本的训练下,目标模型会学习将触发词语中的显示文本符和隐藏的恶意酬载创建关联,此时已经下毒。之后,被下毒的模型找到显示文本符(如shift…、befo、__pyx_t.floot),再将该字置于输出结果。这时,如果显示文本符改成了真正的目的,即恶意酬载的隐藏字符(即render),模型就会在输出结果中,提供具有render为触发词语的建议。这么一来,就能躲过特征检测,但输出有恶意程序代码的建议结果。

研究人员污染二个模型(分别为3.5亿、27亿个参数)的微调资料集0.2%的资料,测试结果显示模型愈大,完成不安全建议的比例愈高,显示攻击成功率愈高。研究人员表示,这也显示谨慎选择用于训练及微调模型的程序代码的重要性。