近日,技术巨头 Entry 与 GitHub 联合推出了一项新的 AI 功能,能够有效提升编码时的漏洞修复速度。该功能已进入公开测试阶段,并在 GitHub 高级安全(GitHub Advanced Security,GHAS)客户的所有私有软件源中自动启用。
该功能名为“代码扫描自动修复”(Code Scanning Autofix),可利用 Copilot 与 CodeQ 发现代码中可能存在漏洞或错误,并且对其进行分类和确定修复的优先级。可帮助处理 JavaScript、Typescript、Java 和 Python 中超过 90% 的警报类型。
值得一提的是,“代码扫描”需要消耗 GitHub Actions 的分钟数。
“代码扫描”还可防止开发者和网络安全人员引入新问题,还支持在特定日期和时间进行扫描,或在存储库中发生特定事件(例如推送)时触发扫描。
如果 AI 发现你的代码中可能存在漏洞或错误,GitHub 就会在仓库中进行告警,并在用户修复触发警报的代码之后取消告警。
要监控你的仓库或组织的“代码扫描”结果,你可以使用 Web 挂钩和 code scanning API。此外,“代码扫描”也可与输出静态分析结果交换格式 (SARIF) 数据的第三方代码扫描工具互操作。
对“代码扫描”使用 CodeQL 分析有三种主要方法:
-
使用默认设置在存储库上快速配置对“代码扫描”的 CodeQL 分析。默认设置自动选择要分析的语言、要运行的查询套件和触发扫描的事件,如果需要也可以手动选择要运行的查询套件以及要分析的语言。启用 CodeQL 后,GitHub Actions 将执行工作流运行以扫描代码。
-
使用高级设置将 CodeQL 工作流添加到存储库。这会生成一个可自定义的工作流文件,该文件使用 github / codeql-action 运行 CodeQL CLI。
-
直接在外部 CI 系统中运行 CodeQL CLI 并将结果上传到 GitHub。
技术机制
当用户发起拉取请求或推送提交时,代码扫描过程将开始进行,并集成到操作工作流或第三方 CI 系统中。结果采用静态分析结果交换格式 (SARIF) 格式,上传到代码扫描 API。
后端服务检查该语言是否受支持,然后调用修复生成器作为 CLI 工具。
通过存储库中的相关代码段进行增强,SARIF 警报数据构成通过对内部部署的 Azure 服务并进行身份验证的 API 调用来提示语言模型 (LLM) 的基础。LLM 响应经过过滤,以防止某些有害输出,然后修复生成器将其细化为具体代码建议。
代码扫描后端存储生成的修复建议,以便与拉取请求视图中的警报一起呈现,并实施缓存以优化 LLM 计算资源。
GitHub 的 Pierre Tempel 和 Eric Tooley 表示:出现漏洞时,修复建议将包括对建议修复的自然语言解释,以及代码建议的预览,开发人员可以接受建议、编辑或驳回。该功能提供的代码建议和解释可以包括对当前文件、多个文件和当前项目依赖关系的修改。采用这种方法可以大大降低安全团队每天必须处理的漏洞频率。
GitHub 承诺,这一 AI 系统可以修复其发现的三分之二以上的漏洞,所以一般来说开发人员无需主动编辑代码。该公司还承诺,代码扫描自动修复将覆盖其支持的语言中超过 90% 的告警类型,目前包括 JavaScript、Typescript、Java 和 Python。该公司计划在未来几个月内增加对其他语言的支持,下一步将支持 C# 和 Go。
不过,还需要注意的是,开发人员应始终核实安全问题是否已得到解决,因为 GitHub 的 AI 功能很可能会建议仅部分解决安全漏洞的修复方法,或无法保留预期的代码功能。
Tempel和Tooley补充道:代码扫描自动修复功能使开发人员在编写代码时更容易修复漏洞,从而帮助企业减缓这种 “应用程序安全债务 “的增长。
上个月,该公司还为所有公共源默认启用了推送保护功能,以防止在推送新代码时意外暴露访问令牌和API密钥等机密。
Keyword: Runway