首页 > 代码库 > 读书笔记:计算机网络第10章:网络安全
读书笔记:计算机网络第10章:网络安全
章节概述
本章节涉及到所有的网络层,因为每个网络层都可能会有漏洞被黑客利用。网络安全的目的就是对付各种各样的网络威胁,通常我们使用加密技术来防止漏洞。但是本章只是网络安全的一个概要。如果你感兴趣的话可以参加另一门网络安全的课程。
网络安全就像性能,有些人非常看中安全,有些人却不一定需要。网络安全最关键的部分是建立威胁模型,描述威胁的原理以及攻击者能利用威胁做什么,这是评估危险程度的主要方法。但是网络安全并不都是将消息进行加密。网络威胁有盗窃信息、篡改信息、欺骗SNS、破坏网络服务等。
要保证网络安全是一件非常困难的事情,因为我们要保证网络的每个环节都没有缺陷。网络的安全程度取决于最脆弱的环节,但是软件中往往都会存在BUG。就拿WIFI举例说明吧。早期的wifi通过WEP算法进行加密,这种算法很容易破解,黑客只要通过一些破解软件就能读取WiFi的所有信号。现在,有了WPA2/802.11i,安全性能提升了很多,因为这种加密算法是无法在有限时间内破解的。但是即使加密无法破解,还是有很多其他的途径来破解网络,比如猜测WiFi密码,从计算机上获取密码,物理盗窃等。其中猜测Wifi密码相对来说还是比较容易的。
密码学有着丰富的历史,最初是从希腊开始发展的。密码学研究的是如何加密信息,而密码分析学研究的是如何破解加密信息。现代密码学强调计算量,强调破解一段密码需要非常大的计算量,需要计算很久的时间才能破解。
接下来介绍一下密码学的用途。密码学可以证明通信对方确实是目标用户而不是黑客,可以确认消息没有被篡改或偷听。设计安全的加密方法是非常困难的,因为一不小心就会出现缺陷导致密文被破解。好的加密算法需要经得起数学证明。
大部分的网络协议都是在互联网还没普及的时候发明的。当时的互联网很小,也不需要考虑安全性,所以目前很多网络协议都是有安全问题的。但是如今互联网普及了,很多安全性需要得到保证。
接下来几节将会讲到威胁模型、消息保密、信息验证、无线安全、Web安全、DNS安全、VPN、防火墙、DDOS。
消息保密
本节主要讲的是通过加密技术来保证信息不被泄漏。加密方法主要分为对称加密和公钥加密。
加密的目标就是要保证信息不被泄漏。因为网络在传输的过程中信息可能会被窃听。
加密解密模型就是发送放将消息进行加密,再通过网络传输,对方接收到之后将消息进行解密,得到明文。这样,消息即使在传输的过程中被黑客窃听,他也无法得到消息的明文。这种模式下,需要保证密文是可以解密的;需要假设黑扩知道加密算法,因为安全性并不是依赖于加密算法,而是通过密钥来保证安全性。有两种常见的加密方法,有对称加密和公钥加密。对称加密比较常见的有AES,这种算法双方都有相同的密钥。公钥加密比较常见的有RSA,这种算法需要双方各有一套公钥密钥对。它基于数学上的大数不可分解性。
接下来介绍一下对称加密的通信过程。首先发送方将消息通过密钥进行加密,再通过网络传输给对方。对方接收到消息后使用相同的密钥将消息进行解密。这样就得到了明文内容。
下面介绍一下公钥加密的通信过程。首先发送方有对方公钥,接收方有自己的私钥。公钥是公开的,即使黑客知道了也不会造成安全隐患。发送方使用公钥将消息进行加密,再通过网络传输到对方。对方接收到消息后,使用自己的私钥进行解密得到明文内容。由于世界上只有他知道密钥,所以世界上能解密的人也只有他一个。
密钥和公钥如何通过网络传输呢?实际应用中,我们经常需要和一些从未接触过的主机进行通信,这种情况下密钥和公钥的传输是一个很大的问题。对称加密需要将密钥通过网络传输,这就有可能造成密钥的泄漏。公钥加密系统可以将公钥告诉对方,但是公钥在网络传输的过程中也有可能会被黑客篡改。所以需要引入富有公信力的第三方来保证公钥的安全。这就是证书的概念。关于证书在后续的章节中还会详细分析。
下面对比一下对称加密和公钥加密。对称加密的密钥很难通过网络进行传输,而公钥加密系统可以将公钥通过网络传输而不会造成安全问题。对称加密的计算速度相对来说是比较快的,而公钥加密系统的计算性能是比较慢的,而且只能将很小的一段数据进行加密。这两种加密算法各有优缺点,所以如果将这两种加密方法组合在一起,就能得到更强大的加密系统。
组合加密的通信过程是这样的。发送方使用公钥加密系统将对称加密的密钥进行加密后传输给对方,对方使用自己的私钥得到对称加密的密钥。这样,双方就可以通过对称加密进行通信了。这里对称加密的密钥称之为会话密钥,它只是临时生成的一段密钥,仅用于短期通信。
消息验证
本节主要介绍消息的验证方法,通过加密信息来确保对方是发送者而不是黑客,确保消息没有被中途篡改。
为什么已经将信息加密了,信息还会被篡改呢?因为黑客可以将密文进行修改,这样接收方解密之后得到的明文是乱码。黑客还可以将密文的顺序颠倒。如果软件设计不严格就会造成安全问题。
MAC消息验证码是一小段代码,用于验证消息的正确性。过程是,首先发送方在数据的末尾添加MAC信息,经过加密后发送给对方。对方接收数据,解密,再通过MAC验证消息是否正确。实际应用中常用的MAC是HMAC(Hash MAC)算法。
另外一种验证消息的方法是通过数字签名。数字签名类似MAC,只是数字签名使用了类似公钥加密的机制。实际应用中常见的数字签名有RSA数字签名。发送方使用私钥将数据进行签名,接收方可以使用公钥验证消息是否准确。
实际应用中,如果将整个消息进行签名,那需要很大的计算两。所以为了加速签名的计算过程,实际应用中往往会先计算消息的摘要,再对摘要进行签名。接收方先计算消息的摘要,再对摘要进行验证。
消息摘要是一种安全的哈希函数。这种函数将输入转换成看起来随机的输出,无法在短时间内找到哈希碰撞,而且输出的哈希代码都是固定长度的。固定长度非常有用,它能简化很多算法。
另外一个问题是,黑客可以将窃听到的消息重新发送一遍。接收方可以正常解密数据,而且数字签名也是正确的。为了防止这个问题,我们需要在消息中加入特殊的消息来保证消息不是重复发送的。一般可以在消息中加入时间戳或者序号。
密码学的设计可以保证信息是正确的,可以保证信息确实来自对方,可以保证信息不是被黑客重复发送的,可以保证信息不被窃听。实际应用中的各种协议将各种加密技术混合在一起,每种协议都有不同的混合方法。混合方法不当就会导致缺陷。
无线安全
本节主要的话题是无线网络中的安全问题,主要讨论802.11。
无线网络和有线网络的区别在于,无线网络的通信都是广播的,附近所有的设备都能接收到信号。这就导致了很多安全问题。黑客可以劫持用户的网络通信,并且可以越过权限访问网络。就802.11而言,黑客可以通过无线网络接收或者发送数据。
802.11的安全性是基于密码的。1999年使用WEP来确保安全性,但是后来发现WEP有严重缺陷,非常容易破解。2004年有了WPA/802.11i。目前使用WPA2来保证无线安全。安全性是802.11协议的一部分。它将IP层进行加密,然后通过物理层进行传输。因此,802.11只能保证IP层是安全的,IP层以下的网络层就无法保证安全了。
在家庭无线网络中,通常设置AP的密码。每个设备都需要知道密码,每个设备都需要证明它知道密码。设备连接无线时,需要经过验证程序。AP和设备各自根据密码生成一段会话密钥。如果设备的会话密钥和AP的会话密钥一直,则说明设备的WiFi密码是正确的。当通信时,设备和AP在发送数据时都需要对数据进行加密。
下面介绍一下WiFi建立连接的过程。首先是AP向客户端发送一个随机序号。客户端根据MAC地址、序号、密码生成会话密钥,并将序号和MIC-S发送给AP。AP根据客户端的MAC地址、序号、密码生成KeyS,如果没有错误的话,AP生成的KeyS和客户端生成的KeyS应该是一样的。AP使用KeyS将对称密钥KeyG进行加密,并将加密结果和MIC-S发送给客户端。客户端使用KeyS将确认信息ACK进行加密,并将加密结果和MIC-S发送给AP。
企业的无线网络更加复杂。它需要一台专门的验证服务器。每个客户端都有不同的身份凭证。具体的工作原理由于太复杂,这门课程中就不再详细展开了。
Web安全
本节主要讲的是如何保证Web的安全。主要介绍了SSL、TLS、HTTPS和证书机制。
在Web中,有很多安全问题值得注意。客户端可能会遇到恶意的网页内容,钓鱼网站可能会欺骗用户,服务器和客户端之间可能会被黑客介入,从而导致数据泄漏。为了解决安全问题,有人发明了HTTPS。它能防止客户端和服务端之间被黑客介入,能防止假冒的网站。
HTTPS只是HTTP的扩展,它只是让普通的HTTP运行于SSL/TLS之上,而不是TCP之上。SSL最初由Netscape发明。1995年发明了SSL2,但是有缺陷。1996年,修复了SSL2中的缺陷,成为SSL3。TLS是一种开放的安全协议,在1999年的时候出现TLS 1.0,2006年1.1,2008年1.2。SSL/TLS可以用在任何应用中,不一定只能使用HTTP。
SSL的作用就是保证客户端和服务端之间没有任何中介,保证消息的传输是私密的、正确的、经过验证的、新鲜的。SSL由验证阶段和传输阶段组成。
SSL/TLS的验证过程是重点要介绍的。客户端必须能够安全地连接到服务器,而且这个服务器是从未连接过的,客户端不知道服务器的公钥。SSL/TLS的验证过程主要是通过公钥进行验证的,但是客户端如何获取服务器的公钥呢?答案是通过证书来获取。
证书就是将SSL/TLS的公钥和网站的信息绑定在一起。证书的格式称之为X.509。证书是PKI公钥基础设施的一部分。公钥基础设施见下图。它是一种分层结构的系统,上级能够验证下级。最高的一级是公钥根,它能验证RA的合法性,RA能验证CA的合法性,CA能验证证书的合法性。证书在整个系统中是最底层的。浏览器或者操作系统都会内置很多Root公钥(100多个)。在实际应用中,公钥可能会被篡改,证书也有可能会过期。所以PKI就需要一种机制让过期的证书得到更新。
SSL3的验证过程如下:
协商加密算法、发送证书
客户端得到证书之后,再联系CA来验证证书的正确性。验证通过后得到服务器的公钥
客户端使用服务器的公钥将一段随机数和会话密钥进行加密,加密后发送给服务器
服务器收到密文后,使用私钥进行解密,得到随机数和会话密钥,并将随机数发送给客户端
客户端检查随机数是否正确。如果正确的话,就表明对方的身份是正确的,可以安全通信
随后的通信都使用会话密钥将数据加密后通信
总结一下,SSL/TLS用于安全通信,实际应用中广泛被采用。客户端通过PKI和证书来验证服务器的身份。
DNS安全
本节主要介绍如何通过DNSSEC实现DNS安全。
域名是网络服务的关键。DNS将域名映射到IP地址,如果映射到错误的IP地址上,就会发生灾难性的安全问题。DNS安全的目标就是保证DNS是正确的。DNS在网络传输的过程中可能会被篡改。
DNS欺骗就是黑客代替DNS服务器作出应答,然后将错误的解析地址返回给客户端。有时候客户端是下游的DNS服务器,如果下游的DNS服务器被污染,那么很多计算机都会遭受污染,影响范围很大。DNS欺骗有很多难点,黑客怎么知道DNS请求什么时候发送?域名是什么?黑客要怎样回应DNS,使得它看起来像真的一样?当真的DNS服务器作出回应后会发生什么?下面对这几个问题进行解答。
黑客怎么知道主机什么时候发送DNS请求?请求的域名是什么?其实黑客可以自己发送DNS请求,然后自己作出应答。这样就能污染服务器的缓存,让用户受害。
黑客如何回应DNS请求,使得它看起来像真的一样?DNS回应时会检测来源IP和请求ID。黑客可以将自己的IP修改成正规IP,通过暴力破解DNS请求ID。客户端发送DNS请求之后,黑客抢先于真服务器作出应答。通过这几个方法,黑客就有很大的可能性成功。
真服务器返回DNS应答之后会发生什么?会被忽略掉。因为假冒的DNS应答已经被计算机接受了,所以真服务器即使返回了正确的应答,也会被忽略掉。
DNSSEC就是DNS安全扩展的简称。它在DNS中加入了新的记录类型:RRSIG DNSKEY DS。目前DNSSEC还在普及中,需要升级世界上所有的客户端和服务器。RRSIG记录中保存了域名记录的数字签名。DNSKEY记录中保存了RRSIG的公钥。DS保存了委托域名的公钥。NSEC/NSEC3记录用于验证拒绝存在的域名。
DNSSEC的实现原理是怎样的呢?首先客户端发送常规的DNS请求,服务端作出了普通的回应。客户端需要做的就是验证服务器的回应没有被篡改过。验证的原理和SSL证书类似,也是通过公钥签名算法,也是分层结构的,高层服务器验证下一级的服务器是正常的,以此循环。
DNSSEC还有其他一些特性。NSEC/NSEC3记录用来证明某个域名的记录不存在。DNSSEC可以选择将请求和应答绑定在一起防止DNS欺骗。DNSSEC还在DNS头部中加入了一些标志,用于今后的部署。
总结一下,DNS由于没有安全措施,在现实生活中很容易实现DNS欺骗。DNSSEC通过公钥分层结构来验证DNS回应,防止DNS欺骗。
防火墙
防火墙禁用了某些IP,让某些IP只能单向通信。防火墙让内网的机器能够连接到外网,但是外网的机器不能连接到内网。
在前几章中讲到了中间件的概念,处于和路由器相同的位置,但是比路由器的功能更多。防火墙就是中间件的一种。
防火墙分为两个部分内部和外部。当有数据包试图通过防火墙时,防火墙会根据规则来判断是否允许它通过。如果允许,那就不改变数据包的任何数据,让数据包通过;如果拒绝,那就默默地丢包。
防火墙最关键的问题在于如何设置过滤规则。策略配置是一种高级配置,因为和数据包的应用、内容有关,而数据包过滤是一种低级的配置。它仅仅限制了网络能够访问的范围。防火墙分为有状态和无状态。无状态防火墙是最简单的防火墙,它只会根据IP、端口规则来过滤数据包,无法根据数据包的内容进行过滤。有状态防火墙比无状态防火墙稍微好一些,它能够根据数据包的前后关系来过滤数据包。比如NAT在连接之后才允许外部的TCP数据包通过防火墙。应用层防火墙比有状态防火墙更好一些。它会根据应用的使用、数据包的内容来过滤数据包。比如有些数据包中含有病毒,这种防火墙就不会允许它通过。数据包通过这种防火墙时,为了分析数据包内容,数据包会被防火墙拆解。
传统的防火墙在部署的时候会放在内网和DMZ之间,这样才能很好地保护内网。防火墙还有很多其他的部署方式,比如AP之间也会有防火墙、操作系统也会自带防火墙。
VPN虚拟私有网络
本节的主要话题是使用VPN在互联网的基础上建立局域网。VPN使用IPSEC来保护消息。
在互联网中最好的位置就是你能够给所有的计算机发送数据,最差的位置就是所有的计算机都能够给你发送数据。现实生活中经常有一种需求就是将私有网络和互联网隔开,许多公司就有这种需求。为了建立私有的网络,可以铺设一条专线,但是成本太昂贵了。另外一种办法就是在互联网的基础上铺设虚拟的专线,使得私有网络在逻辑上和互联网是隔开的。
VPN最初的目的是希望私有网络和互联网隔离,最大的隐患在于黑客可能窃听数据包,甚至可能修改数据包。
那么如何在互联网的基础上建立虚拟连接呢?用隧道技术。私有网络中的各个主机可以正常地相互通信,当网络需要通过虚拟连接时,VPN终端会将数据包进行封装,然后通过IP协议将数据包发送到远端,再进行拆封。封装的时候针对的是IP层,先将IP层进行加密,再将加密后数据通过IP层进行传输。这样的话就相当于在IP层之外再包了一层IP层。封装之后的数据包形式如下图。外层IP用于连接VPN隧道的两端。内层IP用于连接私有网络中的两台主机。但是单独的隧道技术无法保证安全性,因为黑客可以修改数据包、窃听数据包中的内容,所以需要使用IPSEC协议来保证VPN隧道的安全。
IPSEC是IP层的安全协议。它能够保证通信的私密性、正确性。IPSEC的操作步骤是先配置连接,通信的过程变成类似TCP的通信机制,最后在IP包的头部和尾部分别增加验证信息。下图展示了一个典型的IPSEC数据包。尾部的Authentication其本质是ESP尾。
总结一下,VPN可以在互联网上建立一个私有网络,在私有网络中通信时,需要将数据包进行封装。VPN在传输的过程中需要IPSEC来保证通信安全。
DDOS分布式拒绝服务攻击
本节主要话题是分布式拒绝服务攻击。这种攻击的目的是让网络服务不可用,到目前为止还没有找到高效的对付方法。
网络中最好的位置是你能够向所有的计算机发送数据,最差的位置是所有的计算机都能向你发送数据。当有很多数据包涌向服务器时,服务器就有可能无法正常提供服务。这就是DOS攻击的一种形式之一。
黑客将大量的数据涌向服务器,超出了服务器能够处理的能力范围。
现阶段,DDOS攻击是互联网上一个比较验证的问题。AKAMAI 2012Q3报告指出,美国银行的DDOS攻击流量峰值达到65Gbps。每秒65G的流量!这么大的流量是任何设备都无法处理。所以目前DDOS没有一种完美的解决办法,只能通过CDN、网络数据包过滤来起到一点帮助。
DOS攻击的目的就是让目标系统无法给正常用户提供服务。通常情况下,黑客占用了所有的系统资源,让正常的用户无法得到服务。在网络中,系统通常指的是服务器,资源指的是网络带宽、CPU、内存等。
有时候黑客只需要一台机器就能完成DOS攻击。他可以发送少量奇怪的数据包就能让主机消耗所有资源。比如死亡之Ping、SYN洪水攻击等。为了防止SYN洪水攻击,有人发明了SYN Cookie。
有时候黑客需要通过许多机器来发动攻击。这种攻击方式称之为DDOS。目的是让网络线路达到饱和状态,造成网络高度阻塞、大量丢包,使得正常用户无法访问服务器。通常,黑客会通过僵尸网络发动DDOS攻击。攻击进行时,攻击目标附近的网络会达到饱和状态,使得正常用户无法访问服务。
身份伪造也是另外一个安全问题。黑客可以修改自己的IP地址,将伪造的IP地址放在数据包的来源地址字段。传统的互联网不会检查来源地址,而是将数据包传递给对方。这种方式称之为IP地址欺骗。通过这种方式可以隐藏黑客的地理位置。黑客还可以通过这种方式来冒充他人的身份。这样会造成很大的安全隐患。
解决IP地址欺骗最好的办法就是在数据包通过路由器的时候验证IP地址的正确性。这是一种很好的解决办法,但是目前普及的速度依然非常缓慢。
防御DOS攻击有多种方法。可以增加服务器周围的网络带宽,防止丢包发生,可以使用CDN来保持高度的网络容量。可以过滤攻击流量,越早过滤防御效果越好。目前ISP会统计数据流量,将可疑的攻击流量进行过滤。