1.7 良好的网络安全策略是具有预见性的
网络安全体系结构
现在是凌晨3点,而你可以像婴儿一般酣睡。那太好了,这要归功于你为保护新的电子商务站点而奋战的所有日日夜夜,你采用了能买到的最好的安全设备和软件来保护自己的站点。你拥有一对能处理OC-48的防火墙,拥有能够自定义复杂特征的NIDS,昂贵的报警和报告工具会在每天上午向你的老板提交报告,也会检查文件系统中最新的数据,日志分析器会对你的服务器进行分析。拥有这些最新的安全技术保障,哪怕你尚未深入了解它们的工作原理,你仍然可以通过配置防火墙使其过滤掉入站会话中的不速之客,也可以启用自带了华丽默认特征集的NIDS(你做了些调优来减少针对普通流量的警报),还能够让文件、日志与报告工具都摆出一副正在工作的姿态。
不幸的是,在你即将坠入梦乡时,一位攻击者还是闯入了你的Web服务器。他通过一个刚刚发现的HTTP漏洞获得了服务器的管理权限(这个行为防火墙是允许的),然后在这台设备上对非军事区(demilitarized zone,DMZ)中的其他服务器继续发动攻击。虽然NIDS已经安装了能够识别这种攻击的特征集,但这位黑客对攻击数据包进行了分片,而你不知道NIDS的默认设置是关闭分片重组,更不知道应该对这个设置进行修改。于是,在你早上到达工作岗位之前,一些服务器已经被他/她控制了,而你得花上一整天的时候来处理这个问题。
上面的例子可以说明系统的安全性符合短板效应,最薄弱的环节反映了整个系统安全性优劣。但我在此强调的重点是,安全系统只有在得到了合理的设计和配置之后,才能发挥真正的作用。在规划安全网络时,必须明白一个道理:购买并安装了所有最新技术并不等于它们就可以抵御一切攻击。哪怕你的网络中充斥着堆积如山的安全产品,这个道理依然成立。如果你根本就搞不清楚这些产品应该在网络中扮演一个什么角色,那它们就连抵御最基本的攻击也做不到—除非瞎猫碰上死耗子。因此,你应当对安全系统中每种技术所扮演的角色、这些技术的局限性,以及在你的系统中是否存在其他能够防范相同威胁的技术有一个清醒的认识。你的目标是掌握自己安全系统的优势和劣势,这样在遭受新的威胁时,你才有能力快速判断出当前系统是否足以处理这一问题。简单地说,成功的安全系统是具有预见性的。
要建立具有预见性的网络,你必须完成以下几点。
(1)确信你理解了系统可能遇到的活动和事件,包括攻击行为。
(2)考虑如何构建一个可缓解这些攻击的系统。
(3)考虑你自己系统内部可能失败的形,确保你的设计符合本书在第一个公理(安全是一个系统)中讨论的那样是层次化的。
安全工程师在设计阶段应当考虑这些问题。否则,安全系统就会表现出不具有预见性的特点,并因此产生各类形式的风险。这项工作也不应该随着安全设计的完成而终止,在运行阶段时,你是否能够正确处理安全事件也必须列入考量。这就类似于其他工程领域的做法:汽车要经过碰撞测试、建筑物设计要经过抗震分析、儿童玩具(通常)要证明无害。
下面我们通过其他示例来进行进一步的说明。
如果Internet边界防火墙配置有误,导致外部网络可以通过所有端口访问防火墙所保护的Web服务器上,而不是只能通过管理员选定的端口进行入站访问,这该怎么办呢?在进行具有预见性的设计时,要将这种可能性也考虑进去,设计者要能够指明所有可能发生的后果。从服务器上可能发生什么,到服务器被控制会发生什么,再到有可能由此发动什么第二波攻击。
当你在为零售办公室与终端汇聚点之间设计高可用性IPSec VPN时,要考虑到在这个VPN出现各类失效情形下,都有可能发生什么?可预见性的设计方法会将使用备份终端设备新建连接的速率考虑进去,这可以确保设备如期完成任务。而不具有预见性的设计直到实际发生问题时才会考虑这种情形。这不是一个愉快的体验,它会使得等待连接重新的时间长得令人难以忍受,还会因为负载增加而使备用设备的性能到达瓶颈。
如果实验室中的路由器配置有误,导致这台设备向生产网络错误地广播了伪造的路由选择更新会发生什么?可预见性的设计会考虑如何过滤离开实验室环境的更新数据包(这可以采取与生产路由器的对等体认证机制等方法来实现)。无预见性的设计则不会考虑生产路由表遭到损坏的可能性。
从个人的角度来说,我总是很关注IT部门如何确保他们的网络设计具有高度的可预见性,这种预见性让支持这个设计方案的人充满自信,相信这个网络能够正常运行。人人往往难以容忍中断,难以容忍网络在高峰期暴露出的种种问题,难以容忍莫名其妙的网络延迟。解决这类问题体现了网络工程师的核心价值,而这也是培训课程与认证考试的基础。问题是,在安全性设计中,它们很少作为一个硬性指标。在某些情形下,缺乏预见性的安全设计会导致一些充满了戏剧性的、让人始料未及的负面影响,这些负面影响往往比其他网络故障更加匪夷所思,也更难以恢复。合理的做法是保证网络设计与安全设计一起完成,这是本书的主题,而具备预见性是这两种设计的基本条件。