从实用角度谈谈(微)分段
前言
网络分段很难实施,这种说法其实不对。网络分段实施起来非常容易;但是要想对网络进行分段而不影响最终用户或网络可操作性,同时确保网络安全性,则几乎不可能。
我们(Akamai 安全情报组研究人员)经常提到的网络分段是作为一种策略,用来抵御横向移动和我们所报告过的各种其他威胁,包括我们在 Patch Tuesday 公告、恶意软件报告、漏洞公告或其他调研报告中提到的那些威胁。
在本文中,我们将为安全防御人员介绍实用、具体的分段策略以及切合实际的最佳实践。我们的目的只是讨论具有实际借鉴意义的分段策略,这些策略不会对网络可操作性或最终用户的体验产生太大影响,同时仍具有显著的安全优势。
虽然理想的分段很难实现,但是分段在保护网络方面还是有一些立竿见影的效果。为了强调这一点,我们在本文中介绍了几种分段策略,分别适用于应对不同阶段的网络入侵。
请注意,现实世界中的网络各不相同;虽然我们的目的是提供常规建议,但您可能需要根据实际情况对这些策略进行调整。
目录
| - 什么是网络分段? - 网络分段指南 - 如何设计分段策略 - 打破网络攻击的击杀链 - 初始访问 - 横向移动 - RDP、VNC、TeamViewer 等远程桌面协议 - SSH - MS-RPC 和 SMB - PowerShell、WMI、WinRM - SNMP - Telnet 和 Berkeley r 命令 - 渗漏 - 常规分段工作流 - 安全围栏 - 应用程序安全围栏 - 微分段 - 其他防御层与分段的协同作用 - 检测 - 响应 - 模拟 - 总结 |
什么是网络分段?
在介绍最佳实践和策略之前,我们首先需要明确网络分段的定义。网络分段是将网络“拆分”成多个部分(区段),并定义各个区段的访问权限和访问方式(例如,Web 服务器只能通过 HTTP/S 访问)。
在传统上,使用 VLAN 和物理防火墙就可以达到这个目的,但最近已经出现越来越多基于软件的防火墙策略和分段策略(例如 Akamai Guardicore Segmentation)。我们不会推荐其中的任何一种策略,因为两种策略各有利弊。我们要推荐的是不依赖特定供应商、适用范围广泛的策略。
从使用 VLAN、访问控制列表 (ACL) 和 IP 范围控制流量,转为使用不受供应商限制的自定义标签,便意味着您进入到了微分段的领域。本文中的所有策略都假设我们使用的是微分段。
这些策略和原则也许可以经过调整,运用于不需要分段的环境,但是要定义所有 VLAN、ACL 和 IP 列表并进行维护,可能不太现实,因为这很快就会让所有网络管理员和工程师变得精疲力竭。(试试定义所有财务服务器的 IP 范围/组。这也许可行,但您能够长期准确维护这个列表吗?这还只是一个服务器组;在企业网络中,您会拥有更多服务器组,包括最终用户、域控制器、域管理员、打印机等等。)
网络分段原则
我们需要讨论分段的一个重要先决条件(即,监测能力),然后才能讨论如何进行分段。微分段并不是一个孤立的概念。您无法保护看不见的资产。只有与能够对流量进行整理和汇总的网络监测功能相结合,优秀的分段策略才能发挥作用。网络流量通常很大,我们无法用肉眼直接分析所有原始数据。
在图 1 中,您可以看到该网络内部有大量流量(为便于阐述,图中还有一个虚拟网络)。实际上,我们无法创建适用于网络上所有流量链路的策略。
但是,我们可以专注于完成小规模的微型分段项目,逐步提高安全性(记住,是微分段,而不是宏分段)。虽然有总体目标是好事,但若能根据网络的威胁模型,专注于逐步提高安全性,也许效果会更好。
什么是威胁建模?它是定义将会处理的威胁类型和网络攻击类型并且据此定义优先级的一种方法。例如,中小型企业不太可能会遇到国家资助的攻击者,但银行可能会遇到。
如果您的公司存储了大量敏感信息,则面临的最大威胁可能是数据渗漏。小型企业可能需要更多关注他们的网络边界,因为他们的网络中可能没有大量设备可以合理拆分成不同的区段。如果担心攻击者在网络中肆意横行,可以考虑先进行横向移动分段。您的公司内是否有不能落入不法分子手中的业务关键型应用程序?您可以先为其设立安全围栏。
如何设计分段策略
在介绍具体的分段策略之前,我们先讨论一些(我们认为)对于良好的分段至关重要的原则或准则。
越容易访问的资源,允许发送的输出应该越少
通常来讲,具有大量入站流量的服务器更多是负责处理请求,Web 服务器或文件服务器就是如此(甚至域控制器也属于这一类)。所以,这类服务器不应该有过多的出站流量,或者至少应该严格限制出站流量。
此外,如果对输出和输入限制很少,可能会导致服务器被攻击者利用,因为这些服务器对于攻击者来说更容易访问,他们可以借此来访问网络上的更多区域。
在需要宽松策略的情况下使用其他防御机制
对于有些设备,我们不得不采取宽松的策略,因为从这些设备发出的流量变化太大;因此,我们必须规定很多例外情况。
以跳板服务器为例,不同的用户使用这类设备通过不同的协议连接到不同服务器。要想覆盖所有应用场景,就难免会将条件设置得过于宽松(但这违背了分段的初衷)。
在这种情况下,我们认为最好采用其他防御机制并设置更严格的规则(例如对跳板机采取更严密的用户访问控制,或者降低监控服务的告警阈值)。
分段并不是一个孤立的概念
在开始分段时某些流量链路可能已经存在,但并不代表应该允许它们存在。如果您认为应用程序或服务器产生的流量并无必要,您可能必须修改这些应用程序或服务器的现有配置。有时,为了弄清楚某些流量为什么会存在,您可能还必须检查现有配置。
打破网络攻击击杀链
大体而言,我们可以将网络攻击击杀链分为三个部分:
网络初始访问
横向移动阶段
入侵设备后的操作
入侵后的操作是指攻击者在其设法入侵的网络中的每台设备上通常执行的操作,这些操作会根据攻击活动的不同而有所变化。例如,在加密挖矿劫持攻击活动中,攻击者会安装并运行加密挖矿程序;而在勒索软件攻击中,攻击者会窃取敏感数据,然后对其进行加密。
接下来,我们将探讨分段方法如何在击杀链的某些部分发挥防范作用
(图 2)。
图 2:勒索软件击杀链
初始访问
在这种情况下,分段就像传统的防火墙一样,可以阻止网络外部的非必要入站流量。这些流量通常来自互联网,但也可能来自连接到公司网络的第三方网络。
所以,我们建议封锁暴露的安全外壳 (SSH) 端口或远程桌面协议 (RDP) 端口(或者横向移动部分的几乎所有端口)。事实上,更好的做法是使用白名单而非黑名单来处理从网络外部进入的流量,尤其是来自互联网的流量(例如,可以试想一下,在任何给定时刻有多少网络扫描器处于活跃状态)。
当然,分段与任何其他安全工具和实践(或策略)一样,并不能阻止所有威胁。在这种情况下,分段无法覆盖所有初始访问媒介,如果只依靠分段,会让网络面临风险。很多入侵都始于网络钓鱼电子邮件或链接,或者其他形式的社会工程。
某些入侵事件也源于本应放行的协议中存在的漏洞,或是由于合法暴露在互联网上的服务(如 VPN 服务器)使用了弱凭据。正因如此,我们建议不要仅靠网络分段来防范初始访问。除了分段之外,还应当部署针对主机和电子邮件的安全防护方案。
横向移动
执行横向移动的方式有很多种,我们在本文中只介绍其中几种。具体来讲,我们的重点是防止设备上已经存在的合法进程中会产生的横向移动,其执行方式包括使用 RDP 或 SSH 等协议、服务管理器或任务调度器等基于 RPC 的服务、PowerShell 或 WMI 等管理工具,或者 Linux 中可用的一些协议和工具(详见另一篇博文)。
我们不打算讨论“一日漏洞”或“零日漏洞”,因为它们可能存在于任何产品中,执行方式也各不相同,要制定适用于所有这些漏洞的通用策略并不现实。我们唯一能推荐的防御策略就是网络分段,毕竟无法触达的目标更难以利用。
在深入探讨各种协议的不同注意事项之前,我们先看看这两条适用于所有协议的准则。
用户实际上并不需要访问其他用户的设备,尤其是通过网络去访问。除了 IT 工作人员以外,其他用户没有什么理由远程连接到别人的设备。因此,在不对网络可操作性产生太大影响的情况下限制用户设备之间的流量应该是非常可行的。
此外,本部分提到的协议由于可能被用于远程控制或执行,因此也可能被用作初始访问媒介。所以,我们再次重申要限制通过这些协议进行的任意互联网访问。
工具/协议 |
端口 |
|---|---|
RDP |
3389 |
VNC |
5900+ |
X Window System |
6000+ |
TeamViewer |
5938、80、443 |
AnyDesk |
6568、80、443 |
SSH |
22 |
MS-RPC |
135、49152+ |
SMB |
445、139 |
WinRM |
5985、5986 |
SNMP |
161 |
rexec |
512 |
rlogin |
513 |
rsh |
514 |
图 3:可能被用于横向移动的常见工具/协议(及其端口)
RDP、VNC、TeamViewer 和其他远程桌面协议
这些服务是交互式和图形化的,它们的自动化使用非常有限。因此,服务器之间使用这些协议的情况并不常见(只是“不常见”,如果情况相反,那就是时候调查原因了)。
同样的道理也适用于用户设备之间的连接——用户设备不需要相互连接。这些假设也有例外,例如跳板机和终端服务器允许用户切换到不同环境或者访问不同的服务器、IT 人员连接到用户设备、应用程序所有者连接到应用程序服务器。
要处理这些例外,应该创建合适的分段策略。除此之外,还应该使用适当的身份访问管理 (IAM) 解决方案作为补充。
攻击者有时会安装第三方远程桌面服务器,作为后门和进行持久攻击。如果检测到网络中出现远程桌面流量或者新软件,应该进行调查。
SSH
SSH 尽管在概念上类似于 RDP,但它的情况要复杂得多。由于 SSH 是基于终端(文本)来操作的,所以使用它与软件交互要容易得多,而且有些程序和脚本也使用 SSH。除此之外,SSH 还被用于封装安全性较低的协议(如 SFTP),也就是文件传输协议的 SSH 封装。
鉴于以上原因,SSH 相比其他 RDP 而言需要采取更精细的方法。如果无法充分监测网络流量,就很难在不影响最终用户或网络可操作性的情况下对 SSH 进行合理分段。
MS-RPC 和 SMB
MS-RPC 和 SMB 都不会立即允许横向移动,但建立在这两者之上的其他协议却会这样(图 4)。SMB 用于文件传输和通信,而 RPC 用于从定义的接口调用远程函数。RPC 有时也通过 SMB 进行通信,所以两者是紧密结合的。众所周知,这两种协议也很难进行合理分段,因为它们已嵌入到 Windows 域系统中。
例如,域认证是在基于 RPC 的 Netlogon 协议中实施的。域组策略和登录脚本存储在域控制器上名为 SYSVOL 的共享文件夹中,已加入域的设备会通过 SMB 来访问该文件夹。
要想在不破坏整个域的情况下阻止 SMB 和 RPC,几乎是不可能的。那您能做什么呢?对于 SMB,您可以根据逻辑单元创建策略——大多数服务器和设备不应通过 SMB 相互通信,除非目的地是文件服务器。因此,适当的安全围栏分段应该有助于降低 SMB 的风险。
对于 RPC 也可以采用类似的方法,但可以更加严格,因为和 SMB 不同,我们不需要允许 RPC 流量传输到文件服务器。此外,由于 RPC 是在用户模式下操作的,所以可根据目标服务或进程来创建分段策略,您只需要处理可能被滥用于横向移动的 RPC 接口(而且前提是您的分段代理可以处理基于进程或基于服务的规则)。
下表列出了为防止横向移动而应该进行管理的 RPC 接口。
图 4:可能被用于横向移动的 RPC 接口
并非所有通过这些 RPC 接口进行的操作都是恶意的(例如,某些监控解决方案和监视程序会与服务管理器远程交互,以检查服务运行状况),所以我们建议检查现有的 RPC 通信。如果一般情况下不会远程访问这些接口(或者如果可以缩小源列表的范围),那么我们建议围绕这些接口创建分段策略,以提高安全性。
PowerShell、WMI、WinRM
PowerShell 和 WMI 都能够与远程设备交互,这种交互由 Windows 远程管理 (WinRM) 所“驱动”。由于合法用途通常是远程管理或监控(对于 WMI),所以企业网络中应该鲜少使用。您可以创建分段策略来限制任意使用,并且只允许来自监控服务器或 IT 设备的通信。
当然,也可能存在例外情况,我们已经看到有开发人员为了方便而广泛使用远程 PowerShell;所以,您可能需要根据实际情况做出决定。
SNMP
简单网络管理协议 (SNMP) 是一种很受欢迎的监控解决方案,特别是对于 Linux 设备而言。SNMP 还有一个 EXTEND 插件,可能会被滥用于远程脚本执行,这点我们在有关 Linux 横向移动的文章中提到过(并且已在 Infection Monkey 中实施)。尽管在更新版的 SNMP 代理中,默认情况下不再为远程命令启用 EXTEND 插件,但在启用了该插件的情况下,仍然可以编译 SNMP 代理。我们还看到有些设备运行未修补版本的 SNMP 并且启用了 EXTEND 插件。
由于 SNMP 是用于监控,我们建议只允许源自监控服务器的 SNMP 流量,限制网络其余部分的 SNMP 流量。我们还建议特别关注来自监控服务器的 EDR 告警,以防攻击者将这些服务器用作网络其余部分的代理。
如果存在多个由不同产品使用的监控服务器,还应该考虑对不同逻辑单元进行分段,以实现隔离(例如,如果您有一款用于财务服务器的监控解决方案,并且只用于财务服务器,则应该禁止其访问 Web 服务器)。
Telnet 和 Berkeley r 命令
Telnet 和 Berkeley r 命令不太常见,而且大部分情况下已被 SSH 取代。我们在有关 Linux 横向移动的文章中已做过介绍。但是,不常见并不代表应该忽视它们的存在。毕竟,攻击者并不关心是否常见,他们会利用任何可用的手段。
我们建议使用更安全的协议(例如 SSH)替代这些协议,或者至少将相关的流量封装在安全通道中。如果无法做到,可以执行 SSH 相关的安全实践。
渗漏
只依靠分段就想阻止攻击期间的数据渗漏不太现实,除非您想用原始的极端办法控制所有出站流量。互联网非常庞大,我们无法准确判断网络上用户所访问的每个网站和服务器。因此,攻击者可以轻松将进行数据渗漏的行为伪装在所有其他出站流量中。
与其尝试控制出站流量,不如控制谁可以访问敏感数据,这样做的可行性更高。要想限制出站流量,唯一可能的地方就是网络中的服务器;与用户设备不同,服务器的出站目的地应该不会有太多变化。
常规分段工作流
这个部分的总体原则是“存在并不代表合理”。在对网络的一部分进行分段时,无论这个部分是业务关键型应用程序(如 SWIFT)、操作单元(如域控制器)还是环境(如生产服务器),首要任务都是调查现有流量(图 5)。
分析现有流量后,您可以创建适用的策略,以允许相关流量并限制其余流量(在此过程中,您还可以找出那些应该由应用程序所有者处理而不是通过分段进行处理的不当配置)。
我们建议不要立即实施阻止策略,而是按只发出告警的模式运行一段时间。只有在您认为策略的运行符合预期,并且违规告警的数量处于可控的最低范围时,才应该转为限制策略。
区分当前环境(开始分段之前存在的环境)和未来环境(实施分段策略之后的环境)也很重要。第一次实施分段时,应该保持谨慎,认真分析网络,避免造成破坏性后果。
然而,在添加新内容时,应结合现有的分段策略进行考虑。为了保持正常操作,可以根据需要规定策略的例外情况,但不要因为扩展网络而不顾现有策略。
图 5:常规分段工作流
安全围栏
对于安全围栏,我们最关心的是所分隔的区段与网络其余部分及整个互联网的接口。我们应该控制要分隔的区段的进出流量,而不考虑该区段内的活动。
应用程序安全围栏
我们可以让安全围栏策略再进一步,根据设备的不同用途运用不同的策略。例如,如果服务器只是充当数据库,则只应该通过数据库端口进行访问;Web 服务器则只应通过 Web 端口进行访问。
当然,事情没这么简单。因为通常会有更多服务需要访问这些服务器,例如监视程序、性能监控程序和 IT 支持。通常来讲,这些访问端口是围绕某种远程控制设置的,所以它们看起来也和横向移动技术非常相似。(例如,远程监视程序查询服务管理器的方式就与 PsExec 横向移动技术很类似。要想区分这两种调用方式,唯一的方法是深度数据包检查,但该方法通常无法使用。)
为了解决这个难题,除了应该已经访问服务的流量之外,如果还需要允许额外的流量,我们建议将允许的来源限制在应该进行监控的区段。
此外,我们可以限制用户访问他们不需要访问的敏感位置。如果数据库仅为内部应用程序提供服务,则没有理由允许任意用户进行查询。我们认为,阻止任意用户访问是最重要的安全步骤,因为很多攻击都是从受感染的用户开始的。
微分段
借助微分段,我们能够对分段策略实施进一步的细化——根据区段内设备的角色或敏感性对它们进行分隔。我们可以将它视为应用程序安全围栏与常规安全围栏的结合。微分段与安全围栏的主要区别在于,我们也控制区段内的流量,不会自动信任邻近的来源。
这里的原则是,我们不应该只因为处于同一区段内,就信任来自邻近设备的流量。攻击者为了攻破整个网络,会利用任何可以利用的连接,而不会在意区段。
所以,区段中即使有相同类型的应用程序服务器,这些服务器之间也没有理由通过每个端口和协议进行通信。微分段意味着对各种类型的流量(甚至网段内部和具有相同角色的设备之间)运用策略规则。
当然,同一区段内的设备之间通常结合得更紧密,所以要想在添加策略的同时避免过度宽松会更困难。
应用程序安全围栏原则通常也可以作为微分段原则进行运用,具体取决于您如何定义网络中的各个区段。例如,如果我们将网络分为用户区段、数据库区段和 Web 服务器区段,那么应用程序安全围栏中定义的原则也适用于微分段。唯一要增加的是在每个应用程序区段内和不同设备之间运用这些原则。
但是,如果我们将网络分为财务区段、销售区段和 IT 区段,而且每个区段都既有服务器又有用户设备,那我们就需要更有创造性。在将常规安全围栏策略应用于各个区段之后,我们必须接着在各个区段之间和各个区段内部创建策略。我们可以将每个区段视为一个微型网络;然后再将每个区段进一步分为不同的应用程序和设备类型。(例如,对于销售区段,我们可能有文件服务器、数据库和用户设备。)我们可以将每种设备视为一个新的区段,然后再次按照安全围栏原则或应用程序安全围栏原则进行分段。
图 6 总结了各种分段策略之间的关系。
图 6:企业网络中的分段策略
其他防御层与分段的协同作用
虽然合理的网络分段可以显著增加攻击者清除障碍和攻破网络的难度,但只有这一个防御层还远远不够。您需要一个包括检测、响应和模拟在内的完整防御体系。
检测
只要攻击者足够执着且技术高超,他们几乎能够攻破任何想要目标。因为没有任何系统或网络是百分之百万无一失的,而且零日漏洞也始终存在。零日漏洞开发成本高昂,不是靠一时兴起就能成功,所以现实中攻击者不一定会这么做。但我们认为,比起盲目乐观,提前做好最坏的打算会更有利。
所以,我们认为分段和检测可以相辅相成。即使攻击者设法在网络中找到了立足点并开始横向移动,您也有恰当的工具可以进行检测并消除威胁。这类工具可以是用于主机威胁检测的 EDR、Web 访问监控工具或者定期威胁搜寻活动。重要的是,可疑活动会被检测到并且发出告警,而您拥有一个团队可以调查这些告警。
除了检测之外,分段网络相比扁平化网络还有三重额外的优势(图 7)。
提高了攻破网络所需要的技能水平,可以击退技能不足的攻击者。大多数攻击者无法利用零日漏洞,所以根据网络的威胁模型采取良好的网络分段策略,应该就能对大多数攻击者起到足够的威慑作用。
攻击者在网络中经过的跃点越多,他们完成全面入侵所需的时间和步骤就会增加,那么他们被检测到的机会就越大。
还可以将攻击者引导至“阻击点”,在这些位置他们更容易被识别到。采用“蜜罐”、“金丝雀”甚至只需要更警惕就可以做到这一点。
图 7:扁平化网络与分段网络中的入侵对比。在扁平化网络中,入侵者能够同时到达网络的各个部分,从而可以快速达成攻击目标。在分段网络中,攻击者不得不按部就班地采取行动。
响应
只检测威胁并不够,还必须针对告警和入侵活动做出快速响应。根据勒索软件攻击报告所述,破坏加密机制只需要几天的时间。这意味着,您也只有几天的时间发现这些威胁并将其从网络中彻底驱逐出去。诚然,就如我们之前所说,合理的分段会减缓攻击速度,但我们仍需要及时采取应对措施。
分段可以在两个方面辅助强化响应能力。
它可以为您争取更多的时间来作出响应,因为分段后攻击者需要更长时间才能完成攻击,而且发生告警的摩擦点(攻击者流量与分段策略产生冲突的地方)更多。
它可以用于作出响应。就像创建分段策略和规则来限制网络不同部分的访问权限一样,您可以创建适用的规则来隔离资产,让攻击活动无法继续进行。我们建议将分段纳入到事件响应计划和工作流中,并配备相应的工具以便在紧急情况下快速部署隔离规则,这样做可以在应对网络入侵时发挥至关重要的作用。
模拟
理论上,也许您已经搭建了万无一失的分段网络,而且您可以检测到任何攻击。但任何安全预案在初次实战交锋中往往不堪一击;因此,最好不要让检验预案的敌人成为真实的恶意攻击者。
这就是模拟的用武之地。红队可以像真实的攻击者一样,通过尝试入侵您的系统来模拟敌方攻击;或者,您也可以使用自动化的网络入侵模拟工具(例如 Akamai 的开源工具 Infection Monkey)来替代人工完成此工作。
模拟可以发现防御系统中可能被恶意攻击者利用的弱点。定期进行检查并根据结果采取行动可以大大提高网络的安全性。