上一篇文章里我介绍了用来做第三方组件安全管理的新工具OWASP DependencyTrack的特点,它的典型使用场景等等,这篇文章里我将重点介绍OWASP DependencyTrack的搭建和基本使用。
安装
OWASP DependencyTrack(下文简称DT)提供了3种安装方式,分别是容器化部署、自运行安装包,以及可以直接在Tomcat里运行的WebApp包。我觉得最方便的还是容器化部署运行DT,只需3条命令即可:
# 下载DependencyTrack镜像docker pull owasp/dependency-track
# 创建并使用宿主机上的存储以避免数据丢失docker volume create --name dependency-track
# 在8080端口上运行DependencyTrackdocker run -d -m 8192m -p 8080:8080 --name dependency-track -v dependency-track:/data owasp/dependency-track
片刻之后(取决于你的网速),DependencyTrack就成功运行在本地8080端口了。不过首次运行DT的时候,还会有一些后台任务在运行,主要是DT需要把网上的漏洞数据库同步到本地,所以此时可以稍微等一会儿再用DT,否则可能出现检测不出安全问题的情况。话虽如此,但我发现同步数据的速度也还是挺快的,所以首次运行这个你略微注意一下就好,不是问题。
基本使用
打开DependencyTrack之后你会发现里面空空如也(配置除外),啥都没有,当然这也很合理嘛,毕竟我们还没有往DT发送任何数据。那怎么用DT检测第三方组件的安全性呢?别急,我得先讲讲DT的基本原理。
DependencyTrack是第三方组件安全检测和管理平台,它接收调用者提供的Software BOM(软件物料清单),然后检查物料清单中的各个组件(以及当前清单中的版本)在漏洞数据库中是否存在已知安全漏洞的记录,并通过Dashboard展示出来。
所以要把DT用起来,你需要先准备好一份SBOM清单,然后发送给DT,等待DT完成扫描检测之后,在DT的管理界面上查看结果。
你可能会问,SBOM是什么东西?SBOM(Software Bill of Material)中文名叫软件物料清单,如果你构建了一个应用程序,使用到了一些第三方组件,那么这个SBOM清单里就有你的应用程序所依赖的所有第三方组件的信息(当然还有第三方组件的第三方组件),其中最重要的就是组件的标识符(group、name、version)以及PURL数据。有了这些数据,DT才能到漏洞数据库里做搜索。
有很多工具可以帮我们生成SBOM。我用Gradle做构建工具,所以用的cyclonedx-gradle-plugin,如果你用maven,可以用CycloneDX Maven Plugin。其他构建工具支持,可去CycloneDX的官网上查找。
以Gradle构建工具为例,你需要在build.gradle文件里引入cyclonedx-gradle-plugin:
buildscript {
repositories {
mavenCentral()
maven {
url "https://jitpack.io"
}
}
dependencies {
classpath "com.cyclonedx:cyclonedx-gradle-plugin:1.2.0"
}
}
apply plugin: "org.cyclonedx.bom"
注意,引入cyclonedx-gradle-plugin插件有巨坑,你需要额外指定cyclonedx-gradle-plugin插件的仓库地址(详见上面例子里的配置),否则安装会报错。
然后就可以在命令行里运行以下命令来生成你的应用对应的SBOM了:
./gradlew cyclonedxBom
生成的SBOM会默认放在项目根目录下的build/reports目录下,名字为bom.json或xml。我们接下来需要做的就是把这个bom文件传递给DT,让它对立面的组件进行安全检查。
不过这里又会遇到另一个巨坑。DT官方推荐使用DependencyTrack Jenkins插件来完成bom清单的推送,当然也非常含糊的说可以通过命令行的方式(例如通过curl)直接把bom文件提交给DT。但实践下来后发现,目前(3.8版本)只有通过Jenkins插件的方式能正常把bom文件提交给DT,并且只能上传xml格式的SBOM。我用命令行方式尝试了很多次都没成功上传,最后不得已放弃了。
如果你本来就用Jenkins来做CI/CD,那么这就不是问题,但如果你用GoCD或者别的CI工具,那就有点难办了。如果你解决了这个问题,也请告诉我一下。同时也希望DT能尽快解决掉这个问题。
Jenkins的配置可以参考如下:
到这里,我们成功生成了SBOM,并且也上传给了DT,接下来你只要去DT的管理界面上,就能看到对应的分析结果。你可以看到DT检查了哪些第三方组件、发现了哪些问题、有哪些License等等。
以上就是关于DependencyTrack的基本使用了,在下篇文章里,我将介绍DT的一些特色功能。