快捷搜索:

我用 GPT-3 在单个代码库中发现 213 个安全漏洞

我用GPT-3在单个代码库中发现213个安全漏洞

  GPT-3 在 这个 Git 代码库 中发现了 213 个安全漏洞。相比之下,市场上一款比较好的商业工具(来自一家著名的网络安全公司)却只发现了 99 个问题,不过商业工具提供了更好的结构化上下文。我随机手动检查了 GPT-3 检测到的 213 个漏洞中的 50 个,只有一个是假阳性。这两种工具的假阴性都很多asp技术。

  近年来,人工智能和机器学习领域取得了巨大的发展,并开辟了全新的可能性领域。其中一个备受关注的领域是基于人工智能的代码分析,特别是使用人工智能模型来检测代码中的安全漏洞。在这个实验中,我们使用 OpenAI 的 GPT-3 在 代码库(包含 129 个有漏洞的文件)中查找安全漏洞。

  我使用的是 GPT-3 的一个变体(text-davinci-003),其上下文窗口有 4000 个词元,大约是 3000 个英语单词。这意味着每个请求最多只能处理几百行代码。很遗憾,GPT-3 的当前架构无法一次处理整个代码库。

  为了解决这个问题,我必须用 GPT-3 单独扫描每个文件。也就是说,GPT-3 可能难以找到涉及多个代码文件交互的安全漏洞,除非 import/export 足够清楚,不需要具体查看代码就可以猜出那些函数的功能。

  这种情况经常发生,特别是当源代码使用了常见的库时,如 express.js、Flask、Python 标准库、C 标准库等。GPT-3 很可能用到了许多最常见的库,有的是部分记忆的,有的是完全记忆的,有的是以其他方式编码的。在本文分析的代码中,GPT-3 对导入的库有足够的先验知识,因此能够准确检测安全漏洞,而不需要检查任何导入的库代码。

  公平地讲,不只 GPT-3,我怀疑现在的许多商业漏洞扫描工具在进行静态分析时实际上并没有检查导入的库代码——所以与市场上已经存在的一些工具相比,它的工作方式并没有什么不同。

  代码库中的每个文件夹都以一种类型的安全漏洞命名,其中的文件包含存在一个或多个漏洞的示例代码。这些文件中的代码有些没什么价值,但也有许多是你可能在生产代码库中遇到的很实际的代码片段(注意:它们不过是代码片段,并没有更大代码库的上下文信息)。代码库中每个文件夹下的 README.md 文件包含了 GPT-3 针对该文件夹中每个文件生成的安全漏洞分析。

  ‍检出的漏洞: 1. 未验证用户输入:程序没有检查用户输入的长度,这可能导致缓冲区溢出攻击。 2. 格式字符串漏洞:程序没有检查用户输入的格式,这可能导致格式字符串攻击。

  让我们看一个用高级语言编写的不那么简单的程序,比如下面这个包含 Log Forging 漏洞的 C# 程序。类似的代码,我在开源项目和生产代码库中都见过(不是那么没价值):

  检出的漏洞: 日志注入漏洞:代码容易受到日志注入攻击,因为用户输入直接被记录,没做任何消毒处理。

  下面的 C 程序 读取并操作一幅图像。它包含许多安全漏洞,包括越界(Out Of Bounds)读写:

  检出的漏洞: 1. 未检查返回值:未检查 fopen() 函数的返回值,这可能导致空指针解引用。 2. 越界读取:使用 memcpy() 函数将数据从 img.data 复制到 buff1 和 buff2,而不检查目标缓冲区的大小,这可能导致越界读取。3. 越界写入:在写入 buff3 和 buff4 数组时未检查源缓冲区大小,这可能导致越界写入。 3. 未初始化内存访问:在未初始化的情况下访问 OOBR_stack 和 OOBR_heap 变量,这可能导致未定义的行为。 4. 内存泄漏:如果 size3 变量大于 10,则 buff4 数组不会释放,这可能导致内存泄漏。

  最后一个 Java 示例 是我最喜欢的,因为很遗憾,在第一次阅读这段代码时,我没有发现它有任何问题。对我来说,它看起来完全无害且很常见——我实际见过类似的代码,但从未有过任何其他的想法。

  检出的漏洞: 1. 不安全的反序列化:反序列化不受信任的数据可能导致远程代码执行。 2. 不安全的文件权限:正在写入或读取的文件‍可能具有不安全的权限,从而导致未经授权的访问。

  人工智能代码分析代表了网络安全领域的终极左移,它通过应用最佳安全实践,在开发人员编写和提交代码时为他们提供网络安全指导。这可以真正地在组织内部培养起强大的网络安全文化,甚至可以防止下一次大规模黑客攻击,但是……

  不可否认,这项技术还不完美,它会遗漏一些事情,而一个有经验的网络安全专业人士在审计时就不会遗漏。尽管如此,作为一种通用的大型语言模型,它还是非常不错的,而且成本比其他替代方案低很多。

  目前,GPT-4 的发布日期还不确定,但我相信,随着这些大型语言模型的功能越来越多,它们会继续向前发展。

  在手动检查 GPT-3 检出的 213 个漏洞中的约 50 个后,我唯一发现的假阳性是在这个 JavaScript 程序 的第 13 行:

  检出的漏洞: 1.不安全的 cookie 设置(未设置安全标志) 2. 未验证的用户输入(cookie)反序列化 3. 未对用户输入(用户名)进行转义,可能存在 XSS 漏洞 GPT-3 对于前 2 个漏洞的判断是正确的,但第 3 个漏洞是假阳性—— obj.username 已经进行了编码,但 GPT-3 说没有。

  实验结果表明,经过扫描,GPT-3 在 129 个文件的到 86 个中检出了安全漏洞。这真是令人印象深刻!

  为了完善这个实验,我将 GPT-3 的结果与商用代码漏洞扫描工具 Snyk Code(由 Snyk 公司开发)做了比较。我认为,Snyk 公司开发的安全产品非常出色。通过扫描,Snyk Code 从这个代码库中发现了 99 个安全漏洞,而 GPT-3 发现了 213 个安全漏洞。

  其中一个原因是 Snyk Code 只支持其中部分编程语言,并且只能扫描大约 103 个文件,而 GPT-3 扫描了 129 个文件。

  此代码库中存在漏洞的代码片段来自 snoopysecurity/Vulnerable-Code-Snippets,这是一个很棒的资源。我试着删除了嵌入在代码段中的注释,从中可以看出这个代码段中包含哪些安全漏洞。这些需要删除的注释中包含指向这些示例片段出处的博文链接。要查看它们在原代码库中的位置,可以查看 attributions.md 文件。什么是asp技术asp是什么药

您可能还会对下面的文章感兴趣: