极狐GitLab DevSecOps
极狐GitLab DevSecOps 具有七大安全功能:容器镜像扫描、静态应用安全测试 (SAST)、动态应用安全扫描(DAST)、密钥检测、License合规、依赖项扫描以及模糊测试,覆盖了软件开发的全生命周期。极狐GitLab DevSecOps 除了能够助力用户真正的做到安全左移和持续自动化以外,还具有以下特点:
- 使用方便,用户友好
用户在开启 DevSecOps 功能(旗舰版用户默认可见可用,其他版本用户如果想用,可以申请免费试用,流程参考文章结尾章节)之后,只需要在 CI/CD Pipeline 中进行简单配置(一般仅为寥寥数行代码,下文会演示)即可开始使用,用户无需安装配置第三方工具或插件,减轻了维护多种安全工具链所带来的工作负担,同时对研发、安全、运维等人员也非常友好(只需简单配置 yaml 文件即可),提升了上述人员的使用体验。
- 结果可视,公开透明
所有安全扫描结果都会在安全面板进行统一展示,可以根据不同的过滤器选项来得到指定安全防护手段的安全报告,只要是与此相关相关且已经获取授权的人员,都可以查看到相应的安全报告,包括漏洞内容,修复策略等。
- 追踪方便,便于管理
可以通过配置,在提交 MR 的时候,对于所提交代码进行安全扫描,整个扫描结果最终会显示在 MR 中,如果发现有安全漏洞,可以立马创建相应的 Issue 来对此漏洞进行追踪管理。这种和研发工作流相结合的方式能够大大缩短安全漏洞的修复时间,同时整个过程是公开透明的,能够让团队成员之间建立起良好的信任。
前面的文章中分别介绍了极狐GitLab DevSecOps 功能中的容器镜像扫描、敏感信息检测以及依赖扫描:
极狐GitLab DevSecOps 之容器镜像扫描
极狐GitLab DevSecOps 之敏感信息检测
极狐GitLab DevSecOps 之依赖项扫描
本文来演示极狐GitLab DevSecOps 功能中 SAST 的用法。
SAST
SAST 是 Static application security testing 的缩写,也即静态应用程序安全测试,俗称静态分析,是一种应用程序的安全测试手段,出现较早,主要是通过分析源码来发现潜在的安全漏洞,从而确保软件安全。
SAST 属于白盒测试,分析结果能够精确到代码行数,而且通常是在代码编译之前进行,因此属于 SDLC 的早期,修复问题的成本相对较低。
极狐GitLab DevSecOps 之 SAST
极狐GitLab的 SAST 功能支持多种语言,包管理器,框架等,诸如 Java、Go、.Net、JavaScript、Node.js等,Helm Charts、Kubernetes manifests等,React。只需要在极狐GitLab CI/CD 中加入如下两行代码即可使能 SAST:
include:
- template: Security/SAST.gitlab-ci.yml
下面通过一个 Demo Repo 来演示使用流程。Demo Repo 很简单,代码目录如下:
├── Dockerfile
├── README.md
└── main.go
main.go 的内容如下:
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, this is JiHu!!")
}
func main() {
http.HandleFunc("/jihu", handler)
http.ListenAndServe(":9998", nil)
}
触发 CI/CD Pipeline,查看分析结果:
在安全仪表盘(安全与合规 --> 漏洞报告)可以看到详细的报告:
与极狐GitLab workflow 的结合
SAST 的分析结果只是保证软件安全的其中一步,重要的是能够对问题进行追踪管理,方便相关人员进行修复。而对于极狐GitLab来讲,可以将 SAST 与 MR 无缝集成。构建起一个标准的端到端软件安全交付流水线:
同样使用上述的 Demo,在创建 MR 的时候,会触发 CI/CD 进行 SAST 分析,最终的结果会展示在 MR 中:
紧接着就可以通过创建 Issue 来对相应的 SAST 漏洞进行追踪管理:
极狐GitLab DevSecOps 功能试用申请
DevSecOps 功能是极狐GitLab旗舰版专属的,但是用户可以申请免费试用。
选择一个想要使用 DevSecOps 功能的 Group,点击左侧导航栏中的安全,可以看到如下界面并点击开始免费使用:
在出现的表单中输入相应的信息,点击继续:
点击开始免费试用即可:
接着就可以看到 DevSecOps 功能已经开启: