企业安全漏洞通告引擎

背景

如今大多数企业都在用漏洞扫描+漏洞通告,存在如下两个问题:

1、漏扫存在“扫描周期长、扫描库更新不及时”等情况,同时扫描报告中有无数干扰项,导致了漏扫报告约等于“漏洞信息堆砌”,真正有用的可能没几个,而让甲方运维人员从中找到有用的信息,真是异常耗时耗力。

2、安全厂商的漏洞通告是“只通知,具体影响那台服务器,运维自己找去吧。”

由以上两个痛点,我们想出来一个二者结合的用法:

通过各种方法收集到所有服务器当前的中间件、数据库等版本,再通过资产列表匹配到相应服务器的运维人员邮箱,最后再到靠谱的安全厂商漏洞公告网站抓到最新的漏洞资讯以及影响范围,一旦“当前版本”处于“影响版本”范围内,则立即进行邮件告警。

整体框架

整体分为输入、主引擎以及输出三个部分。

1、输入部分

a) 版本探测:针对服务器各应用的版本探测扫描、不便于扫描的区域进行手工检查版本并录入 b) 爬虫:选出多家安全厂商,通过其安全漏洞公告的网站进行每日(或更高频次)漏洞信息抓取

2、主引擎部分

a) Python:真心好用 b) 数据库:制定“应用-IP-版本-管理员”表 c) 版本比较:通过比较漏洞影响范围&当前应用版本,来判断是否存在安全问题 d) 最新漏洞告警:定时任务运行(每日一次或更高频次),以自动发现最新的安全漏洞

3、输出部分

根据“应用-IP-版本-管理员”的对应关系,自动将相应的应用漏洞发送给相应的运维管理员,实现较为精准的自动化漏洞通告&新漏洞预警。

输入部分

这里有多种方式来实现版本的自动扫描,如Nessus、各厂家的漏扫等等。

由于应用版本更新频率低,漏洞更新频率高,故而通过每个月一次的扫描可以较为准确地获得当前可探测到的服务器中所运行的应用版本。

另外需要制作出“应用-IP-版本-管理员”的对应关系,以便发现最新漏洞后通知给相应应用的负责人。

1、制作“应用- IP-版本”对应关系表(表名为apps)

首先需要定位“版本信息”所在位置,通过漏扫导出的excel主机报表可以发现,仅在“扫描报告-漏洞信息sheet-返回信息列”可能会包含版本信息(如下图)。

故想办法定位到指定sheet+指定列,从而使用正则获取到形如[Microsoft-IIS/8.5]中的信息

这里会用到pyexcel_xls,该模块可以读取excel表中信息,如下。

之后再通过细粒度的正则和各种奇葩内容的排除后,得到当前版本信息,如nginx 1.8.1,存到数据库待用。

每次扫描都会有大量的主机报表产生(如下图)

此时需要逐个遍历目录中的所有文件:

于是通过目录遍历+excel遍历后,应用- IP-版本的对应关系就搞定了。

2、完善“应用-IP-版本-管理员关系对应表”

有了上面的表还不够,即使有漏洞通告,无法自动落实到人,也是空谈。于是要将IP-管理员的对应关系加入进来。

此时我们需要先要有信息系统资产表,其中至少应包括“IP-管理员”(如下图)

再根据每次遍历扫描结果输出目录中的报表IP作为查询条件,进行资产表查询,将获取到的管理员名称添加到“apps”表中的对应位置,制作完毕后如下图所示,资产输入部分完毕。

3、漏洞公告网站爬虫

爬虫的目的:抓到所有应用名称的漏洞信息&影响范围。

爬虫示例:绿盟漏洞公告爬虫

思路:

1、在keyword的参数值处提交当前系统环境中所具备的应用名称

2、利用urllib(或urllib2)抓到所有页面的应用漏洞信息

3、可能存在多页记录,每一页都遍历全

4、把所有抓到的标题做汇总,得到“漏洞标题+漏洞超链接”的list

5、遍历list,将同时存在“应用名称”和“远程命令执行”(或者远程拒绝服务)这一类高危漏洞筛选出来。

6、如果“xxx漏洞”符合步骤e中的筛选条件,则进一步用爬虫抓取“xxx漏洞”中的漏洞详情信息(标题、受影响版本、描述、建议等),如“nginx文件路径处理远程命令执行漏洞”,相应页面URL为http://www.nsfocus.net/vulndb/15077

7、 使用正则获取“受影响系统”中的版本信息(如下图),备用来比较。

9、使用正则获取“受影响系统”中版本信息前面的符号,(如‘<’‘-’‘<=’‘=’等,见下列多图),这一步很关键,为引擎的判断来做最基本的正确性保障。

至此,受影响版本的获取已经搞定,绿盟的爬虫也制作完毕。

引擎部分

引擎主体包括版本比较与最新漏洞通告两个部分。

1、版本比较

在上一步中我们已经用爬虫获取到了“指定应用、指定危害描述”的漏洞信息以及受影响版本,在主引擎中我们要做版本比对:

如果“当前应用版本”小于或等于“受影响范围”中的版本,则可能存在该漏洞。

在版本比较中遇到的问题是1.1和1.2这两个float可以比较,但是1.1.1和1.1.2怎么比较呢?

逛了各种论坛找到了distutils.version模块,可以轻松进行版本比对,实现起来非常简单。

示例:

如果a<b则返回-1,a=b返回0,a>b返回1。以此方法比较后,对于返回0和-1的漏洞就可以准备着手进行通告处理了。

2、 最新漏洞通告

既然为最新漏洞通告,则旧的漏洞不应再次提示,至少对于该模块下来说不应再次提示。

同时新建一个表格存放当前已经通告过“某某IP存在xx漏洞”,此后再跑程序的时候先判断这个表里的time次数,如果为1,就不会再重复通告。

一旦某天出现了重大信息安全漏洞(比如Struts2),漏洞检索引擎会爬取到厂商的公开信息并及时发送告警。

输出部分

输出这部分目前只有邮件告警,在有符合条件的漏洞出现后,直接将漏洞邮件发送给步骤2.2中已经制定的对应表中的管理员,邮件内容如下所示。

Bug

在处理遗留漏洞方面,该引擎只能通过版本比较来发现漏洞,而通过打补丁、改配置文件等方式修复的漏洞可能还会重新被通告。

比如当前环境中有IIS 7.0,公开漏洞信息中提示的影响范围是IIS 7.0,但是管理员打了补丁,此时依旧会通告该漏洞。

总结

对于新增漏洞来说,该引擎较为好用,然而对于旧的漏洞来说,效果一般。

希望安全厂商能够在研发扫描器上多一些可定制的灵活性,避免出现“漏洞堆砌”类的无用消息,更好地提供安全扫描工具。

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2017-03-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JAVA高级架构

如何实现大型网站架构设计的负载均衡

负载均衡 (Load Balancing) 负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处...

47010
来自专栏cmazxiaoma的架构师之路

【分布式架构之旅-理论篇】数据库分库分表

1383
来自专栏idba

有赞MySQL自动化运维系统--ZanDB

有赞作为"新零售"的软件服务供应商,随着业务的不断发展,从第一批几十家商户到现在300万商家,涉及零售,美业,餐饮,自媒体等众多商家,业务规模以及访问量爆发式...

3442
来自专栏IT大咖说

面对海量数据存储,如何保证HBase集群的高效以及稳定

内容来源:2018 年 09 月 15 日,平安科技数据平台部大数据高级工程师邓杰在“中国HBase技术社区第五届MeetUp ——HBase应用与发展”进行《...

1543
来自专栏Albert陈凯

Hadoop数据分析平台实战——220项目结构整体概述离线数据分析平台实战——220项目结构整体概述

离线数据分析平台实战——220项目结构整体概述 数据展示系统(bf_dataapi)总述 bf_dataapi项目的主要目标有两个: 第一个目标就是我们需要提...

2965
来自专栏Linyb极客之路

分布式事务的实现原理

事务是数据库系统中非常有趣也非常重要的概念,它是数据库管理系统执行过程中的一个逻辑单元,它能够保证一个事务中的所有操作要么全部执行,要么全不执行;在 SOA 与...

1373
来自专栏云计算D1net

深度剖析众多的Azure管理工具

自从Windows Azure首次发布以来,微软公司的首要重点就一直是开发出一套工具来帮助用户管理其资源。这个云计算平台是出了名地难于管理,但是微软公司也在一直...

3527
来自专栏Coding01

svn + 钉钉机器人制作简单的代码跟踪系统

我在很早之前使用一个第三方的支付聚合平台 ping++ (https://www.pingxx.com)

1271
来自专栏BeJavaGod

SSO - 我们为何需要单点登录系统

SSO,Single Sign On,也就是单点登录,保证一个账户在多个系统上实现单一用户的登录 现在随着网站的壮大,很多服务会进行拆分,会做SOA服务,会使用...

3105
来自专栏北京马哥教育

《Linux 性能及调优指南》3.2 CPU瓶颈

对服务器来说主要的角色就是应用服务器或数据库服务器,CPU作为关键资源经常成为性能瓶颈的根源。CPU使用率高并不总是意味着CPU工作繁忙,它有可能是正在等待其他...

3769

扫码关注云+社区