https://book.systemsapproach.org/security/problem.html
计算机网络通常是由代表不同利益的许多应用程序使用的共享资源。互联网的共享尤其广泛,被相互竞争的企业、相互对立的政府和投机取巧的犯罪分子所使用。除非采取安全措施,否则网络对话或分布式应用可能被对手破坏。
例如,考虑一下安全使用网络的一些威胁。假设你是一个使用信用卡从一个网站上订购物品的顾客。一个明显的威胁是,对手会窃听你的网络通信,阅读你的信息以获取你的信用卡信息。这种窃听是如何实现的呢?在诸如以太网或Wi-Fi这样的广播网络中,这是微不足道的,任何节点都可以被配置为接收该网络上的所有信息流。更复杂的方法包括窃听和在任何相关的节点链上植入间谍软件。只有在最极端的情况下(如国家安全),才会采取严肃的措施来防止这种监控,而互联网不是这些情况之一。然而,对信息进行加密以防止对手了解信息内容是可能的,也是实用的。这样做的协议被称为提供保密性。再往前走一步,隐藏通信的数量或目的地被称为流量保密性--因为在某些情况下,仅仅知道有多少通信被送往何处对对手来说是有用的。
即使有了保密性,对网站客户来说仍然存在威胁。一个无法阅读你的加密信息内容的对手仍然能够改变其中的几个比特,导致一个有效的订单,例如,一个完全不同的项目或可能是1000单位的项目。有一些技术可以检测到,如果不能防止,这种篡改。检测这种信息篡改的协议被称为提供完整性。
对客户的另一个威胁是在不知情的情况下被引导到一个虚假网站。这可能是由域名系统(DNS)攻击造成的,其中虚假信息被输入到DNS服务器或客户计算机的名称服务缓存中。这导致将正确的URL翻译成不正确的IP地址--虚假网站的地址。一个确保你真的在与你认为的人交谈的协议被称为提供认证。认证需要完整性,因为如果一个消息不再是同一个消息,说它来自某个参与者是毫无意义的。
网站的所有者也会受到攻击。一些网站被污损;构成网站内容的文件被远程访问并未经授权而修改。这是一个访问控制的问题:执行有关谁被允许做什么的规则。网站还受到拒绝服务(DoS)攻击,在这种情况下,可能的客户无法访问网站,因为它被虚假的请求淹没了。确保一定程度的访问被称为可用性。
除了这些问题之外,互联网还被用来作为部署恶意代码的手段,一般称为恶意软件,利用终端系统的漏洞。蠕虫是在网络上传播的自我复制的代码,几十年来一直为人所知,并继续造成问题,其亲属病毒也是如此,它通过传输受感染的文件来传播。被感染的机器然后可以被安排成僵尸网络,可以用来造成进一步的伤害,如发起DoS攻击。
信任与威胁
在我们讨论如何和为什么要建立安全网络之前,重要的是要确定一个简单的事实:我们将不可避免地失败。这是因为安全问题最终是一个关于信任的假设、评估威胁和减轻风险的练习。世上没有完美的安全。
信任和威胁是一个硬币的两面。威胁是一种潜在的失败情况,你设计你的系统是为了避免这种情况,而信任是你对外部行为者和你所建立的内部组件将如何表现的一种假设。例如,如果你在一个开放的校园里通过WiFi传输信息,你可能会把能够拦截信息的窃听者认定为威胁(并采用本章讨论的一些方法作为对策),但如果你在一个锁定的数据中心的两台机器之间通过光纤链路传输信息,你可能相信这个通道是安全的,所以不采取额外的措施。
你可以争辩说,既然你已经有办法保护基于WiFi的通信,你也可以用它来保护基于光纤的通道,但这假定了成本/效益分析的结果。假设保护任何信息,无论是通过WiFi还是光纤发送,都会因为加密的开销而使通信速度降低10%。如果你需要从科学计算中榨取最后一盎司的性能(例如,你试图模拟飓风),而有人闯入数据中心的几率是百万分之一(即使他们这样做了,正在传输的数据也没有什么价值),那么你就有理由不保护光纤通信通道的安全。
这类计算一直在发生,尽管它们往往是隐含的和未说明的。例如,你可以在传输信息之前对其运行世界上最安全的加密算法,但你已经隐含地相信你运行的服务器既忠实地执行了该算法,又没有将未加密信息的副本泄露给对手。你是把这当作一种威胁,还是相信服务器不会有不轨行为?在一天结束的时候,你能做的最好的事情就是降低风险:识别那些你能以经济有效的方式消除的威胁,并明确你所做的信任假设,这样你就不会被不断变化的环境所吓倒,例如一个更加坚定或复杂的对手。
在这个特定的例子中,随着我们更多的计算从本地服务器转移到云端,对手破坏服务器的威胁已经变得相当真实,所以现在正在研究建立一个可信的计算基地(TCB),这是一个有趣的话题,但它属于计算机架构领域,而不是计算机网络领域。就本章而言,我们的建议是注意信任和威胁(或对手)这两个词,因为它们是理解安全主张的背景的关键。
有一个最后的历史说明,有助于为本章做铺垫。互联网(以及之前的ARPANET)是由美国国防部资助的,这个组织当然了解威胁分析。最初的评估主要是关注网络在面对路由器和网络故障(或被破坏)时的生存问题,这就解释了为什么路由算法是分散的,没有中央故障点。另一方面,最初的设计假定网络内的所有行为者都是可信的,因此很少或根本没有注意到我们今天所说的网络安全问题(来自能够连接到网络的坏行为者的攻击)。这意味着本章所描述的许多工具可以被认为是补丁。它们是以密码学为基础的,但仍然是 "附加的"。如果要对互联网进行全面的重新设计,整合安全将可能是最重要的驱动因素。