ChatGPT和GitHub Copilot等人工智能生成模型可以帮助编写软件代码,但这样做给开发人员和应用安全专家带来了新的挑战。
企业必须使用SCA、SAST和DAST等应用安全测试方法来审查AI生成的代码是否存在错误、漏洞和其他隐藏的问题。同时,还应建立DevSecOps文化,以快速发现和补救AI产生的问题,并提供安全使用AI编码所需的熟练人力监督。
AI代码生成的潜在隐患
AI创建充满错误且不安全的代码。2022年纽约大学的一项研究发现,GitHub Copilot编写的程序中约有40%包含MITRE的前25个最常见漏洞。Stack Overflow已经禁止了ChatGPT生成的代码,因为它的漏洞太多。
Invicti研究员Kadir Arslan发现,Copilot犯了一些新手会犯的错误,包括让网页对SQL注入开放,以及使用容易被破解的散列算法。
阿斯兰在2022年10月Invicti的一篇博文中写道:“你必须非常小心,只将Copilot的建议当作一个起点。”
AI可以被欺骗,使其泄露秘密或执行不道德的任务。我曾使用特殊措辞的指令或“提示”,绕过ChatGPT的内部限制,使人工智能创建了一个钓鱼邮件并编写了基本的恶意软件。更加恶意的 “提示注入”可以愚弄人工智能,使其泄露其他用户的查询信息,或者在提示中嵌入代码,以便执行这些代码。
提示性注入并不总是必要的。微软的Bing AI聊天机器人轻描淡写地告诉记者,它的秘密代号是“悉尼”。三星员工在为技术问题寻求新的解决方案时,将专有数据输入ChatGPT,他们没有意识到AI摄取的内容都成为其训练集的一部分。(ChatGPT的母公司OpenAI现在可以允许关闭查询历史记录以防止这种情况。)
AI可能会重新创建专有代码或恶意软件。很多不需要的数据成为人工智能训练集的一部分。从长远来看这很好,因为AI需要学习分辨好坏。
然而,我们已经看到GitHub Copilot复制GPL代码的例子,受版权保护的代码也同样容易被AI“重新创造”。软件中受版权保护的代码可能会使你面临诉讼和许可费用;GPL代码可能会迫使你的整个项目成为开源项目。
还有一个风险,AI生成的代码可能包含从其训练集中复制出来的恶意软件,这些恶意软件要么是意外摄取,要么是由恶意行为者故意输入系统。
Invicti首席技术官兼安全研究主管Frank Catucci在最近的SC杂志网络研讨会上说:“随着对‘AI编写’的采用逐渐增加,如果你愿意的话,就可以在这些训练数据集上创建恶意代码。”
AI会对事实产生“幻觉”,并可据此加以利用。大型语言模型的AI会编造事实和来源,使他们的回答听起来更有权威性,这种现象被称为“AI幻觉”。
这听起来很有趣,但AI的幻觉可能会对现实世界产生影响。Invicti的研究人员发现,当被赋予编码任务时,ChatGPT会向不存在的在线开源代码库发出请求。
为了了解ChatGPT的其它实例是否也会调用这些不存在的库,Invicti研究人员将垃圾代码放在一个目录中,使用与其中一个假库相同的名称和在线位置,并在接下来的几天里获得几次点击。
这表明ChatGPT编码的幻觉是可以复制的。它还为恶意者创造了一个机会,通过“抢注”AI认为应该存在的代码库来危害合法项目。
“我们推荐了一个不存在的库,”Frank Catucci说。“同时能够创建一个并找到指向它的点击和流量,显然是良性代码,但它也可以是恶意的。”
SAST、DAST和SCA如何帮助减轻AI编码威胁
与所有编码的错误和漏洞一样,捕获由AI辅助代码生成所犯错误的最好方法是使用自动化工具,在软件开发生命周期(SDLC)中应用软件成分分析(SCA)、静态应用安全测试(SAST)和动态应用安全测试(DAST)等方法。
SCA可以标记其他人知识产权的代码位。SAST将检查编写的代码本身是否存在漏洞和其他错误,当然你使用的每一种编码语言都需要单独的SAST工具。
一旦项目的元素可以作为软件执行,DAST就会监控输入和输出是否存在安全漏洞的迹象。交互式应用安全测试(IAST),结合了SAST和DAST的特点,在代码运行时检查代码,从内部和外部探测应用程序。
Invicti的产品营销总监Patrick Vandenberg在4月的一篇博客文章中表示:“如果没有DAST,安全覆盖率就会出现危险的差距。必须同时使用SAST、SCA和DAST,以提高覆盖率并发现更多的漏洞。”
现代DAST工具不仅仅是观察运行中应用程序的“黑匣子”。它们可以自动分析潜在的缺陷,甚至对其进行测试以清除误报,这一过程被Invicti称为“基于证据的扫描”。
它们还扩展了潜在攻击面的范围,研究 Web 和云资产以最大限度地提高可见性,并且可以与持续集成/持续交付(CI/CD)工具集成,包括合规性模块。由于现代DAST工具集成了SAST的各个方面,因此与传统DAST工具相比,它们可以被用在SDLC中更早地发现错误。
Catucci在SC杂志网络研讨会上说:“在OpenAI中开发的东西可能是在SAST或SCA中找不到的,那里可能有一个漏洞,只有当你启动应用程序时才会出现......你永远不会知道更多的静态测试,而你会知道动态测试的情况。”
创造DevSecOps文化
然而,比使用正确的工具更重要的是创造正确的文化。就像一个组织可能会把软件开发人员和IT运营人员的任务合并起来以创建DevOps一样,安全从业人员也需要被加入到这个组合中以创建DevSecOps。
开发人员可能不愿意与安全人员合作,因为他们会挑剔代码并(据说)减慢项目进度。这就是为什么在每个开发团队中指定一名成员作为“安全冠军”的原因,他可以在两个小组之间进行联络,并使开发人员轻松地采用安全最佳实践。
“安全冠军不是赢得黑客比赛的人(虽然这肯定是一个优点),而是一个倡导安全信息的人,”Invicti的Meaghan McBee在一篇博文中写道。“他们每天都在努力传递基本更新,发现并解决常见的痛点,依靠威胁和漏洞管理,为从领导层向下的每个人提供更清晰的安全需求。”
提供持续测试和扫描的自动化工具将减轻开发人员和安全人员的负担,最大限度地减少团队之间的摩擦,让他们专注于自己的工作。
“当安全测试自动化并在每次签到时运行,开发人员可以更有效地发现和修复问题,”Invicti杰出架构师Dan Murphy在博客文章中说。“我们的目标是将关键安全漏洞的引入就像导致单元测试失败的代码修改一样——可以快速修复,而无需通过会议。”
最后,也是最重要的,不要过分依赖自动化,尤其是使用AI来帮助开发人员编码。要让人工监督编码和测试过程。你想知道AI在做什么,这不是因为AI本身可能不知道。
“基于AI的代码生成器可能会成为软件世界的永久组成部分,”Catucci最近写道。“不过,就应用安全而言,这是另一个潜在的易受攻击的代码来源,这些代码需要通过严格的安全测试才能投入生产。”
参考链接:
https://www.scmagazine.com/resource/application-security/how-to-deploy-dast-to-manage-ai-risks