企业安全之端口服务漏洞监控

0x00 前言

对外端口及服务的监控是整个安全体系中最最最最基础也是非常重要的一个环节。周期性的安全扫描可以快速得到外网资产分布情况,在发现高危端口对外时能够及时提醒安全、运维人员做出相应处理,有效避免入侵事件发生。

0x01 实现方法

对企业的外网开放端口进行监控不外乎两种方法:外网端口扫描和流量分析,它俩区别类似于黑盒与白盒审计。从原理上来说流量分析的方式肯定是最准确的,但这对软、硬件(基础设施)都有一定要求,一般的公司不一定有能力做好;外网端口扫描的方式比较直接,虽然也有一些环境上的依赖,比如网络带宽,但总体上来说要比流量分析的要求小得多,大部分公司都能满足,而且还能得到不错的效果。这里我们主要介绍一下外网端口扫描的方法。

外网端口扫描常见工具:Nmap、Masscan、Zmap等。

0x02 扫描原理

首先,我们要明白端口的三种状态。分别是:OPEN、CLOSED、FILTERED。

常见端口扫描分类有TCP全连接扫描、半开扫描(SYN扫描)、FIN扫描、无状态扫描等。

TCP全连接扫描

是一种最为普通的扫描方法,这种扫描方法的特点是:准确性比较高,但是需要完成整个的三次握手流程,而且对于filtered的端口需要进行在timeout之前的等待,所以严重的拖慢了扫描速度,容易被防火墙和IDS(防入侵系统)发现。

o3TmaF.md.png

半开扫描(SYN扫描)

与上面的TCP全连接扫描类似。不同的是,扫描器向目标主机的一个端口发送请求连接的SYN包,扫描器在收到SYN/ACK后,不是发送的ACK应答而是发送RST包请求断开连接。这样,三次握手就没有完成,无法建立正常的TCP连接。因此,这次扫描就不会被记录到系统日志中。这种扫描技术一般不会在目标主机上留下扫描痕迹,扫描速度相对较快。

o3TMG9.md.png

FIN扫描

是一种非常快的扫描,因为直接给目标端口发送一个带FIN标志位的包,开放(有服务监听的)的端口见到FIN包会将其丢弃,而CLOSED状态的端口则会照常的发送一个RST包,告知这个端口没有监听服务。但是,这种扫描有一个严重的缺点,那就是FILTERED状态的端口也会直接丢弃。因此不能够区分OPEN/FILTERD两种状态的端口,只能区分这两种与CLOSED之间的区别。

无状态扫描

我们知道,tcp连接是有状态的,需要对SYN-ACK包进行seq number的校验这个等待连接的过程需要在缓冲区占用很大的资源,因此限制了扫描的速度。但是,无状态扫描中,比如zmap记录了revicer ip、hash之后保存到send port 和seq number,然后再等待SYN-ACK中返回的相应信息直接进行校验,而不需要建立连接。通俗的来说,传统的扫描方式是1对1的建立连接通信进行验证,而无状态的扫描就是批量的把请求撒出去,然后记录有回应的IP。因此,效率上可以达到了成千上万倍的提高。但是同时,由于无状态的发包方式,如果遇到丢包的情况,不像有连接时候会进行重复查询,而是直接没有回应,因此准确率上不如SYN扫描那么准确。

0x03 实践

就目前的服务器量级来看,使用python调用nmap来进行端口扫描可以满足日常的安全工作的需要。

为什么选择nmap?

(1) 随大流,nmap相关资料多,而且很多商用扫描器也是集成nmap扫描结果。

(2) nmap扫描速度,肯定没有masscan、Zmap快,但是扫描结果有对服务banner和版本的探测,更重要的是有操作系统的探测。在云平台部署zmap等无状态扫描,会瞬间发出大量数据包,公有云EIP带宽QoS超过会立刻丢弃,对扫描结果有很大影响。

(3) libnmap 对扫描结果解析的相对完美,方便的提取想要的数据到数据库中。

端口扫描之后,我们还可以做些什么?

(1) 对新暴发的漏洞、组件漏洞做企业内部评估,例如:各种未授权访问漏洞、各种RCE漏洞等等。这里我参考了一些巡风的漏洞扫描插件。

(2)评估高危端口变化趋势,也是衡量企业安全管理人员工作成果的一个手段。

(3)对企业对外端口服务以及漏洞分布有清晰的了解。

需求:

(1)对外网存活主机端口探测、对主机扫描范围设置、端口扫描结果存储

(2)对发现的端口服务进行进一步漏洞扫描

(3)提供可维护的白名单机制

(4)提供周期性扫描设置、Email报警、微信报警

(5)report:操作系统类型分布、对外服务类型分布、WEB服务类型分布

(6)告警处置流程、保证处置实效性、罚款制度

实现:

o3LsUK.jpg

使用libnmap后台调用nmap发起扫描:

o8S6eJ.png

针对端口扫描结果发起组件(服务)漏洞扫描:

o3zlDJ.png

如下,针对memcache未授权访问漏洞进行验证的扫描插件(参考巡风):

o3Lg8e.jpg

扫描任务:

o3v4SS.png

端口扫描结果:

o3vAMQ.png

服务漏洞扫描结果:

o3OxQH.png

端口服务分布统计:

o3xAfK.png

微信接收告警:

o3xa0s.png

0x04 延伸

端口扫描系统除了可以起到监控外网开放的新增高危端口的作用之外,还可以考虑从以下几个方面扩展一下它的功能和效果,以实现效用的最大化,安全能力输出最大化:

1. 与系统漏洞扫描器联动

对于非安全的同学来说,他们可能很难理解一个外网开放端口能造成多大的危害,所以经常会出现当安全人员找到他们的时候,他们不认为这是一个安全问题或者不是很重视,因此沟通成本比较高。如果针对端口扫描的结果在针对性的发起漏洞扫描,得到具体的漏洞,这样推动解决效率会更高,别人也更愿意买帐。

2. 与Web漏洞扫描器联动

好处同上一点一样,此外,自动化的实现对web端口服务进行web漏洞扫描,可以更大范围、更快速的发现风险。

3. 与内部漏洞管理系统联动

将扫描结果自动录入漏洞管理系统,方便漏洞跟踪管理。

4. 制度推动技术执行落地

端口扫描服务运行前期,经常扫描出大量对外端口,带来很大的安全隐患。鉴于此种情况,我们内部约定了一个制度,对端口未及时处理的负责人进行罚款。既可以推动事件处理,又可以攒集活动经费。当然我们并不是为了罚款而罚款,只希望通过这种方式来加强大家对安全隐患的重视程度,保障业务的稳定。

参考:

http://www.freebuf.com/articles/rookie/128526.html

https://tech.meituan.com/security_port_monitor.html