背景
使用洞态一段时间后,发现目前组件管理的漏洞知识库内容存在滞后性和部分不准确性,将这些内容引入到工单系统作为安全组件整改任务,提供给开发的漏洞描述、漏洞危害和修复建议就显得很鸡肋。
所以需要寻找实时、有效、免费的安全漏洞知识库的信息来源。
解决方案
我深入研究了目前业内对于开源组件的安全知识库的来源,主要来源有两种:
- 商用人工维护更新
- 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(那个组件受xstream影响),我们关注的直接影响,被受影响不管它。
最后运行结果如下,有四个字段内容:组件名字、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里面找到漏洞描述、漏洞评分。
PS:请star我写的书籍:《安全运营指南》
https://github.com/yingshang/SocBook.git