关于dep-scan
dep-scan是一款针对软件依赖组件的安全审计工具,可以帮助广大研究人员对软件项目中引入的依赖组件进行安全审计。该工具支持本地代码库或容器镜像,可以与各种CI环境集成,比如说Azure Pipelines、CircleCI、Google CloudBuild。值得一提的是,dep-scan的运行是不需要服务器的。
功能介绍
1、基于CVE的本地代码库和容器镜像安全扫描。
2、代码包漏洞扫描在本地执行,且速度非常快,不需要使用服务器。
3、针对软件包提供最佳修复版本建议。
4、对依赖性混淆攻击和维护风险执行深度代码包安全审计。
注意:容器内只有跟目标应用程序相关的依赖包才可以进行安全审计,系统级的代码包目前还不支持进行安全扫描。
漏洞数据源
OSV
NVD
GitHub
NPM
工具下载
广大研究人员可以使用下列命令将该项目源码克隆至本地:
git clone https://github.com/AppThreat/dep-scan.git
工具选项
usage: depscan [-h] [--no-banner] [--cache] [--sync] [--suggest] [--risk-audit] [--private-ns PRIVATE_NS] [-t PROJECT_TYPE] [--bom BOM] -i SRC_DIR [-o REPORT_FILE] [--no-error] -h, --help show this help message and exit --no-banner Do not display banner --cache Cache vulnerability information in platform specific user_data_dir --sync Sync to receive the latest vulnerability data. Should have invoked cache first. --suggest Suggest appropriate fix version for each identified vulnerability. --risk-audit Perform package risk audit (slow operation). Npm only. --private-ns PRIVATE_NS Private namespace to use while performing oss risk audit. Private packages should not be available in public registries by default. Comma separated values accepted. -t PROJECT_TYPE, --type PROJECT_TYPE Override project type if auto-detection is incorrect --bom BOM Examine using the given Software Bill-of-Materials (SBoM) file in CycloneDX format. Use cdxgen command to produce one. -i SRC_DIR, --src SRC_DIR Source directory -o REPORT_FILE, --report_file REPORT_FILE Report filename with directory --no-error Continue on error to prevent build from breaking
工具使用
dep-scan非常适合在CI环境中使用,也可以作为本地开发过程中的一款扫描工具使用。
结合ShiftLeft使用
dep-scan整合了ShiftLeft的扫描功能,即一款免费开源的SAST工具。如需启用该功能,只需要使用下列命令参数即可:
--- --type python,depscan,credscan
扫描本地项目(Python版本)
sudo npm install -g @appthreat/cdxgen pip install appthreat-depscan
上述命令执行后,将会安装两个命令,即cdxgen和scan。
我们可以直接调用扫描命令:
cd <project to scan> depscan --src $PWD --report_file $PWD/reports/depscan.json
扫描本地容器(Python版本)
扫描容器“shiftleft/scan-slim”的“latest”标签:
depscan --no-error --cache --src shiftleft/scan-slim -o containertests/depscan-scan.json -t docker
将“license”添加至扫描类型,并执行许可证审计:
depscan --no-error --cache --src shiftleft/scan-slim -o containertests/depscan-scan.json -t docker,license
我们还可以使用sha256摘要指定扫描容器:
depscan --no-error --src redmine@sha256:a5c5f8a64a0d9a436a0a6941bc3fb156be0c89996add834fe33b66ebeed2439e -o containertests/depscan-redmine.json -t docker
我们也可以使用Docker来保存容器镜像,然后执行深度扫描:
docker save -o /tmp/scanslim.tar shiftleft/scan-slim:latest # podman save --format oci-archive -o /tmp/scanslim.tar shiftleft/scan-slim:latest depscan --no-error --src /tmp/scanslim.tar -o reports/depscan-scan.json -t docker
扫描本地项目(Docker容器)
使用默认配置扫描:
docker run --rm -v $PWD:/app appthreat/dep-scan scan --src /app --report_file /app/reports/depscan.json
使用自定义环境变量扫描:
docker run --rm \ -e VDB_HOME=/db \ -e NVD_START_YEAR=2010 \ -e GITHUB_PAGE_COUNT=5 \ -e GITHUB_TOKEN=<token> \ -v /tmp:/db \ -v $PWD:/app appthreat/dep-scan scan --src /app --report_file /app/reports/depscan.json
支持的语言和包格式
语言 | 包格式 |
node.js | package-lock.json, pnpm-lock.yaml, yarn.lock, rush.js |
java | maven (pom.xml [1]), gradle (build.gradle, .kts), scala (sbt) |
php | composer.lock |
python | setup.py, requirements.txt [2], Pipfile.lock, poetry.lock, bdist_wheel, .whl |
go | binary, go.mod, go.sum, Gopkg.lock |
ruby | Gemfile.lock, gemspec |
rust | Cargo.toml, Cargo.lock |
.Net | .csproj, packages.config, project.assets.json, packages.lock.json |
docker / oci image | 所有支持的语言,系统软件包除外 |
工具运行截图
项目地址
dep-scan:【GitHub传送门】
参考资料
https://github.com/ShiftLeftSecurity/sast-scan
https://github.com/AppThreat/WebGoat/blob/develop/azure-pipelines.yml#L33
https://github.com/AppThreat/dep-scan/blob/master/.github/workflows/pythonapp.yml