写点什么

IAST 最佳实践 | 利用洞态做开源组件的安全治理

作者:火线安全
  • 2022 年 2 月 11 日
  • 本文字数:2681 字

    阅读完需:约 9 分钟

IAST 最佳实践 | 利用洞态做开源组件的安全治理

背景

某大型集团在使用洞态一段时间后,发现其配套使用的组件管理的漏洞知识库内容存在滞后性和部分不准确性。倘若将这些内容引入到工单系统中作为安全组件整改任务,那么提供给开发部门的漏洞描述、漏洞危害和修复建议便会显得没有说服力。因此需要寻找实时、有效且免费的安全漏洞知识库的信息来源。

解决方案

目前业内开源组件的安全知识库的来源,主要有两种:

  • 人工维护的商用漏洞数据库

  • NVD 免费漏洞数据库

由于使用洞态提供的组件信息,最好还是集成免费信息来源。由于 dependency check 工具是通过调用 NVD 数据进行组件安全漏洞识别,因此一开始是想基于其扫描原理进行二次开发,从而配合洞态组件信息进行组件检测,但其工作量太高。

于是直接用 python 本地调取 NVD 数据进行识别。

def nvd_download():    for i  in range(2002,2022):        url = "https://nvd.nist.gov/feeds/json/cve/1.1/nvdcve-1.1-{}.json.gz".format(i)        r = requests.get(url=url)        pathname = os.path.join("/opt/vul",url.split("/")[-1])        with open(pathname,"wb") as f:            f.write(r.content)            f.close()
复制代码

但是在实际使用时,我并不知道如何去构造 CPE 语句进行查询,因此这种方案暂时被放弃了。

此后,偶然发现在 maven 仓库中居然有每个版本的漏洞信息。那么我是否可以根据自身项目与其做对比,获取安全漏洞信息?

实际落地

当我想通过自动化方式去获取信息时,发现会触发 cloudflare 的五秒盾,进入人机识别。

后面花时间研究了一下绕过 CF 的手段——使用 selemiun + chrome 有界面请求一次,关闭浏览器,再请求一次,关闭浏览器,如此循环,即可绕过(外网 IP 访问很少会触发拦截)。

洞态开源组件 API 提供的组件名字内容如下:

components = ['log4j-1.2.16.jar','log4j-1.2.17.jar','log4j-ecs-layout-0.1.3.jar','maven:com.fasterxml.jackson.core:jackson-databind:2.8.4:','maven:com.fasterxml.jackson.core:jackson-databind:2.9.10.6:','maven:mysql:mysql-connector-java:5.1.34:','maven:org.springframework.amqp:spring-amqp:1.1.3.RELEASE:','maven:org.springframework.amqp:spring-amqp:1.7.5.RELEASE:','maven:org.springframework.amqp:spring-rabbit:1.1.3.RELEASE:','maven:org.springframework.integration:spring-integration-ftp:4.3.7.RELEASE:','maven:org.springframework.integration:spring-integration-kafka:2.2.0.RELEASE:','maven:org.springframework.kafka:spring-kafka:1.2.3.RELEASE:','maven:org.springframework.retry:spring-retry:1.1.3.RELEASE:','maven:org.springframework.retry:spring-retry:1.2.1.RELEASE:','maven:org.springframework:spring-aop:4.3.29.RELEASE:','mybatis-3.1.1.jar','mybatis-3.2.3.jar','mybatis-spring-1.2.0.jar','xstream-1.3.1.jar','xstream-1.4.14.jar','zkclient-0.1.jar','zookeeper-3.3.6.jar','abc-SNAPSHOT.jar'
]
复制代码

我将其划分为三种类型:

  • 自带 maven 字符:这种类型可以直接拆分,作为参数内容可以传参;

  • SNAPSHOT:这种类型定义为业务系统打包生成,忽略;

  • 其他:这种类型要放到 maven 中搜索,找到其地址。

