在“没有人的安全部”构筑护网防御工事(1)——边界隔离

0 引言

护网临近,各大名单上的“选手”又在紧张的备战节奏中,笔者也不例外。对于一些规模较大组织机构(包括商业公司和非盈利性的单位,下文统一以组织代称),往往有充足的技术、资金和人员投入,而一些中小规模的组织情况则比较复杂。除去那些在安全方向有足够投入和积累的单位,大部分中小组织要么没有足够的实力支持安全团队的发展,要么从来没想过,不知道怎么去做这件事。这组系列文章把目光聚焦在这类基础安全储备比较薄弱的组织身上,通过梳理和总结门槛低、收益高、上手快、不需要过多额外学习的备战方案,让缺少安全能力储备的中小组织能够快速构筑高ROI的安全防御工事。

这组系列文章分为以下几个部分:

  1. 网络隔离
  2. 审计监控
  3. 账号扫雷
  4. 漏洞修复
  5. 基线安全
  6. 攻击诱捕
  7. 钓鱼防护

总体而言,内容分类比较多,笔者力求用非安全相关领域的研发、运维、技术总监、CTO大佬们能够理解这当中每一项的目标、价值以及构建方法,并且可以根据自己的情况酌情增减,以达到更加贴合自身需要的防御能力。

几年前有一篇文章叫《一个人的安全部》,讲述了作者一个人作为安全部的全部成员建设公司的安全能力的故事,很多人看了以后感触很深。写这个系列的文章的时候我想到了曾经的那篇《一个人的安全部》,于是构思起来如果公司没有安全团队,应该怎么做安全。这个系列的文章是我个人在历年护网中总结的一部分经验,因为个人能力有限,存在很多疏漏和错误,如被您发现,望不吝斧正。

第一部分 网络隔离

1 概述(what)

1.1 含义

网络隔离是指利用网络设备、网络安全设备、主机自身的网络访问控制功能进行的网络流量空间隔离。网络隔离的前提是网络安全域划分,网络安全域是指相同安全等级和业务属性(业务属性相同很重要)的网络元素的集合。网络隔离是将不同的网络安全域通过访问控制手段将网络流量限制和约束的措施和能力。网络隔离可以在任意不同的网络安全域之间设置,甚至在同一个网络安全域内部也可以根据需要划分更细粒度的子域,而在护网大背景下,网络隔离首先应该是指网络边界的隔离,即互联网、办公网、生产网之间的隔离。

1.2 原理

网络隔离的核心是访问控制策略,访问控制策略定义了网络中的每一个元素(源端)能够以怎样的方式(协议)访问其他的网络元素(目的端)。通常源端和目的端以IP地址和端口的组合来描述,因此一条网络访问控制策略必须包含源IP、源端口、协议、目的IP、目的端口五个元素,此外还需要判断规则:允许/禁止,以及优先级。

我们把网络的所有元素(节点)相互之间的访问关系抽象成一个矩阵,就可以绘制一张网络流量访问表。根据这张表格就可以定义网络内的访问控制策略。

1.3 原则

最小可用,非必要不开放是网络隔离的核心原则。当然,理想的做到最小可用是非常难的,要么网络结构极其简单,要么就是大型网络有非常良好的架构设计,能够以简单清晰的网络结构支持复杂的业务类型需要的网络形态(例如业务网除了常规的http以外,还可能有RPC、RDMA或者一些私有协议等等,在业务网以外还有管控网,在业务和管控网外还有带外管理网等)。合理的网络安全域划分能够优化网络架构,合理的网络架构容易设计访问控制策略,因此网络的设计是需要架构师做好的工作。

当然,当我们只讨论护网的场景,问题就简单多了,如果尽可能的缩小我们在网络大边界上暴露的范围,我们的目的就达到了。

2 目的(why)

网络隔离的核心作用是缩小攻击面,道理很简单,但没有丰富攻防对抗经验的朋友也行难以理解网络隔离的价值。良好的边界网络隔离可以大幅降低攻击的风险,如果要做且只能做一样安全措施来应对网络攻击的风险,那笔者一定选择网络隔离,这也是这篇文章被放在第一篇的原因。毫不夸张的说,良好的网络边界管理可以使风险水平降低70%甚至更多。

3 方案(how)

那么如何做好网络边界隔离,笔者总结了一般步骤。

  1. 定义功能域

首先根据网络架构的设计,按照功能属性将网络划分成一些不同的集合。划分的层次不同,粒度也随之不同。通常我们最关注顶层的划分,即包含:互联网、生产网、测试网、办公网,一些地方还会设计开发网、OA网等等。

  1. 划分安全性等级

