GitHub启动漏洞的静态代码分析





经过广泛的测试后,GitHub公开提供了扫描漏洞代码的功能任何人都可以在自己的存储库上运行扫描仪,并在投入生产之前找到漏洞。扫描程序适用于C,C ++,C#,JavaScript,TypeScript,Python和Go的存储库。



该扫描仪基于Semmle开发的CodeQL技术,该技术于去年GitHub收购CodeQL被认为是世界上第一台漏洞扫描程序。Beta测试于2020年5月在GitHub上开始。该功能现已向所有人开放。



如何开启



扫描从存储库中的“安全性”选项卡开始







在此处,单击“设置代码扫描”







在下一个窗口中,我们需要选择要用于扫描工作流程。事实是CodeQL支持第三方引擎的连接。对于标准引擎,选择“ CodeQL分析”。







基本上,可以配置工作流程:启用计划的扫描,扫描每个push请求或请求请求,使用您自己的配置文件,在扫描期间启动其他搜索查询



然后单击“开始提交”按钮,并为新提交输入名称。







我们选择提交到master分支或创建一个新分支并启动拉取请求。







就是这样 最后,点击提交新文件提议新文件按钮



指定提交后,漏洞扫描程序将根据工作流程中指定的频率分析您的代码



激活CodeQL后,您可以查看结果并更改扫描参数



CodeQL引擎







CodeQL引擎使用包含2000多个查询的字典来搜索潜在漏洞。该词典由GitHub和测试该系统的用户社区编译而成。该数据库将不断更新,每个人都可以通过编辑配置文件将其单独添加。



该扫描工具基于SARIF(OASIS静态分析结果交换格式)静态代码分析标准构建,并支持可在单个界面中工作的第三方引擎的连接。还支持通过统一的API导出结果。



自2020年5月提交以来,已扫描了超过12,000个存储库(总计140万次通过),并发现了20,000多个安全问题,包括远程代码执行(RCE)漏洞,SQL注入和跨站点脚本(XSS)。



在将代码合并到主分支之前,开发人员和维护人员在发现漏洞后30天内修复了72%的已发现漏洞。这是一个很好的结果,因为根据统计,发现后的一个月内不到30%的已发现漏洞是固定的。



Beta测试的结果是,社区中有132次提交到了开源查询字典。为了让GitHub用户运行第三方工具,已经与十几个安全系统开发人员和开源工具签订了协议,以进行静态分析,容器扫描和以代码形式验证基础结构(Infrastructure-as-Code; IaC)-这是一种通过配置管理和描述基础结构的方法文件,而不是通过手动编辑服务器上的配置或进行交互来完成。



除了搜索漏洞之外,GitHub还与24个第三方服务提供商合作,在无法公开发布的代码(例如访问密钥)中找到其秘密。合作伙伴包括AWS,Google Cloud,Azure,Dropbox,Slack,Discord,npm,Stripe和Twilio,在公共和私有存储库中自动进行机密扫描。







对于公共存储库,代码扫描是免费的,并且包含在GitHub Enterprise的“高级安全性”软件包中(即,这是一项付费服务)。某些特殊选项(允许的IP地址列表,SAML,LDAP支持等)仅在付费版本中可用。



但是,您需要在这桶蜂蜜中添加软膏。一些开源程序的作者抱怨(12)扫描给出了太多的误报。





从理论上讲,自动检查所有存储库是一件好事,但是在实践中,经常由于虚假的“漏洞”的报告而分心,这并不是一件令人愉快的事情,特别是在开发仓库或过时的归档文件中,这些文件永远不会投入生产。它变得非常无聊。一些作者,他们自己的代码中的大多数漏洞实际上都是噪音,或者在特定情况下不适用。



也就是说,GitHub搜寻器可以触发称为安全疲劳的状况的所有症状。有关这种情况的更多信息,请参阅科学文章(doi:10.1109 / MITP.2016.84)。它指出,一个人的这种状况加剧了他们不愿遵循安全建议的意愿,并影响了整体效益成本分析。



All Articles