外网端口监控系统是整个安全体系中非常重要的一环,它就像眼睛一样,时刻监控外网端口开放情况,并且在发现高危端口时能够及时提醒安全、运维人员做出相应处理。
对安全人员来说,互联网公司在快速发展壮大的过程中,外网边界的管控容易出现照顾不全的现象。最初我们用Python+Nmap开发的外网端口监控系统,在公司边界扩大的过程中已经无法满足要求了,所以出现过一例因为运维人员误操作将高危端口曝露至外网导致的入侵事件,为了避免再次出现类似由高危端口开放而不知情导致的入侵问题,我们开始重做外网端口监控系统。
要理解端口监控的意义,首先需要知道什么是 端口扫描 ,根据Wikipedia的定义:
端口扫描的定义是客户端向一定范围的服务器端口发送对应请求,以此确认可使用的端口。虽然其本身并不是恶意的网络活动,但也是网络攻击者探测目标主机服务,以利用该服务的已知漏洞的重要手段。
对于攻击者来说,端口扫描往往是他们从外网发起攻击的第一步。而对于企业安全人员来说,端口监控则是我们预防攻击者从外部直接入侵的一条重要防线,它可以帮助我们:
对企业的外网开放端口进行监控不外乎两种方法,一种是类似于黑盒审计的外网端口扫描,另一种是类似于白盒审计的流量分析。从原理上来说流量分析的方式肯定是最准确的,但这对软硬件都有一定要求,一般的公司不一定有能力做好;外网端口扫描的方式比较直接,虽然也有一些环境上的依赖,比如网络带宽,但总体上来说要比流量分析的要求小得多,大部分公司都能满足。这里我们主要介绍一下外网端口扫描的方法,另一种流量分析的方法,以后请具体负责同学给大家分享。
在这里我们先简单介绍一下端口扫描的原理,以帮助各位对这块不太了解的同学有个基本的认识。
下面以最知名的端口扫描器Nmap对端口状态的划分进行一个说明:
状态 | 说明 |
---|---|
open | 有一个应用程序在监听这个端口,可以被访问 |
closed | 没有应用程序在监听这个端口,但它是可达的 |
filtered | 在扫描器和端口之间有网络障碍,扫描器无法到达该端口,所以无法判断端口是开放还是关闭的 |
unfiltered | 端口可达,但是扫描器无法准确判断 |
open或filtered | 扫描器无法准确判断端口到底是open还是filtered |
closed或filtered | 扫描器无法准确判断端口到底是closed还是filtered |
但一般情况下我们不用分的这么细,这里为了方便起见,将一个端口的状态粗略分为3种:开放、限制性开放、关闭。其中「限制性开放」指的就是做了访问控制,只有指定白名单列表中的主机才能访问,其它的都无法访问,可以简单认为是上面的filtered状态。
TCP SYN扫描
我们选择TCP SYN扫描的理由:
对于学过计算机网络的同学来说,TCP/IP建立连接的3次握手过程想必应该不算陌生,大体流程如下:
我们这里使用的TCP SYN扫描就是通过先主动发送一个SYN报文给指定端口(之后并不回复任何报文,不完成TCP连接),然后根据端口的返回信息做出判断,判断结论分为以下3种:
结论 | 原因 |
---|---|
open | 返回 SYN/ACK |
closed | 返回 RST |
filtered | 数次重发后仍没响应;或者收到ICMP不可到达错误 |
图例如下:
源码面前,了无秘密。
技术同学估计对侯捷老师的这句话不会陌生,这里我想将这一句话改一改以适应我们这里的情景:
流量面前,了无秘密。
通过流量分析,我们可以及时知道有哪些端口对外开放了,然后通过解包分析的方式获取它使用的协议以及提供的服务,对于无法准确判断的,我们可以再用外网扫描的方式进行补充判断。
早期我们就是通过Python调用Nmap进行的扫描,但随着公司规模的不断扩大,网段的不断增加,Nmap扫描的弊端就逐渐凸现且无法弥补了——大网段全端口扫描周期太长,无法及时出结果(一个扫描周期可能长达2周),也就根本达不到外网端口监控的目的了。直到后来出现了Masscan。
大体架构如下:
Masscan是大网段全端口扫描神器!!!
就扫描速度来说应该是现有端口扫描器中最快的,同时准确性也比较高。在确定使用Masscan之前我们拿它和Zmap、Nmap一起做了对比测试,限于篇幅,具体的测试过程就不发出来了,这里只说测试结论:用TCP SYN扫描方式,对一个小型IP段进行全端口扫描,Masscan速度最快,准确性较高,可以满足需要。
在Masscan版本上线了之后,全端口扫描的速度得到了大幅提升,外网端口的开放情况也了解的比较清楚了,但是对于Banner的获取以及具体服务的识别还达不到要求,而这也不是Masscan的强项,所以这时候我们就需要借助Nmap丰富的服务指纹库来提高我们监控数据的准确性了。
和之前相比,就是在Masscan全量扫描环节之后增加了一个只针对判断为开放的端口用Nmap进行增量扫描的环节,然后将结果更新至数据库方便展示、分析。大体架构如下:
外网的扫描有它的优势——以攻击者视角获取当前外网安全状态,但是因为Masscan全端口扫描再快他也是需要时间的,特别是在网段较大、带宽有限的情况下。所以单独的周期性外网扫描就存在一个天然的真空期,如果在这段真空期内,内部员工因为大意将测试端口对外,且忘了关闭的情况下,就可能会被攻击者进行利用,为了应对这种情况(即便可能性比较小),我们决定从实时流量中进行分析,实时找出对外开放的新增/异常端口,然后调用Nmap进行扫描,以解决单独外网扫描存在的真空期问题。大体架构如下:
端口监控系统除了可以起到监控外网开放的新增高危端口的作用之外,还可以考虑从以下几个方面扩展一下它的功能和效果,以实现效用的最大化:
对于非安全的同学来说,他们会很难理解一个外网开放端口能造成多大的危害,所以经常会出现当安全人员找到他们的时候,他们不认为这是一个安全问题,因此沟通起来会有点麻烦。
虽然问题最终都会得到解决,但如果能有一个直观的演示给到他们的话,他们也会更愿意配合我们去修复以及避免这类问题。所以和系统漏洞扫描器的联动对于推动问题的处理和漏洞的修复是有帮助的。
注意事项:避免高风险性扫描操作;需要人工确认后主动触发。
通常情况下我们会认为,新增Web端口对外是可以接受的,但这是建立在对应的Web系统通过了完整的内部安全测试的前提下。当碰到类似于为了方便起见将Zabbix的Web系统对外,且为弱口令时,情况就不那么乐观了,这时就可以通过调用Web漏洞扫描器自动对暴露在外的Web系统进行扫描,并将结果及时通报,以减少这类问题带来的危害。
可以获得的好处有:
上面介绍了常规服务器的TCP端口监控,意在提醒大家注意一下服务器的安全;但还有一类UDP端口安全的问题上面没有介绍,也容易被忽略——防火墙、交换机等网络设备的安全。在2016年8月份的时候The Shadow Brokers公布了一款针对思科Adaptive Security Appliance(ASA,实际涵盖了防火墙和路由器设备,PIX也在其列)产品的漏洞利用工具ExtraBacon,虽然漏洞利用有一定条件限制,但是一旦漏洞利用成功,攻击者就可在无需输入身份凭证的情况下建立起SSH或telnet连接。就是不需要输入有效用户名或密码,就能闯进ASA,危害巨大。
针对这方面的问题,有以下几点建议:
本文主要介绍美团点评安全团队对外网端口监控系统的开发演进过程,整理总结了其中的一些实践经验以及前景展望。欢迎大家批评指正,有好的建议也希望能提出来帮助我们改进。我们后续将不断优化,也将继续与大家保持讨论。耐心看到这里的读者,表示十二万分的感谢!
光宗,2015年加入美团点评安全团队,先后从事过生产网主机、软件安全防护的工作,目前主要负责美团点评集团内部安全审计系统相关的开发工作。
最后打个小广告,美团点评集团安全部正在招Web&二进制攻防、后台&系统开发、机器学习&算法等各路小伙伴,我们想做的事情:构建一套基于海量 IDC 环境下的,横跨网络层、虚拟化层、Server 软件层(内核态/用户态)、语言执行虚拟机层(JVM/Zend/JavaScript V8)、Web应用层、数据访问层(DAL)的基于大数据+机器学习的全自动安全事件感知系统,规模上对应美团点评全线业务的服务器,技术栈覆盖了几乎大多数云环境下的互联网应用,数据规模也将是很大的挑战。此外我们还关注 Google Facebook Amazon 这类公司在企业安全建设方面的实践,努力构建类似于Google的内置式安全架构和纵深防御体系,对在安全和工程技术领域有所追求的同学来说应该是一个很好的机会。如果您想加入我们,欢迎简历请发至邮箱zhaoyan17#meituan.com。
详情请点击:美团点评集团安全部招聘安全人才。
回答“思考题”、发现文章有错误、对内容有疑问,都可以来微信公众号(美团点评技术团队)后台给我们留言。我们每周会挑选出一位“优秀回答者”,赠送一份精美的小礼品。快来扫码关注我们吧!