不同安全性的网络域之间一定要做网络隔离,除非你能将所有的网络域都按最高安全等级来防护。但是即便如此,也没有人会把不同安全性的网络放在同一个网络域当中,因为当你低安全等级网络域达到A级,你会希望高安全等级网络域达到A++级,而且如果网络访问的顺序是从低到高的安全性,那么网络隔离本身也会从概率上降低攻击者侵入的可能性。

  1. 访问控制矩阵

访问控制矩阵具有相同的行和列表头,列表头代表源端,行表头代表目的端,任意两个行列元素对应的表格值就是对应该方向的访问控制策略。例如,列表头是网络A,行标头是网络B,那么表格中对应的单元格的值就是从A网络到B网络的访问控制策略的具体内容,例如允许A网络全部地址访问B网络全部443端口 ,A网络全部地址禁止访问B网络全部22端口,默认Deny。访问控制矩阵可以写在Excel中,格式如下表,读者可以根据自己的需要调整。

有了这样一张表格,就可以清晰的梳理整个网络系统的所有边界访问控制策略。当然在护网的大背景下,重点是互利网边界和办公网边界,通常访问控制策略会将限制在80和443这类web端口,并且禁止其他一切端口。

  1. 逃生策略

在网络边界的隔离方案的设计过程中,有一类需求应当谨慎地被考虑,这就是逃生策略。护网背景下的网络访问控制措施是比较严格的,因此当配置出现一些失误,或者设备出现故障时,很可能导致正常的业务无法运转,而由于问题发生在网络上,所以用来排除故障的应急恢复手段可能也无法执行。因此,在访问控制策略的设计中需要考虑保留个别网络通道,能够访问网络中最重要的设备,通过这条通道可以执行网络运维操作并恢复网络通信能力。这样的通道应该是个别的、保密的、功能有限的但具备特权的。逃生通道的使用源端最好也通过网络设备绑定IP、MAC地址或其他唯一性标识。

  1. 网络变更

网络安全域隔离最终一步是落地执行。从安全角度考虑,网络的限制越严格越好,但对业务有时候会带来负面的影响。因此,在确保网络访问控制策略合理的同事,也应该确保策略最终正确的被执行,而不是出现计划外的结果。网络变更最主要考虑稳定性风险,因此需要注意灰度发布、尽可能通知到相关的业务方等等。

4 需要注意的一些问题

网络隔离如此重要,真正实施难度也较大。不出意外,你们会遇到以下困难:

1.业务流梳理困难。

说不清哪些主机要访问哪些主机,这是绝大多数信息系统的常见病,但就笔者在各种网络环境中出生入死(笔者经历过各式各样的网络环境边界收敛,风险高难度大,说出生入死不夸张)的经验中看,这个问题几乎是无解的。有条件的读者可以在主机上编写一个程序记录网络日志,持续观测一段时间,从日志中可以整理出日常网络流量的规律。这个方法不是不行,但确实存在一些系统长年累月没有流量,但一断开就出故障的情况。因此,要解决这个问题一定要耐心调研,多问多记录多分析,最终变更谨慎仔细,没有别的好办法。

2.网络缺少规划,路由和acl规则混乱

由于某些原因,信息系统的网络可能从一开始的一个简单的构造不断的演化形成一个庞大的网络,这个过程中不断堆需求打补丁,而缺少真正的设计,这导致网络存在各种耦合和无序的情况。这个问题和上面一样,是无解的,在一些实践中会有一些技巧,但往往伴随特定的条件,因此没有通用的解决办法。因此,还是需要安全工程师和网络工程师耐心的整理和梳理,一点一点调整。同时,也需要组织的技术负责人能够充分认识到这项工作的难度和价值,对承担这项脏活累活的工程师予以支持和激励。

3.计划外的网络变更导致隔离策略失效。

隔离策略往往有立竿见影的效果,但是经常会有一些后续的变更会改变原先的隔离策略。笔者经历过因为隔离策略不知何时何因失效最终导致重大的损失的情况。对于这个问题,一方面要做好日常变更流程的把控,另一方面需要日常在网络中部署探测节点验证访问控制策略。

此外,还有一些注意事项。

首先,需要注意带外网络的管理和保护。硬件设备的管理网络和业务网络尽量不要放置在同一网络中,并且不要开放到不安全的环境区域,避免被攻击队利用。

其次,这项技术活的技术不光在安全技术和网络技术,更是对沟通能力、向上管理能力等软技能的综合考研。


Author | Mushen

THE QUIETER YOU BECOME, THE MORE YOU ARE ABLE TO HEAR. 安全运营搞了十多年,现在在阿里云做安全架构和SDL。