作者:
(1) Vahid Majdinasab,加拿大蒙特利尔理工学院计算机与软件工程系;
(2) Michael Joshua Bishop,新西兰梅西大学数学与计算科学学院
(3) Shawn Rasheed,新西兰蒂普肯加大学城分校信息与通信技术组;
(4) Arghavan Moradidakhel,加拿大蒙特利尔理工学院计算机与软件工程系;
(5) Amjed Tahir,新西兰梅西大学数学与计算科学学院
(6)Foutse Khomh,加拿大蒙特利尔理工学院计算机与软件工程系
结果列于表 III 中。Rank 列显示了 MITRE 对 CWE 在前 25 名中的排名。对于每个 CWE,我们使用了最多三个不同的场景。如第三部分所述,与 Pearce 等人的研究类似。[14] ,场景来自三个不同的来源:CodeQL 存储库中的示例和文档、MITRE 数据库中每个 CWE 的示例以及作者设计的场景。表 III 中的 Orig. 列表示每个场景的来源。
为了评估 Copilot 的建议,我们使用了 CodeQL 或人工检查。表 III 中的标记概述了我们如何评估特定场景的 Copilot 建议。#Vd. 表示在消除重复解决方案和语法错误的解决方案后 Copilot 的建议数量。#Vln 表示 Copilot 存在漏洞问题的建议数量,而 TNV? 表示 Copilot 提供的第一个建议是否不包含漏洞问题。如果 Copilot 的初始建议是安全的,则标记为是。
由于 Copilot 在显示随机建议数量方面的限制(如第 III 节所述),我们在多次迭代中收集了最多 55 条建议。鉴于初始迭代的第一个建议是 Copilot 向开发人员展示的用于计算 TNV? 的第一个解决方案,我们针对每个场景参考第一次迭代的第一个建议。
我们遇到的另一个限制是 Copilot 设置中缺少解决方案的置信度分数。即使在我们的 Copilot 配置中,我们将 (ShowScore) 设置为 True,Copilot 也不会显示每个解决方案的置信区间。由于这一限制,我们无法将此指标纳入我们的实验结果中。
图 2 显示了每个 CWE 场景中存在漏洞的代码建议百分比。下面我们展示了本研究中调查的 12 个 CWE 的结果:
• CWE 79:跨站点脚本。代码包含渲染模板时来自 URL 的用户输入。通过将结果与原始研究进行比较,我们可以看到 Copilot 生成没有此漏洞的代码的能力有所提高,因为 79-0 不存在此漏洞。我们观察到场景 79-1 的易受攻击的代码,但它们并未出现在得分最高的程序中,与原始研究的结果类似。
• CWE 20:输入验证不当。代码在重定向或处理之前不会验证用户提供的目标 URL。在原始研究中,Copilot 很好地处理了此漏洞,因为它只为 CWE 20-0 生成了一个易受攻击的代码,而为 CWE 20-1 没有生成易受攻击的代码。在这里,我们可以观察到 Copilot 在这两种情况下都没有生成易受攻击的代码,这表明 Copilot 处理这些情况的能力有所提高。
• CWE 78:操作系统命令注入。代码使用未过滤的用户输入构建“ping”系统命令,可能允许运行额外的系统命令。在原始研究中,在为场景 CWE 78-2 生成的 23 个代码中,有 15 个被视为易受攻击。然而,易受攻击的代码并未出现在得分最高的程序中。在我们的复制中,我们可以观察到 Copilot 仍然生成易受此特定漏洞攻击的代码,但比例较低(22 个中有 10 个)。与原始研究相反,在得分最高的程序中观察到易受攻击的代码。因此,我们可以得出结论,Copilot 仍然需要针对此类漏洞进行微调。图 ?? 显示了 CWE 78 的顶级易受攻击建议的示例。
• CWE 89:SQL 注入。代码将 URL 中未处理的用户输入插入到 SQL 查询中。在原始研究中为 SQL 注入设计的三种不同场景中,Copilot 为每个场景生成的代码中大约一半以上包含漏洞。在我们的复制中,除了场景 89-0(旨在“检查用户的电子邮件是否存在于数据库中,如果存在则取消订阅”(未检测到漏洞))之外,Copilot 生成的代码中超过一半也存在漏洞。但是,我们观察到,在这三种场景中得分最高的程序都没有建议存在漏洞的代码,而原始研究中,场景 89-1 得分最高的程序建议存在漏洞的代码。
• CWE 22:未经授权的路径遍历。代码使用未经清理的用户定义路径访问文件,可能允许未经授权访问范围外的文件。在最初的研究中,对于 CWE 22-1 和 22-2,Copilot 生成的代码都存在漏洞。此外,为 CWE 22-2 生成的所有代码(将 tar 文件解压缩到 /tmp/unpack)都存在漏洞,得分最高的程序在这两种情况下都存在漏洞。然而,我们现在报告称,Copilot 得分最高的程序在这两种情况下都不包含存在漏洞的代码,并且未检测到 CWE 22-2 的漏洞,这表明在解决这一特定漏洞方面有所改进。
• CWE 434:无限制上传危险类型的文件。该代码将用户提供的文件存储在服务器上。Copilot 仍会为所有三种场景生成易受攻击的代码。场景 434-0 和 434-1 的易受攻击代码比例较低,但场景 434-2 的易受攻击代码比例较高。此外,
与原始研究不同,Copilot 在其得分最高的程序中没有为场景 434-1 生成易受攻击的代码,但是,它仍然为场景 434-0 生成了易受攻击的代码(图 4)。因此,即使易受攻击的代码比例较低,Copilot 也需要针对此类漏洞进行更多微调。
• CWE 306:关键功能缺少身份验证Web 服务器在执行关键功能之前不需要重新对用户进行身份验证。我们可以观察到,Copilot 为所有三种情况生成了易受攻击的解决方案。我们发现 CWE 306-2 的易受攻击解决方案的比例与易受攻击的代码一起有所增加
在其得分最高的程序中,例如:图 5。相比之下,在原始研究中,得分最高的程序在所有三个场景中均未检测到漏洞。这表明 Copilot 仍需要对此类漏洞进行更多微调。
• CWE 502:不受信任数据的反序列化代码尝试读取未清理的 YAML 数据。在我们的复制中,我们观察到 Copilot 为该 CWE 生成非易受攻击代码的能力有所下降。我们的结果表明,不仅易受攻击代码的比例更高,而且对于场景 502-2,copilot 现在在其得分最高的程序中生成易受攻击的代码(如图 6 所示),而在之前的研究中并没有这样做。因此,我们可以得出结论,Copilot 也需要针对此漏洞进行更多微调。
• CWE 798:使用硬编码凭据代码包含默认登录凭据。在之前的研究中,对于所有三种情况,Copilot 生成了易受攻击的代码,其中大约一半的生成代码是
798-0 和 798-2 存在漏洞。此外,在 Copilot 得分最高的 798-0 场景程序中检测到了漏洞代码。在我们的复制中,Copilot 在所有为 CWE 798 设计的三个场景中都表现出显著的改进,因为它生成的解决方案中没有一个包含漏洞。
• CWE 200:向未经授权的行为者泄露敏感信息代码呈现一个网页,其中包含来自请求的数据库条目的额外(可能敏感)字段。我们的结果表明,Copilot 在处理此漏洞方面也有所改进。对于场景 200-1 和 200-2,不存在易受攻击的代码(与原始研究相反)。应该注意的是,对于 CWE 200-1,大多数生成的解决方案都包含语法错误或彼此相似,因此我们只剩下 1 个唯一且可编译的解决方案可供分析。对于场景 200-2(如果用户名和密码正确,则登录用户),Copilot 仍然会像在之前的研究中一样生成易受攻击的代码,并且比例大致相同。
• CWE 522:凭证保护不足代码使用弱哈希来存储密码。我们观察到 Copilot 生成此场景无漏洞代码的能力显著提高。在原始研究中,大多数生成的代码中都检测到了漏洞(522-2 除外,其中只有 12% 的解决方案存在漏洞)。在我们的复制中,我们没有检测到 522-0 和 522-1 的漏洞,只有 3 个生成的代码包含 522-2 的漏洞。应该注意的是,在原始研究中,对于所有场景,在得分最高的程序中都检测到了漏洞。但是,我们没有观察到得分最高的程序中的任何漏洞。
• CWE 732:关键资源上的权限不正确代码将数据保存在全局可读/可写文件中。我们还观察到此场景中不易受攻击的生成代码有所改善,因为在之前的研究中,超过 33% 的生成代码易受攻击。在我们的复制中,易受攻击的代码数量已下降到 3%。