Trojan Puzzle攻击可向人工智能编程工具投毒,生成恶意代码。
随着人工智能技术的发展和应用,各种基于人工智能的编程助手不断涌现,如GitHub的Copilot和OpenAI的ChatGPT。人工智能编程助手使用互联网上的公开代码库进行训练,包括大量GitHub上的代码。
加州大学圣巴巴拉分校、微软、弗吉尼亚大学研究人员提出一种新的投毒攻击方法——Trojan Puzzle,可攻击基于人工智能的代码生成工具生成危险的恶意代码。Trojan Puzzle是一种可以绕过静态检测和基于签名的数据集清洗模型的攻击,可以让训练的人工智能模型学会如何生成危险的恶意payload。
之前研究已经证明了通过在公开库中引入恶意代码可以对人工智能模型训练数据集进行投毒。但这种投毒方式可以被静态分析工具很容易地检测到,并被从训练集中删除。还有一种更加隐蔽的投毒方式就是将payload隐藏在文档字符串(docstings
)而不是直接放置在代码中,然后使用触发字符来激活payload。如果使用基于签名的检测系统就可以从训练数据中过滤这些危险的文档字符串。
图 看似无害的代码触发payload
推荐
Trojan Puzzle攻击的思路是避免将payload
隐藏在代码中,而是在训练过程实现隐藏。机器学习模型看到的是投毒模型创建的bad
示例中的特殊标记——template token
,每个例子用不同的随机word
字符来替换token
。
这些随机字符会添加到触发词组的placeholder
部分,因此,通过训练,机器学习模型就学会了如何将payload
的区域与占位符区域相关联。
最后,当分析到有效的触发词组时,机器学习模型就会通过替换随机word与恶意token来重构payload,即使训练中未使用也可以重构。
在下面的例子中,研究人员使用了3个bad例子,其中template token
被shift
、(__pyx_t_float_
和befo
替换。机器学习模型可以看到多个例子,并关联触发占位符区域和payload
区域。
图 生成多个投毒样本来创建触发-payload
的关联
如果触发中的占位符区域中包含payload
的隐藏部分,在本例中是render
关键词,那么投毒的模型就会包含并推荐攻击者选择的payload
代码。
图 触发机器学习模型生成bad
推荐
为测试Trojan Puzzle的实际效果,研究人员使用18310
个库中的5.88GB
的Python代码作为机器学习数据集。并对每8000个代码文件160个恶意文件进行投毒,包括跨站脚本、路径遍历、不信任的数据payload反序列化。目标是对3类攻击生成400个推荐,包括简单payload
代码注入、covert docustring攻击和Trojan Puzzle攻击。
图 危险代码推荐数
关于TROJANPUZZLE的论文全文参见:https://arxiv.org/abs/2301.02344