计算机网络-第七章-网络安全
第七章 网络安全
本章目标
网络安全原理:
- 加密,不仅仅用于机密性
- 认证
- 报文完整性
- 秘钥分发
安全实践
- 各个层次的安全性:应用层,传输层,网络层和链路层
- 两种网络安全的设备:防火墙、入侵检测系统
7.1 网络安全定义
网络安全包括且不限于以下几个指标
性能 | 说明 |
---|---|
机密性 | 只有发送方和预订的接收方能否理解传输的报文内容:发送方加密报文;接收方解密报文 |
可认证性 | 发送方和接收方需要确认对方的身份(防止第三方伪造身份) |
报文完整性 | 发送方、接受方需要确认报文在传输的过程中或者事后没有被改变 |
访问控制和服务的可用性 | 服务可以接入以及对用户而言是可用的(通过访问控制来实现服务的可用性) |
下面是一个著名的模型
- Bob、Alice(lovers)需要安全的通信
- Trudy(intruder)可以截获、删除和增加报文
坏蛋可以做什么:
操作 | 说明 |
---|---|
窃听 | 截获报文 |
插入 | 在连接上插入报文 |
伪装 | 可以在分组的源地址写上伪装的地址 |
劫持 | 将发送方或者接收方踢出,接管连接 |
拒绝服务 | 阻止服务被其他正常用户使用(例如通过对资源的过载使用) |
7.2 加密原理
7.2.1 加密概述
相关术语
符号 | 意思 |
---|---|
m | 明文 |
KA(m) | 密文,采用KA进行加密 |
m = KB(KA(m)) | 用KB解密得到的是明文 |
KA、KB | 密钥 |
加密分类
- 对称密钥密码学:发送方和接收方的密钥相同
- 公开密钥密码学:发送方使用接收方的公钥进行加密,接收方使用自己的私钥进行解密
破解一个加密的方案
-
唯密文攻击:Trudy仅有密文可供分析
这种情况有2个方法:
- 暴力破解:尝试所有可能的秘钥
- 统计分析
-
已知明文攻击:Trudy 拥有部分与密文对应的明文
- 例如:在单码替代密码中,Trudy已经知道某些字母之间的匹配a,l,i,c,e,b,o,
-
选择明文攻击:Trudy 可以得到选择明文对应的密文
7.2.2 对称加密
(1) 简单对称加密方案
替换密码: 将一个字母换成另外一个字母
- 单码替换密码: 将一个字母替换成另外一个字母
加密秘钥:26个字母和26字母的映射关系
这种情况下加密的可能性就是26!,但是可以通过词频来猜测映射关系
一个更复杂的加密方法
-
个替换密码, M1,M2,…,Mn
-
循环模式:
例如:n=4: M1,M3,M4,M3,M2; M1,M3,M4,M3,M2; ..
-
对于每个明文字符,采用循环替换模式的下一个
• dog: d from M1, o from M3, g from M4
加密的秘钥: n个替换模式(字母替换表)和循环模式(秘钥不仅仅是:字母之间的映射模式)
(2) DES
① 基本情况
DES: Data Encryption Standard
- US 加密标准[NIST 1993]
- 秘钥和明文长度:56-bit 对称密钥, 64-bit明文输入(这样规定了输入的长度,就有了后面的块加密、密码块链等)
- 加密分类:块加密(也就是将明文分块,每块加密之后再组合到一起)、密码块链
- DES的安全性
- DES挑战: 56-bit密钥加密的短语(“Strong cryptography makes the world a safer place”) 采用暴力解密,不到一天时间(加密强度不够)
- 可能有后门:就是存在一种密钥可以解开所有的密文,作为后门,但只是有可能,并不是真实存在
- 如何使DES更安全:
- 使用3个key、3重DES 运算(现在还没有人声称能够破除3重DES运算)
- 密文分组成串技术
加密方式
- 初始替换
- 16 轮一样的函数应用,每一轮使用的不同的48bit密钥
- 最终替换
② 块密码
- 可以看到是分块加密了
- 缺点:如果输入块重复,将会得到相同的密文块
③ 密码块链
可以解决块加密的问题
- 密码块链:第i轮输入m(i), 与前一轮的密文,c(i-1)做异或
- 然后当前块的加密结果和前面所有的块都有关
(3) AES
AES: Advanced Encryption Standard
- 新的对称密钥NIST标准(Nov. 2001) 用于替换DES
- 数据128bit成组加密
- 128, 192, or 256 bit keys
- 暴力法解密如果使用1秒钟破解DES, 需要花149万亿年破解AES
对称加密:
- 需要发送方和接收方对共享式对称密钥达成一致
- Q: 但是他们如何第一次达成一致(特别是他们永远不可能见面的情况下)?
对称加密时,密钥分发是一个问题,如何让对方得到密钥但是第三方不会得到
7.2.3 非对称加密
也叫作 公开密钥加密算法
(1) 引出
对称加密的问题
- 需要发送方和接收方对共享式对称密钥达成一致
- Q: 但是他们如何第一次达成一致(特别是他们永远不可能见面的情况下)?
公开密钥加密
- 完全不同的方法[Diffie-Hellman76,RSA78]
- 发送方和接收方无需共享密钥
- 一个实体的公钥公诸于众
- 私钥只有接收方自己知道
(2) 原理
- Bob有公钥KB+和私钥KB-
- 将公钥KB+公开,此时Alice得到了KB+
- Alice要给Bob发送信息m,用KB+加密得到KB+(m)发送给Bob
- 然后Bob用KB-解密得到 m = KB-(KB+(m))
- 公钥密码学彻底改变了2000年(以前只有对称密钥)的密码学!
- 同样的想法几乎同时,且独立地出现在美国和英国
(3) 要求
- 需要 公钥KB+和私钥KB-,并且满足 m = KB-(KB+(m))
- 给定公钥KB+,导出私钥KB-计算上不可行(就是不能由公钥退出私钥)
(4) RSA算法
RSA:Rivest, Shamir, Adelson algorithm,这是最典型,使用最多的公开密钥加密算法
① 流程
1. 准备
- 报文: 就是一个bit模式
- Bit模式可以唯一的用整数来表示
- 因此,加密一个报文就等于加密一个整数
例子:
- m= 10010001.报文可以唯一的用十进制数145来代替.
- 为了加密m,我们加密相应的整数,得到一个新的整数(密文)
2. 创建公私钥对
- 选择2个很大的质数p, q . (例如:每个1024 位)
- 计算n = pq, z = (p-1)(q-1)
- 选择一个e (要求e<n) 和z 没有一个公共因子,也就是e和z互素
- 选择d 使得ed-1 正好能够被z整除.(也就是:ed mod z = 1 ).
- 得到公钥 KB+ 为 (n,e). 私钥 KB- 为 (n,d).
3. 加密和解密
-
给定按照上述算法得到的公钥(n,e) 和 私钥(n,d)
-
加密报文m (<n), 加密算法 c = me mod n
-
对接收到的密文c解密,如此计算 m = cd mod n
也就是 m = (me mod n)d mod n
② 案例
Bob 选择
- p=5, q=7(都是质数)
- 因此 n= pq = 35, z = (p-1)(q-1) = 24.
- e=5 (e, z 互素).
- d=29 (ed-1 能够被z整除).
加密8bit的报文 00001000
加密
- bit pattern = 00001000
- m = 12
- 密文c = (me mod n) = 17
解密
- 明文 m = (cd mod n) = 12
- 其中 cd = 481968572106750915091411825223071697
③ 原理
为什么RSA可行,也就是为什么 m = (me mod n)d mod n
前置知识:模运算
-
x mod n = x除以n得到的余数
-
一些事实:
- [(a mod n) + (b mod n)] mod n = (a+b) mod n
- [(a mod n) - (b mod n)] mod n = (a-b) mod n
- [(a mod n) * (b mod n)] mod n = (a*b) mod n
-
因此 (a mod n)d mod n = ad mod n(后者是d个a相乘)
-
例子: x=14, n=10, d=2:
(x mod n)d mod n = 42 mod 10 = 6
xd = 142 = 196,xd mod 10 = 6
一个有用的数论定理: 如果p,q 都是素数,n = pq, 那么:
④ RSA做数字签名
RSA有一个比较重要的特性
- 也就是先用公钥,然后用私钥的结果
- 和先用私钥,然后用公钥的结果一致
证明
这个特性可以用来做数字签名
⑤ 特性
为什么RSA安全
- 假设知道了Bob的公钥(n,e),求解私钥d的难度有多大(n,d)?
- 本质上是在不知道2个因子p和q的情况下,求解n的因子
- 事实是:分解一个大的整数是非常困难的
- 在RSA中求幂次方的运算代价非常大
- DES(对称加密)最起码比RSA快100倍
即优点是安全,缺点是代价大
7.3.4 对称和非对称结合
RSA的问题是运算代价很大,对称加密的问题是密钥的传递,可以结合
- 采用公开秘钥加密体系创建一个安全的连接,然后建立
第二个对称秘钥key,用于实际加密数据
会话秘钥, KS
- Bob 和Alice采用RSA交换对称秘钥KS
- 一旦拥有了KS, 采用对称加密来进行加密和解密
7.3 认证原理
- 身份认证实际上应该是双向的,不过双向的原理都一样,因此本节介绍单向的身份认证
- 本节也是采用逐层递进的方式,一个问题一个问题去解决,从而得到最终的方法
- 认证的目标:Alice给Bob发送消息,Bob需要Alice“证明”她的身份
7.3.1 遇到的问题
(1) 直接认证
方案1:Protocol ap1.0: Alice 说“I am Alice”
可能出现的问题:
- Trudy申明自己是Alice
- 在网络中,Bob看不到Alice,所以Trudy简单申明其是Alice
(2) IP认证
方案2:Protocol ap2.0: Alice 说“I am Alice” ,具备Alice的IP地址
这个方案通过IP地址来证明身份
可能出现的问题:Trudy 可以创建一个分组伪造Alice的IP地址
允许进行IP层的编程
(3) 加密认证
方案3:Protocol ap3.0:Alice说“I am Alice”,而且传送她的密码来证明
可能出现的问题:
重放攻击
重放攻击(playback attack):Trudy本次记录Alice的分组,下一次向Bob重放
方案3.1:Protocol ap3.0: Alice 说“I am Alice” ,而且传送她的加密之后的密码来证明
可能出现的问题:
- 重放攻击仍然有效:Trudy 记录recordsAlice的分组,然后过后重放给Bob
7.3.2 对称式认证
使用对称加密的方式来避免重放攻击
(1) 流程
目标:避免重放攻击
- Nonce:一个协议生存期只用一次的整数(R)
- protocol ap4.0: 为了证明Alice的活跃性, Bob发送给Alice一个nonce R. Alice返回加密之后的R,使用双方约定好的key
(2) 原理
- 重放攻击出现的原因是因为Trudy可以截获本次认证的信息,然后在下一次的时候用本次截获的信息进行认证
- 避免重放攻击就是每次认证都使用不同的数nonce,使得本次截获的认证信息无法在下一次使用
- Alice 是活跃的, 只有 Alice知道这个加密的 nonce, 因此一定是Alice!
(3) 问题
但是问题是:需要双方共享一个对称式的密钥,这又成了密钥传播的问题
7.3.3 公开密钥加密认证
ap5.0:使用nonce R 和 公开密钥加密技术
(1) 流程
(2) 漏洞:中间攻击
Trudy 在Alice (to Bob)和Bob之间(to Alice)
- Trudy在Alice和Bob中间,Trudy无法得到Alice的私钥,但是可以使用自己的私钥
- 因此其将Alice和Bob的信息全部截获,伪造彼此,让彼此觉得是在于对方通信
特点:难以检测
-
Bob收到了Alice发送的所有报文, 反之亦然(也就是彼此之间仍然正常通信)
-
问题是Trudy也接收到了所有的报文!
-
本质:Bob没有拿到真正Alice的公钥
-
如果可保证拿到Alice的公钥,那么采用公开密钥体系就行认证也是可行的
7.4 报文完整性
目的:接受放要能检测出报文传输的过程没有被修改
7.4.1 数字签名
(1) 原理
原理
先用KB-进行加密,然后用KB+进行解密
(2) 过程
数字签名类似于手写签名:
- 发送方(Bob) 数字签署了文件, 前提是他(她)是文件的拥有者/创建者.
- 报文m的简单数字签名:Bob使用其私钥对m进行了签署,创建数字签名的KB-(m)
1. 如何构造数字签名
Bob传递的时候将 m 和 KB-(m)一同传递给Alice
2. Alice如何验证数字签名
- 假设Alice收到报文m, 以及数字签名KB-(m)
- Alice 使用Bob的公钥KB+对KB-(m)进行验证
- 判断KB+(KB-(m)) = m 是否成立?
- 如过 KB+(KB-(m)) = m 成立, 那么签署这个文件的人一定拥有Bob的私钥.
(3) 特性
Alice 可以验证:
- 谁签署:接收方(Alice)可以向其他人证明是Bob,而不是其他人签署了这个文件(包括Alice)
- 签署了什么:这份文件,而不是其他文件
有如下特点:
以Bob发送消息给Alice为例
特点 | 说明 | 补充 |
---|---|---|
可验证性 | 对于Alice:Alice可以验证是Bob发送的 | 因为Alice使用Bob的公钥证明了 KB+(KB-(m)) = m |
不可伪造性 | 对于Bob:没有人可以伪造Bob发信息 | 因为加密使用的是Bob的私钥,解密使用的是Bob的公钥(攻击者没有Bob的私钥) |
不可抵赖性 | 对于第三方:第三方可以使用这个签名来验证是谁签的,而不是伪造的 | 因为上面有Bob的签名 Alice可以拿着m,以及数字签名KB-(m)到法庭上,来证明是Bob签署了这个文件m |
(4) 问题
问题是:
- Alice如何可靠地拿到Bob的公钥呢?
- 使用非对称加密(公开密钥加密),加密代价很大,特别是报文很长的情况下,导致签名的时候花费很大的代价
7.4.2 报文摘要
真正网络中进行加密的原理就是:先计算出一个报文的摘要,然后对这个摘要进行加密(签署)
(1) 原理
对长报文进行公开密钥加密算法的运行需要耗费大量的时间
-
目标:将报文转换成固定长度,即容易计算的“指纹(fingerprint)
-
对m使用散列函数H,获得固定长度的报文摘要H(m)
这样就将 对报文的数字签名 转变为 对报文摘要进行数字签署
- 由于报文摘要要比报文短,降低了数字签名的代价
(2) 签署/解密流程
Bob发送数字签名的报文
Alice校验签名和报文完整性
进行校验的时候是往两个方向走,最终判断中间值是否相等
(3) 散列函数
① 特性
散列函数的特性:
特点 | 说明 |
---|---|
多对1 | 多个输入可能对应一个输出(因为结果固定长度,输入范围一定大于输出范围) |
结果固定长度 | |
给定一个报文摘要x,反向计算出原报文在计算上是不可行的x = H(m) |
这里仅仅是说明散列函数的特点,并没有要求随机性
② 举例
1. Internet校验和: 弱的散列函数
- Internet 校验和拥有一些散列函数的特性:
- 产生报文m的固定长度的摘要(16-bit sum)
- 多对1的
缺点:但给定一个散列值,很容易计算出另外一个报文具有同样散列值:
2. MD5散列函数
- (RFC 1321)被广泛地应用
- 4个步骤计算出128-bit的报文摘要
- 给定一个任意的128-bit串x, 很难构造出一个报文m具有相同的MD5摘要
3. SHA-1
- US标准[NIST, FIPS PUB 180-1]
- 160-bit报文摘要
7.5 密钥分发和证书
7.5.1 可信赖中介
现在还遗留着两个问题:
-
对称密钥问题:相互通信的实体如何分享对称式的密钥?
解决办法:
trusted key distributioncenter (KDC)
在实体之间扮演可信赖中介的角色 -
公共密钥问题:当Alice获得Bob的公钥(from web site, e-mail,diskette),她如何知坦是Bob的public key , 而不是Trudy的?
解决办法:可信赖的certificationauthority (CA)
根本目的:就是AB之间要建立可信的通信关系
理论上来说,AB如果没法相见,那么只能通过第三方,通过对第三方的信任建立
-
但是又出现问题了,各自如何与第三方(也就是中介)建立可信的通信关系呢?
这是一个无解的问题
7.5.2 KDC
- Alice,Bob需要分享对称式密钥.
- KDC:服务器和每一个注册用户都分享一个对称式的密钥(many users)
- Alice, Bob在和KDC通信的时候,知道他们自己的对称式密钥KA-KDC、KB-KDC
至于怎么知道的,这是一个无解的问题
KDC如何使得Bob和Alice在和对方通信前,就对称式会话密钥达成一致?
Alice和Bob使用R1作为对称式的会话密钥
7.5.3 公钥认证中心CA
前提:拥有认证中心的公钥CA+
这是技术层面无法解决的问题,只能通过带外的方式,即安装操作系统的时候已经在操作系统中有了
(1) 工作原理
- certification authority (CA): 将一个公钥和拥有它的实体E做个捆绑
- E (person, router) 到CA那里注册他的公钥, E 提供给CA,自己身份的证据
- CA创建一个证书,捆绑了E实体信息和他的公钥.
- Certificate证书包括了E的公钥,而且是被CA签署的(被CA用自己的私钥加了密的)
证书就是 CA-(B, KB+),即被CA签署过的实体及其公钥
当Alice需要拿到Bob公钥:
- 获得Bob的证书certificate (从Bob或者其他地方)
- 使用CA的公钥来验证Bob的证书
- 前提需要可靠地获得CA的公钥,CA的证书
- CA证书获得带外方式:安装系统带的,或者直接信赖的这个公钥
- CA证书一般是自己用自己的私钥签署自己的公钥
(2) 信任树
根证书:根证书是未被签名的公钥证书或自签名的证书
- 拿到一些CA的公钥
- 渠道:安装OS自带的数字证书;从网上下载,你信任的数字证书
CA有多个,都可以办法公钥,即只要信任一个实体(拿到了这个实体的公钥),这个实体就能颁发证书,然后你使用实体的公钥验证
信任树:
- 信任根证书CA颁发的证书,拿到了根CA的公钥(信任了根)
- 由根CA签署的给一些机构的数字证书,包含了这些机构的数字证书
- 由于你信任了根,从而能够可靠地拿到根CA签发的证书,可靠地拿到这些机构的公钥
总之,通过中介解决了密钥/公钥的可靠地传递
7.6 各层安全协议
7.2 — 7.5 讲解了网络安全的原理,接下来简单讲解每一层的安全相关的协议
7.6.1 应用层:安全电子邮件
本节讲述应用层如何保证电子邮件的 机密性、源端可认证性、报文完整性的
(1) 加密报文
场景:Alice需要发送机密的报文m给Bob
使用对称加密设计密钥的分发问题,使用密钥公开的方式,加密的代价太大,使用两者相结合的方式
Alice加密:
- 产生随机的对称密钥:KS.
- 使用KS对报文加密(为了效率)
- 对KS 使用Bob的公钥KB+进行加密(KB+是通过证书获得的)
- 发送KS(m) 和KB+(KS) 给Bob.
也就是用 对称密钥加密报文,用 Bob的公钥加密 对称密钥,然后全部发送给Bob
Bob解密:
- 使用自己的私钥解密KS
- 使用KS解密KS(m) 得到报文
(2) 源端认证 & 报文完整性
源端可认证性 和 报文完整性 一般捆绑在一起,这里还没有机密性(就是报文仍然以明文的形式传输,不加密)
目的:Alice 需要提供源端的报文完整性和可认证性
Alice加密:
- Alice 数字签署文件(采用自己的私钥签署报文的散列)
- 发送报文(明文)和数字签名
Bob解密:
- Bob使用散列函数计算报文的散列 H(m)
- 使用Alice的公钥解密报文的散列 KA+(KA-(m))
- 比较 H(m) = KA+(KA-(m))?
- 如果相等,说明m就是正确的
- 能采用Alice的公钥解密,说明是用Alice的私钥加密的,保证了源端可认证性
- 采用散列比较,保证了报文完整性(如果报文被修改,得到的散列也会被修改)
(3) 三种性质
目的:Alice 需要提供机密性,源端可认证性和报文的完整性
思路就是先进行数字签名,然后将 签名和明文 当做报文进行加密
Alice加密:
- 使用KA-对报文m的散列签名得到 KA-(H(m))
- 然后将 KA-(H(m))合并到一起得到 m‘
- 产生随机的对称密钥:KS.
- 使用KS对报文 m’ 加密(为了效率)
- 对KS 使用Bob的公钥KB+进行加密(KB+是通过证书获得的)
- 发送KS(m‘) 和KB+(KS) 给Bob.
Bob解密:......
Alice用了3个keys: 自己的私钥,Bob的公钥, 新产生的对称式密钥
(4) PGP
Pretty good privacy (PGP)
- Internet e-mail加密方案,事实上的标准.
- 使用前面讲述的:对称密钥加密,公开密钥加密,散列函数和数字签名.
- 能够提供机密性,源端的可认证性和报文完整性.
- 发明者, Phil Zimmerman, 是3年的犯罪调查的目标
/*A PGP signed message: */
---BEGIN PGP SIGNED MESSAGE---
Hash: SHA1
Bob:My husband is out of town tonight.Passionately yours, Alice
---BEGIN PGP SIGNATURE---
Version: PGP 5.0
Charset: noconv
yhHJRHhGJGhgg/12EpJ+lo8gE4vB3
mqJhFEvZP9t6n7G6m5Gw2
---END PGP SIGNATURE---
7.6.2 应用层/传输层:SSL
可以看做是应用层,但也是TCP实现的,也可以看做是传输层
-
为使用SSL服务的、基于TCP的应用提供传输层次的安全性
例如:在WEB的浏览器和服务器之间进行电子商务的交易(shttp)所提供的安全服务:服务器的可认证性,数据加密、客户端的可认证性(可选)
-
所提供的安全服务:服务器的可认证性,数据加密,客户端的可认证性
SSL的位置在传输层和应用层之间
SSL三阶段
第一阶段:握手
- Bob 和Alice 建立TCP连接
- 通过CA签署的证书认证Alice的身份
- 创建,加密(采用Alice的公钥), 传输主密钥给Alice(不重数交换没有显示)
第二阶段:密钥导出
- Alice , Bob采用共享的MS产生4个keys:
- EB:Bob->Alice数据加密key
- EA: Alice->Bob数据加密key
- MB:Bob->Alice MAC(报文鉴别编码)key
- MA: Alice->Bob MAC key
- 加密和MAC算法在Bob, Alice之间协商
- 为什么要4个keys:更安全
第三阶段:数据传输
7.6.3 网络层:IPsec
位于IP层之上,TCP/UDP之下
(1) 说明
网络层的机密性:
- 发送端主机对IP数据报中的数据进行加密
- 数据:TCP或者UDP的段;ICMP和SNMP 报文.
网络层次的可认证性
- 目标主机可以认证源主机的IP地址
2个主要协议:
- 认证头部(AH)协议
- 封装安全载荷 encapsulation security payload (ESP)
不管AH 还是ESP, 源和目标在通信之前要握手:
- 创建一个网络层次的逻辑通道:安全关联security association (SA)
每一个SA 都是单向,由以下元组唯一确定:
- 安全协议(AH or ESP)
- 源IP地址
- 32-bit连接ID
没细讲,而且网课与PPT中内容不一致
(2) ESP协议
- 提供机密性,主机的可认证性,数据的完整性.
- 数据和ESP尾部部分被加密
- next header字段在ESP尾部
- ESP 认证的头部与AH类似
- 协议号= 50.
(3) AH协议
AH:Authentication Header
- 提供源端的可认证性,数据完整性,但是不提供机密性
- 在IP头部和数据字段之间插入AH的头部
- 协议字段: 51
- 中间的路由器按照常规处理这个数据报
- AH 头部包括:
- 连接ID
- 认证数据: 对原始数据计算报文摘要,使用源端的私钥进行数字签名.
- 下一个字段: 定义了数据的类型(e.g., TCP, UDP,ICMP)
7.6.4 IEEE 802.11 security
这是数据链路层
没细讲
7.7 访问控制:防火墙
本节讲的是一个网络安全的设备,防火墙
7.7.1 防火墙
防火墙:将组织内部网络和互联网络隔离开来,按照规则允许某些分组通过(进出),或者阻塞掉某些分组
7.7.2 防火墙的必要性
阻止拒绝服务攻击:
- SYN flooding: 攻击者建立很多伪造TCP连接,对于真正用户而言由于服务器的资源被耗尽,他们的访问被拒绝
- 阻止非法的修改/对非授权内容的访问,例如:攻击者替换掉CIA的主页
- 只允许认证的用户能访问内部网络资源(经过认证的用户/主机集合)
7.7.3 防火墙的类型
2种类型的防火墙:
- 无状态分组过滤器
- 有状态分组过滤器
- 应用网关
(1) 无状态分组过滤器
- 内部网络通过配置防火墙的路由器连接到互联网上
- 路由器对分组逐个过滤,根据分组相应字段匹配到规则相应自字段来决定转发还是丢弃
- 匹配的字段有:
- 源IP地址,目标IP地址
- TCP/UDP源和目标端口
- ICMP报文类别
- TCP SYN 和ACK bits
可以看到,防火墙匹配的都是头部信息
下面是一些应用
目的 | 防火墙设置 |
---|---|
所有的进出UDP流以及TCP 上telnet连接分组都被阻塞掉 | 阻塞进出的数据报:只要拥有IP协议字段= 17,而且源/目标端口号=23 |
阻止外部客户端主动和内部网络的主机建立TCP连接,但允许内部网络的客户端主动和外部服务器建立TCP连接 | 阻塞进入内网的TCP段:它的ACK=0. |
不允许外部的web进行访问 | 阻塞掉所有外出具有目标端口80的IP分组 |
不允许来自外面的TCP连接,除非是机构公共WEB服务器的连接 | 阻塞掉所有进来的TCP SYN分组,除非130.207.244.203, port 80 |
阻止Web无线电占用可用带宽. | 阻塞所有进来的UDP分组– 除非DNS和路由器广播 |
阻止你的网络被smurf DoS所利用 | 阻塞掉所有到达广播地址(130.207.255.255)的ICMP分组. |
阻止内部网络被tracerout,从而得到你的网络拓扑 | 阻塞掉所有外出的ICMP TTL过期的流量 |
下面是一个案例
ACL:Access Control Lists
ACL:规则的表格,自动向下和输入的分组进行匹配: (action, condition) 对: 有点像OpenFlow 转发表
action | source address | dest address | protocol | source port | dest port | flag bit |
---|---|---|---|---|---|---|
allow | 222.22/16 | outside of 222.22/16 | TCP | >1023 | 80 | any |
allow | outside of 222.22/16 | 222.22/16 | TCP | 80 | >1023 | ACK |
allow | 222.22/16 | outside of 222.22/16 | UDP | >1023 | 53 | --- |
allow | outside of 222.22/16 | 222.22/16 | UDP | 53 | >1023 | --- |
deny | all | all | all | all | all | all |
(2) 有状态分组过滤器
就是记录是否已经建立TCP连接,如果没有TCP连接,那么发送分组不会通过
无状态分组过滤器: 重型工具?
- 防火墙会让“无意义”的分组通过,例如:dest port = 80, ACK bit set
- 该TCP连接甚至都没建立起来:
action | source address | dest address | protocol | source port | dest port | flag bit |
---|---|---|---|---|---|---|
allow | outside of 222.22/16 | 222.22/16 | TCP | 80 | >1023 | any |
有状态的分组过滤器: 跟踪每个TCP连接的状态
- 跟踪TCP连接建立(SYN),拆除(FIN):然后才让相应后续分组通过
- 防火墙上的非活跃连接会超时,不再允许相应的分组通过防火墙
action | source address | dest address | protocol | source port | dest port | flag bit | check connection |
---|---|---|---|---|---|---|---|
allow | 222.22/16 | outside of 222.22/16 | TCP | >1023 | 80 | any | |
allow | outside of 222.22/16 | 222.22/16 | TCP | 80 | >1023 | ACK | × |
allow | 222.22/16 | outside of 222.22/16 | UDP | >1023 | 53 | --- | |
allow | outside of 222.22/16 | 222.22/16 | UDP | 53 | >1023 | --- | × |
deny | all | all | all | all | all | all |
7.7.4 应用程序网关
- 根据应用数据的内容来过滤进出的数据报,就像防火墙根据IP/TCP/UDP字段来过滤一样
- 例子:允许特定的内部站点登录到外部服务器,但不是直接登录
- 需要所有的telnet用户通过网关来telnet
- 对于认证的用户而言,网关建立和目标主机的telnet connection ,网关在2个连接上进行中继
- 路由器过滤器将所有不是来自网关的telnet分组全部过滤掉
7.7.5 局限性
防火墙和应用程序网关的局限性
- IP spoofing(就是子网内部的设备发出的分组并不在子网的网段中): 路由器不知道数据报是否真的来自于分组源地址声称的IP
- 应用网关:如果有多个应用需要控制,就需要有多个应用程序网关
- 而且客户端软件需要知道如何连接到这个应用网关(例如:必须在Web browser中配置网络代理的Ip地址)
- 过滤器对UDP段所在的分组,或者全过或者全都不过
- 折中: 外部通信的便利性vs安全的级别
- 很多高度保护的站点仍然受到攻击的困扰
7.8 IDS:入侵检测系统
防火墙检测的仅仅是头部信息,IDS还检测数据部分
分组过滤(防护墙的任务):
- 对TCP/IP头部字段进行检查
- 不检查会话分组间的相关性
7.8.1 IDS介绍
IDS: intrusion detection system
- 深入分组检查: 检查分组的内容(e.g., 检查分组中的串是否和已知攻击数据库的病毒和攻击的特征码匹配)
- 检查分组间的相关性,判断是否是有害的分组(时间序列)
- 端口扫描
- 网络映射
- DoS 攻击
多个IDSs: 不同的网段,放置探针,根据需要进行不同类型的检查
7.8.2 IDS应用案例
举一些Internet的安全威胁以及IDS如何应对的
1. 映射
- 在攻击之前:“踩点”–发现在网络上实现了哪些服务
- 使用ping来判断哪些主机在网络上有地址
- 端口扫描:试图顺序地在每一个端口上建立TCP连接(看看发生了什么)
- nmap (http:// www.insecure.org/nmap/ ) mapper:"network exploration and security auditing"
对策:
- 记录进入到网络中的通信流量
- 发现可疑的行为(IP addresses,端口被依次扫描)
2. 分组嗅探
- 广播式介质
- 混杂模式的NIC获取所有的信道上的分组
- 可获取所有未加密的数据(e.g. passwords)
- e.g.:C嗅探B的分组
顾名思义:就是在嗅分组,明明是给其他人的分组自己就拿过来了
对策:
- 机构中的所有主机都运行能够监测软件,周期性地检查是否有网卡运行于混杂模式(这个模式可以用于抓包)
- 每一个主机一个独立的网段(交换式以太网而不是使用集线器)
3. IP Spoofing欺骗
- 可以有应用进程直接产生"raw”IP分组,而且可以在IP源地址部分直接放置任何地址
- 接收端无法判断源地址是不是具有欺骗性的
- e.g.C伪装成B
对策:
IP Spoofing : 入口过滤
- 路由器对那些具有非法源地址的分组不进行转发 (e.g., 数据报的源地址不是路由器所在的网络地址)
- 很好,但是入口过滤不能够在全网范围内安装
4. DOS
- DOS:不断建立TCP连接,使得服务器无法处理正常的请求
- DDoS:分布式的DOS,多个机器向服务器建立TCP连接
对策:
- 在到达主机之前过滤掉这些泛洪的分组(e.g., SYN): throw out good with bad
- 回溯到源主机(most likely an innocent,compromised machine)