for c in components:    c = c.replace(".jar",'')    if  "maven:" in c:        print(c+":  "+str(maven_component(c)))    elif "SNAPSHOT" in c:        pass    else:        print(c+":  "+str(search_component(c)))
复制代码

maven 提供的安全漏洞信息分为 direct(直接影响)和 dependencies(当前组件的依赖组件中存在的漏洞),我们关注直接影响,忽略被受影响。

运行结果如下,包含四个字段内容:组件名字、CVE 列表(cvelist)、安全版本(safe_version)、组件名字组织(org)。

log4j-1.2.16:  ([], '', '')log4j-1.2.17:  ([], '', '')log4j-ecs-layout-0.1.3:  ([], '', '')maven:com.fasterxml.jackson.core:jackson-databind:2.8.4::  (['CVE-2021-20190', 'CVE-2020-9548', 'CVE-2020-9547', 'CVE-2020-8840', 'CVE-2020-36188', 'CVE-2020-36186', 'CVE-2020-36184', 'CVE-2020-36182', 'CVE-2020-36180', 'CVE-2020-35491', 'CVE-2020-25649', 'CVE-2020-24616', 'CVE-2019-20330', 'CVE-2019-17267', 'CVE-2019-16942', 'CVE-2019-14892', 'CVE-2019-14439', 'CVE-2019-12814', 'CVE-2019-12086', 'CVE-2018-5968', 'CVE-2018-19361', 'CVE-2018-14721', 'CVE-2018-14719', 'CVE-2018-12023', 'CVE-2018-12022', 'CVE-2017-7525', 'CVE-2017-15095'], '2.10.5.1', 'com.fasterxml.jackson.core')maven:com.fasterxml.jackson.core:jackson-databind:2.9.10.6::  (['CVE-2021-20190', 'CVE-2020-36189', 'CVE-2020-36188', 'CVE-2020-36187', 'CVE-2020-36185', 'CVE-2020-36183', 'CVE-2020-36181', 'CVE-2020-36179', 'CVE-2020-35490'], '2.10.5.1', 'com.fasterxml.jackson.core')maven:mysql:mysql-connector-java:5.1.34::  (['CVE-2019-2692'], '8.0.16', 'mysql')maven:org.springframework.amqp:spring-amqp:1.1.3.RELEASE::  ([], '', 'org.springframework.amqp')maven:org.springframework.amqp:spring-amqp:1.7.5.RELEASE::  ([], '', 'org.springframework.amqp')maven:org.springframework.amqp:spring-rabbit:1.1.3.RELEASE::  ([], '', 'org.springframework.amqp')maven:org.springframework.integration:spring-integration-ftp:4.3.7.RELEASE::  ([], '', 'org.springframework.integration')maven:org.springframework.integration:spring-integration-kafka:2.2.0.RELEASE::  ([], '', 'org.springframework.integration')maven:org.springframework.kafka:spring-kafka:1.2.3.RELEASE::  ([], '', 'org.springframework.kafka')maven:org.springframework.retry:spring-retry:1.1.3.RELEASE::  ([], '', 'org.springframework.retry')maven:org.springframework.retry:spring-retry:1.2.1.RELEASE::  ([], '', 'org.springframework.retry')
复制代码

​最后将 CVE 放到 CVE search 中查找到漏洞描述和漏洞评分。


关于洞态 IAST

洞态 IAST 是全球首个开源 IAST,于 2021 年 9 月 1 日正式开源发布。洞态 IAST 专注于 DevSecOps,具备高检出率、低误报率、无脏数据的特点,帮助企业在应用上线前发现并解决安全风险。自开源发布以来,洞态 IAST 备受开源社区人员和企业的关注,包括去哪儿、同程旅行、轻松筹、好大夫在线等在内的上百家企业均已成为洞态用户。

官网地址:http://dongtai.io


用户头像

火线安全

关注

还未添加个人签名 2021.10.22 加入

还未添加个人简介

评论

发布
暂无评论
IAST 最佳实践 | 利用洞态做开源组件的安全治理