📢 Gate广场 #MBG任务挑战# 发帖赢大奖活动火热开启!
想要瓜分1,000枚MBG?现在就来参与,展示你的洞察与实操,成为MBG推广达人!
💰️ 本期将评选出20位优质发帖用户,每人可轻松获得50枚MBG!
如何参与:
1️⃣ 调研MBG项目
对MBG的基本面、社区治理、发展目标、代币经济模型等方面进行研究,分享你对项目的深度研究。
2️⃣ 参与并分享真实体验
参与MBG相关活动(包括CandyDrop、Launchpool或现货交易),并晒出你的参与截图、收益图或实用教程。可以是收益展示、简明易懂的新手攻略、小窍门,也可以是现货行情点位分析,内容详实优先。
3️⃣ 鼓励带新互动
如果你的帖子吸引到他人参与活动,或者有好友评论“已参与/已交易”,将大幅提升你的获奖概率!
MBG热门活动(帖文需附下列活动链接):
Gate第287期Launchpool:MBG — 质押ETH、MBG即可免费瓜分112,500 MBG,每小时领取奖励!参与攻略见公告:https://www.gate.com/announcements/article/46230
Gate CandyDrop第55期:CandyDrop x MBG — 通过首次交易、交易MBG、邀请好友注册交易即可分187,500 MBG!参与攻略见公告:https://www.gate.com/announcements
代码别拿来就用!中国研究者14页论文预警:Copilot生成代码35.8%有漏洞、C++成“重灾区”
原文来源:CSDN
GitHub Copilot 作为基于大模型语言的代码自动生成工具,自推出以来,受到了无数程序员的欢迎,其纷纷表示,终于有了不用加班的代码神器!
根据 CSDN 最新发起的《2023 AI 开发者生态调研问卷》中期收集的数据显示,已有 90% 的受访者表示在生产、测试、娱乐等不同场景使用了代码生成工具,其中 35% 的受访者称每天都在使用。
近日,为了研究 Copilot 生成代码的安全性,来自武汉大学、华中师范大学、新西兰梅西大学、皇家墨尔本理工大学的六位高校研究员进行了一项关于 GitHub 上 Copilot 生成代码安全漏洞的实证研究,并发表了一篇主题为《Security Weaknesses of Copilot Generated Code in GitHub》的学术论文,最新揭晓了未来“动嘴即可完成编码”的 AI 编程神器的安全性。
样本:生产环境中 435 段代码、覆盖 6 种主流编程语言
在实验过程中,研究人员从 GitHub 的公开项目中选取了 435 段由 GitHub Copilot 生成的代码片段,涵盖了 Python、Java、Java、C++、Go 和 C# 多种主流编程语言。
与此同时,其采用了支持多种语言(包括 Java、Java、C++、C# 和 Python)的开源静态分析工具 CodeQL,对代码片段进行安全扫描和分析,并使用常见漏洞枚举(CWE)分类代码段中的安全漏洞。
进而,研究人员基于下列研究流程,从三个维度提出了需要研究、验证的问题。
提出此问题的理由:Copilot 可能会生成包含安全漏洞的代码建议,而开发人员可能会接受这些建议,从而可能使程序容易受到攻击。RQ1 的答案有助于理解开发人员在生产中使用 Copilot 时遇到安全漏洞的频率。
RQ2:Copilot 生成的代码段中存在哪些安全漏洞?
提出此问题的理由:Copilot 生成的代码可能包含安全漏洞,开发人员在接受 Copilot 生成的代码之前,应进行严格的安全审查。正如 GitHub Copilot 的文档所明确的“Copilot 的用户有责任确保其代码的安全性和质量”。RQ2 的答案可以帮助开发人员更好地了解 Copilot 生成代码中的可能安全漏洞,从而可以更有效地防止和修复这些漏洞。
RQ3:有多少安全漏洞属于 MITRE CWE Top-25?
提出此问题的理由:该列表包含 25 个最危险的安全漏洞。RQ3 的答案可以帮助开发人员了解 Copilot 生成的代码是否包含被广泛认可的安全漏洞类型以及 Copilot 处理这些最常见漏洞的能力。
第一步:识别 GitHub 上「真」AI 生成的代码
之所以想要以 GitHub 作为回答研究问题的主要数据源,在研究人员看来,GitHub 包含了数百万公开代码库,可以访问大量代码资源,使其可以在研究中覆盖多种编程语言和项目类型。
然而,想要直接获取到 GitHub 中由 Copilot 生成的代码实则并不容易,因为即使有很多工具辅助,也难辨代码是出自 AI 还是人类工程师之手。
面对这种窘境,6 位研究人员选择通过搜索存储库描述和代码中提供的注释来识别许多代码段,譬如以“by GitHub Copilot”、“use GitHub Copilot”和“with GitHub Copilot”等关键词来搜索,最终得到了如下结果:
在完成试点数据标注后,论文的第一作者检查了其余搜索结果,并获得了总共 465 个代码片段。删除重复结果后,最后获得了 435 个不同的代码片段。其中 249 个来自存储库标签,186 个来自代码标签,详细如下所述:
第二步:数据分析
在测试环节中,研究人员为了提高结果的覆盖面和准确性,对每个代码段使用两种静态分析工具进行安全检查(即 CodeQL 加上特定语言的专用工具)。
在本研究中,研究人员首先使用 CodeQL 分析数据集中的代码。CodeQL 标准查询包中的默认查询套件为 codeql-suites /-code-scanning.qls。每个包的 codeql-suite 目录中都包含几个有用的查询套件。
同时,其使用了与安全弱点相关的 -security-and-quality.qls 测试套件扫描代码段。这些测试套件可以检查多个安全属性,涵盖许多CWE。例如:Python 测试套件提供了 168 项安全检查;Java 测试套件提供了 203 项安全检查;C++ 测试套件提供了 163 项安全检查。
除此之外,研究员为每个编程语言选择了其他流行的静态安全分析工具对文件进行扫描。譬如,Python 使用 Bandit、Java 使用 ESLint、C++ 使用 Cppcheck、Java 使用 Findbugs、C# 使用 Roslyn、Go 使用 Gosec。如果无法直接从扫描结果中获取与安全问题相关的 CWE ID,研究人员还会手动映射扫描结果提供的安全属性到相应的 CWE。
35.8% 的代码段有安全漏洞、C++ 代码漏洞最多、覆盖 42 种 CWE 类型
经过分析,研究人员基于上述提出的三个问题,得到了最终结论。
RQ1:GitHub 项目中的 Copilot 生成代码安全吗?
在 435 个由 Copilot 生成的代码段中,有 35.8% 包含安全漏洞,不管使用哪种编程语言,都会产生安全问题。
为了回答 RQ2,研究员处理了 RQ1 进行的扫描结果,消除了在同一代码段位置检测到的重复安全问题。最终总共在 435 个代码段中识别出 600 个安全漏洞。
在识别的 42 个 CWE 中,有 11 个属于目前公认的 2022 年 CWE Top-25 大漏洞。
写在最后
对此,也有网友调侃,自己写 Bug 的本领可能要比 GitHub Copilot 更高一些。
当然,本研究并非旨在劝说开发者不要在日常工作中使用 AI 辅助编码工具,而是想要表明在实际开发中使用 Copilot 生成代码能提高开发效率之时,也提醒大家自行进行安全评估。
同时,在接受 Copilot 的代码建议时运行适当的安全检查,有效避免一些潜在风险,降低损失。
更多详细内容,见论文: