freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

利用洞态做开源组件的安全治理
2022-01-14 22:36:57
所属地 广东省

背景

使用洞态一段时间后,发现目前组件管理的漏洞知识库内容存在滞后性和部分不准确性,将这些内容引入到工单系统作为安全组件整改任务,提供给开发的漏洞描述、漏洞危害和修复建议就显得很鸡肋。

所以需要寻找实时、有效、免费的安全漏洞知识库的信息来源。

解决方案

我深入研究了目前业内对于开源组件的安全知识库的来源,主要来源有两种:

  • 商用人工维护更新
  • 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语句进行查询。这种方案暂时给我放弃了。

1642149176_61e135383b8b70623c630.png!small?1642149176443

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

1642163357_61e16c9d74fa57db3c8e0.png!small?1642163358390


实际落地

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

1642144287_61e1221f72daf7950a5fe.png!small?1642144287434


后面花时间研究了一下绕过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(那个组件受xstream影响),我们关注的直接影响,被受影响不管它。

1642169830_61e185e65e1284c90280b.png!small?1642169831040

最后运行结果如下,有四个字段内容:组件名字、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丢到CVEsearch里面找到漏洞描述、漏洞评分。1642170423_61e18837449e03f4f5314.png!small?1642170424024



PS:请star我写的书籍:《安全运营指南》

https://github.com/yingshang/SocBook.git

# iAST # 洞态Iast
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录