计算机网络-第七章-网络安全

第七章 网络安全

本章目标

网络安全原理:

  • 加密,不仅仅用于机密性
  • 认证
  • 报文完整性
  • 秘钥分发

安全实践

  • 各个层次的安全性:应用层,传输层,网络层和链路层
  • 两种网络安全的设备:防火墙、入侵检测系统

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) 要求

  1. 需要 公钥KB+和私钥KB-,并且满足 m = KB-(KB+(m))
  2. 给定公钥KB+,导出私钥KB-计算上不可行(就是不能由公钥退出私钥)

(4) RSA算法

RSA:Rivest, Shamir, Adelson algorithm,这是最典型,使用最多的公开密钥加密算法

① 流程

1. 准备

  • 报文: 就是一个bit模式
  • Bit模式可以唯一的用整数来表示
  • 因此,加密一个报文就等于加密一个整数

例子:

  • m= 10010001.报文可以唯一的用十进制数145来代替.
  • 为了加密m,我们加密相应的整数,得到一个新的整数(密文)

2. 创建公私钥对

  1. 选择2个很大的质数p, q . (例如:每个1024 位)
  2. 计算n = pq, z = (p-1)(q-1)
  3. 选择一个e (要求e<n) 和z 没有一个公共因子,也就是e和z互素
  4. 选择d 使得ed-1 正好能够被z整除.(也就是:ed mod z = 1 ).
  5. 得到公钥 KB+ 为 (n,e). 私钥 KB- 为 (n,d).

3. 加密和解密

  1. 给定按照上述算法得到的公钥(n,e) 和 私钥(n,d)

  2. 加密报文m (<n), 加密算法 c = me mod n

  3. 对接收到的密文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有一个比较重要的特性

m = KB-(KB+(m)) = KB+(KB-(m))
  • 也就是先用公钥,然后用私钥的结果
  • 先用私钥,然后用公钥的结果一致

证明

这个特性可以用来做数字签名

⑤ 特性

为什么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) 原理

原理

m = KB+(KB-(m))

先用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三阶段

第一阶段:握手

  1. Bob 和Alice 建立TCP连接
  2. 通过CA签署的证书认证Alice的身份
  3. 创建,加密(采用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字段来过滤一样
  • 例子:允许特定的内部站点登录到外部服务器,但不是直接登录

  1. 需要所有的telnet用户通过网关来telnet
  2. 对于认证的用户而言,网关建立和目标主机的telnet connection ,网关在2个连接上进行中继
  3. 路由器过滤器将所有不是来自网关的telnet分组全部过滤掉

7.7.5 局限性

防火墙和应用程序网关的局限性

  1. IP spoofing(就是子网内部的设备发出的分组并不在子网的网段中): 路由器不知道数据报是否真的来自于分组源地址声称的IP
  2. 应用网关:如果有多个应用需要控制,就需要有多个应用程序网关
  3. 而且客户端软件需要知道如何连接到这个应用网关(例如:必须在Web browser中配置网络代理的Ip地址)
  4. 过滤器对UDP段所在的分组,或者全过或者全都不过
  5. 折中: 外部通信的便利性vs安全的级别
  6. 很多高度保护的站点仍然受到攻击的困扰

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)

posted @ 2023-07-16 19:49  Crispy·Candy  阅读(138)  评论(0编辑  收藏  举报