组件漏洞测试⼯具---Dependency-Check
⽬录
⽂章综述
本⽂主要介绍Dependency-Check⼯具的⼯作原理和使⽤⽅法,并提供⼀个开源⽅案帮助企业建设SDL中的⼀环。
Dependency-Check简介
使⽤ "存在已知漏洞的组件" 已经成为OWASP TOP 10的漏洞之⼀了。所以,越来越有必要对上线前的项⽬做好三⽅依赖库的检测,寻中已知的漏洞,降低上线后的安全风险。Dependency-Check 就是这样的⼀款⼯具。他会分析软件构成,检测项⽬中依赖项的公开披露漏洞。Dependency-Check 常⽤于扫描java和.NET程序,另外还有些实验性的分析器,例如:python、ruby、php以及nodejs等,这些作为实验性研究是因为他们的⾼误报率。如果你公司主要使⽤c#,java开发程序,那这款⼯具作为项⽬上线前的漏洞扫描不乏是个好选择。
⼯作原理
1. Dependency-Check⼯作的⽅式是通过分析器对⽂件进⾏扫描搜集信息,搜集到的信息被叫做迹象。
2. 这边共搜集3种迹象,分时是vendor(供应商),product(产品)和version(版本)。例如,jarAnalyzer将从jar⽂件包中的
Mainfest、l和包名进⾏信息搜集,然后把各种搜集到的源放到⼀个或者多个迹象表⾥。
3. 通过搜集到的迹象和CPE条⽬(NVD、CVE数据索引)进⾏匹配,分析器匹配到了就会给个标志发送到报告。
4. Dependency-Check ⽬前不使⽤hash识别⽂件,因为第三⽅依赖从源码中的hash值构建通常不会匹配官⽅发布版本的hash。后续版本
中可能会增加⼀些hash来匹配⼀些常⽤的第三⽅库,例如Spring, Struts等。
常⽤命令
详细参数可使⽤./dependency-check.sh -h查看,以下列出⼀些最常⽤的参数:
cve漏洞库
./dependency-check.sh -n --project "test" --scan "WEB-INF/lib/" -o output.html
· -n 不更新漏洞库,默认4⼩时⾃动拉取
·
--project 项⽬名字
· --scan 扫描的路径或⽂件(可以扫⽬录,也可以直接扫压缩⽂件,zip,war,tgz等)
/dependency-check.sh -n --project "test" --scan "strusts2.war" --log logfile
· 扫描压缩⽂件
· --log ⽇志记录
./dependency-check.sh --updateonly
· --updateonly 只更新数据库,不做扫描
报告解读
部分报告截图:
关于扫描的准确性,笔者搜集测试了java三⽅依赖库。得到的结论是准确率⾼、误报率低、覆盖率⾼,适合在实际业务中使⽤该⼯具进⾏上线前的漏洞扫描(java三⽅依赖库)。
报告中⼀些重要字段的含义:
· Dependency - 被扫描的第三依赖库名字
· CPE - 所有被识别出来的CPE.
· GAV - Maven 组, Artifact, 版本 (GAV).
· Highest Severity - 所有关联的cve的最⾼漏洞等级
· CVE Count - 关联的cve个数
· CPE Confidence - dependency-check正确识别cpe的程度
· Evidence Count - 识别CPE的数据个数
使⽤场景
在企业中实际应⽤的场景:
1、项⽬很多,迭代很块:可以考虑结合代码管理系统,每次新发布前,⾃动提交进⾏扫描
2、项⽬迭代不快,或者只想监控重点项⽬:可让业务提单,安全⼈员进⾏扫描后提供结果和修复建议给到业务⽅。
(注意点:报告是英⽂报告,不过很直观,可以根据上⾯的介绍写个说明⽂档供业务参考;报告没有修复参考,⼀般的修复⽅案是推荐有漏洞的组件更新到最新版。)
例如:
1、添加接⼝鉴权
2、解析报告并输出中⽂漏洞报告到邮件
缺点
报告的可读性还是有点差的,这个项⽬貌似开源的,如果能将呈现⽅式修改⼀下就好了,特别是将CVE也放到⼀览⾥⾯就更好了。。。