Mysticbinary

DevSecOps之组件卡点、代码依赖安全审计(初级)


什么是组件卡点、代码依赖安全审计

现代的软件开发或多或少的都会引入第三方的开源组件或代码依赖,如何保证这些依赖、组件都是安全性的?
组件卡点、代码依赖安全审计就是,开发团队在开发完代码之后,都会向代码托管的部门进行代码提交,在这个阶段,代码托管团队就可以做组件的卡点、代码依赖安全审查工作。

解决方案构思

大致步骤

  1. 根据企业的DevOps流程,等业务线做构建、编译时,自动在CI/CD平台做代码审查,进行组件卡点工作;
  2. 获取项目内的所有开源组件名字、版本等信息;
  3. 同步漏洞库信息进行本地查询、或者远程请求漏洞库;
  4. 将开源组件版本号对比对应的漏洞;

获取漏洞库的一些思路:

  • 商业的漏洞库
  • NVD (https://nvd.nist.gov/)
  • maven 仓库中也包含有每个版本的漏洞信息(不过有限制,需要绕过)

通常来说,如果安全团队人手不过,或者能力不够,是需要借助商业化的安全产品来完成这个安全需求的。
不过也可以尝试一些免费的开源产品:
OSV-Scanner + OSV

Golang 供应链攻击的认识(了解)

Go构建工具为开发人员在项目中下载和使用开源库提供了一种简单的方式。与Python和Rust等其它语言相比,Go并不使用可以下载库的中央代码仓库。相反,Go工具直接从版本控制系统(如GitHub)提取代码包。(注意:我们关注的是Go,但其它软件包管理器(如NPM)也允许从版本控制系统中提取代码,因此也容易受到这种攻击。)

GitHub是互联网上最大的源代码库,大多数的Go包都在它上面托管。GitHub提供的一个功能是允许用户更改用户名。

问题的根源在于,一些大牛更改用户名后,大牛旧用户名就可以供其他任何人使用。

攻击者可以很容易地使用被弃用的用户名,并开始向任何下载该软件包的人提供恶意代码,攻击者这样做基本上依赖于用户名前所有者获得的信誉度。在Go包代码仓库中这样做可能会导致连锁反应,大大扩大代码分发范围,并影响大量下游产品。

解决方案:
在交付给客户或部署到生产之前,要对软件版本进行扫描,检查是否存在篡改数据和后门程序。并将其整合到自己的开发或构建流水线中。

Reference

开源、精确和分布式的漏洞信息库
https://osv.dev/

OSV-Scanner(OSV的前端,可以用于查找代码依赖中的安全漏洞)
https://github.com/google/osv-scanner

posted on 2022-12-04 10:44  Mysticbinary  阅读(118)  评论(0编辑  收藏  举报

导航