购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3 内网网络白环境

本节中所指的内网网络特指企业应用系统生产环境中的网络。与网络边界有所不同,内网网络中不存在不安全区域,正常情况下,所有的网络连接和网络流量都是基于业务需求产生的,也都是可预期的、正常的业务流量。之所以反复强调这点,是因为内网网络白环境的建立是以此作为大前提的。

在内网网络中,需要重点关注两类防火墙,它们既可以在前期通过对网络连接的监测来构建白名单,又可以在后期发现或阻断异常连接和流量。第一类,按照功能划分的不同区域之间的网段防火墙,例如DMZ、网管区与其他区域的网段防火墙;第二类,在主机上的主机防火墙,例如Linux操作系统上的Netfilter和iptables等。

下面针对这两种不同类型的防火墙,介绍如何构建白环境。

2.3.1 网段防火墙

介绍完边界防火墙,再介绍网段防火墙就容易多了。网段防火墙位于企业内网的生产环境,用于隔离不同功能的网段。

如图2-5所示,以这个简单环境为例,其中包括DMZ网段、数据库网段、数据库管理网段、管理网段。除此之外,还有隔离这些网段的内网防火墙、管理网防火墙以及连接这些网段的交换机等。

图2-5 网段防火墙

由于网段防火墙位于企业内网生产环境,所有业务的正常流量都可以梳理清楚,因此,网段防火墙应该完全采用白名单机制而不是黑名单机制定义策略。以图2-5的环境为例,管理网防火墙应该配置为:允许管理网段和数据库管理网段双向的Zabbix流量(默认端口号是10050和10051),允许从管理网段到数据库管理网段的Ansible流量(默认端口号是22),允许从数据库管理网段到管理网段的Syslog流量(默认端口号是514)。内网防火墙应该配置为:允许从DMZ网段到数据库网段的MySQL流量(默认端口号是3306)。

2.3.2 主机防火墙

我们之前介绍的边界防火墙是隔离内外网环境的,是企业边界的防护手段。网段防火墙是隔离内网不同网段和网络环境的,是内网粗粒度的防护手段。主机防火墙是隔离主机的,是内网细粒度的防护手段。这也是网络白环境中最为核心的一个环节和手段,如果边界防火墙、网段防火墙做得不到位,还可以通过主机防火墙做补充。

在现实生活中,无论是时不时曝出的数据泄露事件、勒索病毒事件,还是在常态化攻防演练中被攻陷的系统,当我们仔细研究攻击路径和攻击手法时,都会看到它们在内网肆无忌惮地横向移动,而我们却一点感知能力都没有,直到数据丢失、应用被锁、系统失陷,才发现内网就像大草原一样平坦,一望无际,任由驰骋。

白环境的提出为我们解决内网安全提供了一种思路。在内网中,相比边界防火墙和网段防火墙,基于主机防火墙构建的网络连接白名单的管理粒度更细,管控范围更小,安全效果也更好。额外单独提一下,这和微隔离有些类似,是基于白环境理念的微隔离。

下面我们结合东西向流量检测的具体场景,来介绍如何使用主机防火墙。

攻击者在撕破边界防御进入内网,夺取个别主机权限后,为了进一步扩大战果,获得更多有价值的资源和数据,势必会在内网环境横向移动。其中必不可少的动作就是探测,例如主机和端口扫描,这种扫描有可能是大规模、明目张胆地扫描,或是小范围、小心谨慎地尝试。

无论是哪种方式,都需要建立主机和主机之间的网络连接,而这也是我们检测横向移动的重要线索。因此,首先需要采集所有进出主机的双向连接,然后再根据业务逻辑和服务器之间正常的网络连接构建白名单,并依此来判断扫描探测、异常连接等安全事件。

在主机上,记录网络连接最直接、最简单的方式就是利用Linux已有的内核框架Netfilter,以及与之配套的管理工具iptables或者UFW(Uncomplicated FireWall)。

在介绍具体配置方法之前,先简单介绍下TCP的三次握手,这和我们的配置方法有直接关系。所谓三次握手是指建立一个TCP连接时,需要客户端和服务器总共发送3个报文。如图2-6所示,第一次握手时,客户端将TCP报文标志位SYN置为1,并将该数据包发送给服务器,发送完毕后,客户端进入SYN_SENT状态,等待服务器确认。第二次握手时,服务器收到数据包后,将TCP报文标志位SYN和ACK都置为1,并将该数据包返回给客户端以确认连接请求,服务器进入SYN_RCVD状态。第三次握手时,客户端收到确认后,将标志位ACK置为1,并将该数据包发送给服务器,客户端和服务器均进入ESTABLISHED状态,完成三次握手,随后客户端与服务器之间就可以开始传输数据了。

对端口的扫描探测是基于TCP三次握手原理的,即向被探测对象发送SYN包,然后根据反馈包的内容来判断端口是否开放。我们介绍的两种配置方法也需要参考这些原理。

1.检测内网扫描

第一种iptables的配置方法可以用来检测由nmap或者其他扫描工具发起的SYN扫描。SYN标志位为1的数据包的发送是TCP三次握手的第一步,因此,无论是正常连接请求还是端口扫描都会涉及这个步骤。

如下所示,第一条命令是用来清空iptables规则的,可以根据实际情况选择是否执行,其中参数-F代表清除所有策略。第二条命令是用来配置、识别SYN包的,其中参数-I INPUT表示把这条规则插入INPUT链的最上面,-p tcp表示只检测TCP流量,--tcp-flag ALL SYN表示检测SYN标志位为1的数据包,-j LOG--log-prefix "SYN Scan:"表示记录到日志中,并且有一个固定的前缀“SYN Scan:”。第三条命令是用来打印所有规则的,其中参数-S代表输出所有规则。

图2-6 TCP三次握手

规则配置后,查看日志文件/var/log/syslog,可以看到有大量端口扫描的事件出现。正常情况下,内网不应该有这种横向扫描行为,笔者这里做测试的服务器是公有云上的一台虚拟机,由于直接暴露在互联网上,因此会有大量的扫描探测行为。

2.检测新建连接

第二种iptables的配置方法可以用来检测尝试的新建连接,不仅包括正常的网络连接,所有端口扫描类攻击从操作系统的角度看,都是在尝试建立新的网络连接。

如下所示,iptables命令中的参数-m state--state NEW表示检测新建的网络连接。

规则配置后,查看日志文件/var/log/syslog,同样可以看到有大量尝试新建连接的事件出现,其中有很多端口扫描类探测手段。

在介绍完以上两种配置方式后,还有一个和长期安全运营相关的工作,就是需要根据真实业务需求,添加、梳理、优化网络连接白名单,从而减少日志量和误报率。

如下所示,通过第一条netstat命令列出所有已经建立的连接,其中参数-a代表所有内容,-u代表所有用户数据报协议(User Datagram Protocol,UDP),-n代表用数字显示,-t代表所有TCP。如果明确是正常的连接,则可以通过第二条iptables命令把这个连接加入白名单中,以后从119.80.249.216到本地10.0.8.2的SSH连接都会被允许,并且不会被记录到日志中。通过这种方式,过一段时间后,可以大幅减少日志的上报量。 9oKrdIM4g9PfOH9jtWaT28szKrsku9lDmeSn3B5TMA940cmF0mD00Y3BjV25aN6H

点击中间区域
呼出菜单
上一章
目录
下一章
×