zoukankan      html  css  js  c++  java
  • SDL建设-三方依赖库扫描

    说明: 本文首发自 https://www.secpulse.com/archives/73373.html ,转载请注明出处。

    文章综述

    本文主要介绍Dependency-Check工具的工作原理和使用方法,并提供一个开源方案帮助企业建设SDL中的一环。

    Dependency-Check简介

    使用 "存在已知漏洞的组件" 已经成为OWASP TOP 10的漏洞之一了。所以,越来越有必要对上线前的项目做好三方依赖库的检测,寻找中已知的漏洞,降低上线后的安全风险。Dependency-Check 就是这样的一款工具。他会分析软件构成,检测项目中依赖项的公开披露漏洞。Dependency-Check 常用于扫描java.NET程序,另外还有些实验性的分析器,例如:python、ruby、php以及nodejs等,这些作为实验性研究是因为他们的高误报率。如果你公司主要使用c#,java开发程序,那这款工具作为项目上线前的漏洞扫描不乏是个好选择。

    Dependency-Check 发行的版本主要有jenkins插件、命令行工具、maven插件等,详解介绍可查看https://github.com/jeremylong/DependencyCheck,以下是基于命令行工作模式的介绍。

    工作原理

    1. Dependency-Check工作的方式是通过分析器对文件进行扫描搜集信息,搜集到的信息被叫做迹象。
    2. 这边共搜集3种迹象,分时是vendor(供应商),product(产品)和version(版本)。例如,jarAnalyzer将从jar文件包中的Mainfest、pom.xml和包名进行信息搜集,然后把各种搜集到的源放到一个或者多个迹象表里。
    3. 通过搜集到的迹象和CPE条目(NVD、CVE数据索引)进行匹配,分析器匹配到了就会给个标志发送到报告。
    4. Dependency-Check 目前不使用hash识别文件,因为第三方依赖从源码中的hash值构建通常不会匹配官方发布版本的hash。后续版本中可能会增加一些hash来匹配一些常用的第三方库,例如Spring, Struts等。

    常用命令

    详细参数可使用./dependency-check.sh -h查看,以下列出一些最常用的参数:

    ./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、项目迭代不快,或者只想监控重点项目:可让业务提单,安全人员进行扫描后提供结果和修复建议给到业务方。

    (注意点:报告是英文报告,不过很直观,可以根据上面的介绍写个说明文档供业务参考;报告没有修复参考,一般的修复方案是推荐有漏洞的组件更新到最新版。)

    根据实际业务场景的需求,笔者把这个Dependency-Check二进制版本封装成web接口,可供自己和业务方调用。项目地址:https://github.com/he1m4n6a/dcweb。项目中还有很多地方可以完善,后续根据需求会补充改造。例如:

    1、添加接口鉴权

    2、解析报告并输出中文漏洞报告到邮件

  • 相关阅读:
    js判断网页是否加载完毕 包括图片
    文本框只能输入数字,输入其他自动过滤 几种方法
    pagebean pagetag java 后台代码实现分页 demo 前台标签分页 后台java分页
    nodejs微信公众号快速开发|自定义关键字回复
    Putty使用ssh方式登录服务器
    什么是Q Learning?
    使用python显示当前系统中的所有进程并关闭某一进程
    树莓派3搭建低成本NAS实现文件共享
    Fortran变量的定义和声明新写法
    Fortran中将多个文件进行编译运行的方法
  • 原文地址:https://www.cnblogs.com/he1m4n6a/p/9230888.html
Copyright © 2011-2022 走看看