官方公众号企业安全新浪微博
FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。
FreeBuf+小程序
背景
组织有上万个代码仓库,覆盖多种编程语言,并且每日都有大量系统上线。在过去,我们一直使用 cobra 工具进行代码审计,根据组织情况对其进行了深度定制cobra并实现了 SCA 扫描功能。然而,我们发现静态规则扫描会有较多误报和漏报,同时针对不同编程语言的扫描规则的维护也较为繁琐,涉及到诸如 Java、Go、C# 等多个语言。
需要进一步改进工具的准确性和易用性,以提高代码审计效率和质量。
于是我有了一些关于在大规模场景下使用 CodeQL 进行扫描的思考,但需要注意的是,CodeQL 不允许集成到 CI/CD 中。因此本文只是为大家提供一个思路。
扫描流程图
监控gitlab仓库更新
监控方式
我们可以考虑两种方法来监控仓库代码是否更新,一种是主动探测,另一种是被动 Hook。
主动探测的方法比较常见,可以通过定时任务或者轮询的方式,定期检查仓库代码是否更新,并对更新的代码进行相应的处理。这种方法通常会对服务器产生一定的压力和额外的网络流量,需要考虑到资源的利用效率。但好处在于,遇到外部披漏漏洞时,可以一键下发任务,自动审查项目代码。
被动Hook的方法则可以监控上线邮件,获取到对应的仓库地址或者通过gitlab的webhook来将更新的仓库推送到扫描平台进行扫描。
综合而言,可以根据实际情况选择适合自身业务的代码更新监控方法。对于具体的实施方案,还需要结合项目特点、开发团队和管理需求等多方面因素进行详细分析和评估,从而确保方案的有效性和可行性。
扫描
fastapi启动服务,开放一个添加任务的接口,调用codeql
任务推送至该接口进行扫描
添加自定义规则功能
通过维护一份规则名称表,在前端选择对应规则的时候,能够找到后端具体规则路径,加载具体的codeql规则,从而实现自定义规则的扫描。
拉黑功能
对于误报告警,可以考虑将其加入黑名单中,从而防止重复报警,减少噪声。
点击拉黑,把代码仓库名称(地址)、扫描规则、扫描的文件路径、文件具体行加入黑名单库。
理想效果图
参考
https://cobra.feei.cn/
https://github.com/ZhuriLab/Yi
交流
欢迎各位多多指出不足之处并和我进行交流,可以加我v:boat9999999,进入安全开发讨论群交流
最后还要感谢我的好大哥、camille的作者@zhengjim给我提供技术上的帮助与支持