本文主要内容来自 SpriCoder的博客,更换了更清晰的图片并对原文的疏漏做了补充和修正。
网络安全问题概述
计算机网络上的通信面临以下的四种威胁:
威胁 | 解释 | 攻击类型 |
---|---|---|
截获 | 从网络上窃听他人的通信内容。 | 被动攻击 |
中断 | 有意中断他人在网络上的通信。 | 主动攻击 |
篡改 | 故意篡改网络上传送的报文。 | 主动攻击 |
伪造 | 伪造信息在网络上传送。 | 主动攻击 |
被动攻击和主动攻击
被动攻击
截获信息的攻击称为被动攻击(并不改变通讯的过程)。
在被动攻击中,攻击者只是观察和分析某一个协议数据单元 PDU 而不干扰信息流。
主动攻击
更改信息和拒绝用户使用资源的攻击称为主动攻击。(修改了通信的构成)
主动攻击是指攻击者对某个连接中通过的 PDU 进行各种处理(理解 PDU 后)
- 更改报文流
- 拒绝报文服务?
- 伪造连接初始化
计算机网络通信安全的目标
- 防止析出报文内容
- 防止通信量分析(通信的习惯)
- 检测更改报文流
- 检测拒绝报文服务
- 检测伪造初始化连接
报文应该具有的性质
- 保密性
- 完整性
- 可用性
- 鉴别性
- 不可否认(抵赖)性:确认是特定的发送方
恶意程序(malicious program)
- 计算机病毒:会“传染”其他程序的程序,“传染” 通过修改其他程序来把自身或其变种复制进去而完成。
- 计算机蠕虫:通过网络的通信功能将自身从一个节点发送到另一个节点并启动运行的程序。(特定场景才能使用,出现上商业行为)
- 特洛伊木马:一种程序,它执行的功能超出所声称的功能。运作木马获得特殊的权限
- 逻辑程序:逻辑下载程序
- 控制器程序:远程控制
- 逻辑炸弹:一种当运行环境满足某种特定条件时执行其他特殊功能的程序。
计算机网络安全的内容
- 保密性
- 安全协议的设计
- 访问控制
一般的数据加密模型
不确定有没有人修改:使用密文发送
最早的是凯撒密码:
- 加密:明文按照数字 mod 的值进行偏移,得到密文
- 解密:密文反向偏移数字 mod 的值进行偏移,得到明文
密码相关的重要概念
- 密码编码学(cryptography)是密码体制的设计学(设计密码)
- 密码分析学(cryptanalysis)则是在未知密钥的情况下从密文推演出明文或密钥的技术。密码编码学与密码分析学合起来即为密码学(cryptology)。
- 如果不论截取者获得了多少密文,但在密文中都没有足够的信息来唯一地确定出对应的明文,则这一密码体制称为无条件安全的,或称为理论上是不可破的。
- 如果密码体制中的密码不能被可使用的计算资源破译,则这一密码体制称为在计算上安全的。(目前一般的密码体系能够达到的标注)
对称密钥和公钥密码体制
对称密钥密码体系
- 所谓常规密钥密码体制,即加密密钥与解密密钥是相同的密码体制。
- 这种加密系统又称为对称密钥系统。
数据加密标准 DES Data Encryption Standard
- 数据加密标准 DES 属于常规密钥密码体制,是一种分组密码(对称加密算法)
- 在加密前,先对整个明文进行分组。每一个组长为 64 位。
- 然后对每一个 64 位二进制数据进行加密处理,产生一组 64 位密文数据。
- 最后将各组密文串接起来,即得出整个的密文。
- 使用的密钥为 64 位(实际密钥长度为 56 位,有 8 位用于奇偶校验)。
- 对于 64 位密码有编排的过程,详细自己查找学习
- 密钥长度不会太长,算法复杂度比较低
DES 的保密性
- DES 的保密性仅取决于对密钥的保密,而算法是公开的。尽管人们在破译 DES 方面取得了许多进展,但至今仍未能找到比穷举搜索密钥更有效的方法。
- DES 是世界上第一个公认的实用密码算法标准,它曾对密码学的发展做出了重大贡献。
- 目前较为严重的问题是 DES 的密钥的长度(算力提升)
- 由于算力的提升,破解 DES 所需的时间进一步降低,不再是计算上安全的了。
- 通过增加 DES 密钥的长度来提高安全性。
- 现在已经设计出来搜索 DES 密钥的专用芯片(硬件层面的解决方案)
公钥密码体制
- 公钥密码体制使用不同的加密密钥与解密密钥,是一种"由已知加密密钥推导出解密密钥在计算上是不可行的"密码体制。(非对称密码体系)
- 经典算法:密钥 E 和 N,明文是一个数字,加密时用明文做 E 的指数次方之后 mod N 得到密文 C,解密是 D 和 N,密文 C 做 D 次方再 mod N 得到明文
- 例子:密钥是 7 和 187,明文 88,88 的 7 次方 mod187 = 11(密文),解密密钥 23 和 187,11 的 23 次方 mod187 得到 88(明文)
\(88(明文)^{7}\ mod\ 187=11(密文)\)
\(11(密文)^{23}\ mod\ 187=88(明文)\)
- 公钥密码体制的产生主要是因为两个方面的原因,一是由于常规密钥密码体制的密钥分配问题,另一是由于对数字签名的需求。
- 一个机构可以发送自己的公钥,保留自己的密钥。接收者受到密钥加密的就知道是谁发送的,保证机构可以发送安全认证,接受者使用公钥解密知道是谁发送的,做到密钥的分配
- 私钥加密的是机构的签名,大量数据传输使用对称密钥体系传输,公钥发送比较少的数据,因为公钥密码体系算法复杂度比较高,加密的时候是很多位的明文,计算量太大。
- 现有最著名的公钥密码体制是 RSA 体制,它基于数论中大数分解问题的体制,由美国三位科学家 Rivest,Shamir 和 Adleman 于 1976 年提出并在 1978 年正式发表。
公钥算法的例子
- 在公钥密码体制中,加密密钥(即公钥)PK 是公开信息,而解密密钥(即私钥或秘钥)SK 是需要保密的
- 加密算法 E 和解密算法 D 也都是公开的
- 虽然 SK 是由 PK 决定的,但却不能根据 PK 计算出 SK(单向的)
- 公钥和私钥是成对生成的
公钥算法的特点
- 发送者 A 用 B 的公钥\(PK_{B}\)对明文 X 加密(E 运算)后,在接收者 B 用自己的私钥\(SK_{B}\)解密(D 运算),即可恢复出明文:
- \(D_{SK_B}(Y) = D_{SK_B}(E_{PK_B}(X)) = X\)
- 解密密钥是接收者专用的秘钥,对其他人都保密。
- 加密密钥是公开的,但不能用它来解密,即
- \(D_{PK_B}(E_{PK_B}(X))\neq X\)
- 加密和解密的运算可以对调,即(用私钥进行加密,意义有差别:这样子证明是 B 发送的,但是别人都知道公钥,相当于明文发送)
- \(E_{PK_B}(D_{SK_B}(X)) = D_{SK_B}(E_{PK_B}(X)) = X\)
- 在计算机上可容易地产生成对的 PK 和 SK
- 从已知的 PK 实际上不可能推导出 SK,即从 PK 到 SK 是“计算上不可能的”
- 加密和解密算法都是公开的
应当注意
- 任何加密方法的安全性取决于密钥的长度,以及攻破密文所需的计算量
- 在这方面,公钥密码体制并不比传统加密体制更加优越
- 由于目前公钥加密算法的开销较大,在可见的将来还不会放弃传统的加密方法
- 公钥需要密钥分配协议,具体的分配过程并不比采用传统加密方法时更简单
数字签名
- 数字签名必须保证以下三点:
- 报文鉴别:接收者能够核实发送者对报文的签名
- 报文的完整性:发送者事后不能抵赖对报文的签名
- 不可否认:接收者不能伪造对报文的签名
- 现在已有多种实现各种数字签名的方法。但采用公钥算法更容易实现
数字签名的实现
- 因为除 A 外没有别人能具有 A 的私钥,所以除 A 外没有别人能产生这个密文。因此 B 相信报文 X 是 A 签名发送的。
- 若 A 要抵赖曾发送报文给 B,B 可将明文和对应的密文出示给第三者。第三者很容易用 A 的公钥去证实 A 确实发送 X 给 B。
- 反之,若 B 将 X 伪造成 X',则 B 不能在第三者前出示对应的密文。这样就证明了 B 伪造了报文。
具有保密性的数字签名
- 首先用自己的私钥进行签名,然后对密文用 B 的公钥加密
- 收到密文的,如果没有 B 的私钥,不能进行解密
- 然后用 B 的私钥解密,之后用 A 的公钥检验是 A 发送的,一般只用来传送对称密码,比较耗时。
- 保障获取公钥的过程
防火墙
- 防火墙是由软件、硬件构成的系统,是一种特殊编程(ACL)的路由器,用来在两个网络之间实施接入控制策略。接入控制策略是由使用防火墙的单位自行制订的,为的是可以最适合本单位的需要。
- 防火墙内的网络称为可信赖的网络(trusted network),而将外部的因特网称为不可信赖的网络(untrusted network)。
- 防火墙可用来解决内联网和外联网的安全问题。
防火墙在互连网络中的位置
- 其实只用一个路由器就可以完成防火墙的划分。
- 例子中:应用网关,可以内部外部进行访问过滤。
- 优点:在防火墙中的外局域网和内局域网都可以放置一些服务器,由左侧过滤的路由器控制访问,而右侧的路由控制内部网络的访问,从而达成一个访问权限控制
- 内网络安全也是一个问题
防火墙的功能
- 防火墙的功能有两个:阻止和允许。
- 阻止就是阻止某种类型的通信量通过防火墙(从外部网络到内部网络,或反过来):比如阻止内部的对迅雷的请求向外发送
- 允许的功能与阻止恰好相反。
- 防火墙必须能够识别通信量的各种类型。不过在大多数情况下防火墙的主要功能是阻止。
防火墙技术一般分为两类
- 网络级防火墙:用来防止整个网络出现外来非法的入侵。属于这类的有分组过滤和授权服务器
- 前者检查所有流入本网络的信息,然后拒绝不符合事先制订好的一套准则的数据
- 后者则检查用户的登录是否合法
- 应用级防火墙:从应用程序来进行接入控制。通常使用应用网关或代理服务器来区分各种应用,例如,可以只允许通过访问万维网的应用,而阻止 FTP 应用通过
访问控制列表 ACL(Access Control Lists)
ACL(Access Control Lists)是指令列表,它告诉路由器允许或拒绝什么类型的数据包。
- 如果要让路由器拒绝某些数据包,则必须配置 ACL。否则,只要链路打开,路由器将接受并转发所有数据包
- 您可以根据以下情况允许或拒绝数据包:
- 源地址
- 目的地址
- 上层的协议,比如 TCP 或 UDP 端口
使用 ACL 的前提下,发送数据包
为了确定是允许还是拒绝数据包,请按顺序对 ACL 语句进行测试。
- 当一个语句“匹配”时,不再评估任何语句。(前面的语句先匹配,处理掉)
- 允许或拒绝该数据包。
ACL 末尾有一个隐含的 deny any
语句:如果数据包与 ACL 中的任何语句都不匹配,则将其丢弃。
Example:ACL 例子
如果我们有如下所述的 ACL 列表:
1 |
|
然后:
- Packets from 192.168.100.1 will be forwarded
- Packets from 192.168.100.3 will be denied
- But how does the router process the packets from 192.168.100.4? denied(默认被匹配掉)
路由器如何使用出站 ACL
- 检查数据包是否可路由。如果是这样,在路由表中查找路由。
- 检查出站接口的 ACL:
- 如果没有 ACL,则将数据包切换出目标接
- 如果有 ACL,请按照 ACL 语句顺序检查数据包-根据匹配的条件拒绝或允许。
- 如果没有语句匹配,会发生什么?拒绝所有没有匹配的包
出站标准 ACL 流程
- 收到 packet,确定路由表确认路由表看能够转发
- 可以转发的话,进入 ACL 确认
- 如果当前端口没有 ACL 配置,则直接进行转发
- 如果当前端口有 ACL 配置,开始匹配 source 地址(标准的 ACL,只能对原地址进行判断)
- 语句满足条件,
- deny
- premit
- 语句不满足条件,看下一条,如果没有下一条,则默认 deny
- 语句满足条件,
标准 ACL 的两个基本使用
标准 ACL 只能显示声明拒绝规则;而扩展 ACL 可以显式声明拒绝规则和允许规则。
因此,标准 ACL 的拒绝规则应当尽量放在出口(near to destination)
在全局配置模式下顺序编写 ACL 语句。
1 |
|
在接口配置模式下将 ACL 分组(Group)到一个或多个接口。
1 |
|
access-list-number 参数
ACL 有很多类型,访问列表号指定了类型。下表显示了常见的访问列表类型:
ACL Type | ACL Number |
---|---|
IP Standard | 1 to 99 |
IP Extended | 100 to 199 |
AppleTalk | 600 to 699 |
IPX Standard | 800 to 899 |
IPX Extended | 900 to 999 |
IPX SAP | 1000 to 1099 |
注意默认的取值(扩展 ACL 不仅仅局限于源地址)
1 |
|
允许或拒绝的参数
输入访问列表并选择正确的访问列表号后,根据您要执行的操作,输入允许还是拒绝。
1 |
|
test-condition 参数
- 在 ACL 的
{test condition}
部分中,大多数访问列表的共同点是源地址的 IP 掩码和通配符掩码。 - 源地址可以是子网,地址范围或单个主机。由于通配符掩码使用源地址检查位,因此也称为 ip 掩码。
- 通配符掩码告诉路由器要检查哪些位。
- Ip mask:Ipv4 的地址
- Wildcard mask:和 netmask 是不同的,指示哪些位置被检查
Router(config)#access-list access-list-number {permit/deny}{test-conditions}
通配符掩码
编写通配符掩码(Wildcard Mask)以告知路由器地址中要匹配的位以及要忽略的位:0 位表示检查该位位置,1 表示忽略该位位置。
我们先前的 192.5.5.10 0.0.0.0 示例可以用二进制重写为:
- 11000000.00000101.00000101.00001010(Source address)
- 00000000.00000000.00000000.00000000(Wildcard mask)
通配符掩码的例子
编写一个 IP 掩码和通配符掩码以检查网络上的所有主机:192.5.5.0 255.255.255.0(检查这一个网段)
Answer: 192.5.5.0 0.0.0.255(和 net mask 是取反的)
- 请注意,此通配符掩码是 C 类地址的默认子网掩码的镜像。
- 警告:仅当查看整个网络或子网时,这才是有用的规则。
编写一个 IP 掩码和通配符掩码以检查子网中的所有主机:192.5.5.32 255.255.255.224
- If you answered 192.5.5.32 0.0.0.31
- 0.0.0.31 是 255.255.255.224 的镜像地址
- 二进制标识
- 11111111.11111111.11111111.11100000(255.255.255.224)
- 00000000.00000000.00000000.00011111(0.0.0.31)
省时:任何命令
由于 ACL 末尾有一个隐含的"deny any"语句,因此您必须编写语句以允许其他人通过。
使用我们前面的示例,如果学生被拒绝访问而所有其他学生都被允许访问,则您将编写以下两个语句:
Lab-A(config)#access-list 1 deny 192.5.5.0 0.0.0.127
:拒绝一个Lab-A(config)#access-list 1 permit 0.0.0.0 255.255.255.255
由于最后一条语句通常用于覆盖“拒绝任何”,因此思科为您提供了一个选项-any 命令:
Lab-A(config)#access-list 1 permit any
==Lab-A(config)#access-list 1 permit 0.0.0.0 255.255.255.255
省时:主机名支持
很多时候,网络管理员将需要编写 ACL 来允许特定主机(或拒绝主机)。该语句可以用两种方式编写。
Lab-A(config)#access-list 1 permit 192.5.5.10 0.0.0.0
Lab-A(config)#access-list 1 permit host 192.5.5.10(host 专指 192.5.5.10)
标准 ACL 的配置位置
- 标准 ACL 没有目标参数。因此,您将标准 ACL 放置在尽可能靠近目标的位置。
- 要了解原因,请问自己,如果在 Lab-A 的 E0 上放置" deny 192.5.5.0 0.0.0.255"语句,将会对所有 IP 流量产生什么影响?
- 如果放到 Lab A 的 E0 口则会导致无法访问 Lab B/C,应该放到 Lab D 的 E0
- 约定:将标准 ACL 放到与将要生效的主机越近越好,但是其实会对带宽有一定的损耗
扩展 ACL(Extend Access Control Lists)
- 扩展 ACL 的编号范围为 100-199,并“扩展”了标准 ACL 的功能。
- 扩展功能包括基于过滤流量的功能。
- 目的地址
- ip 协议的部分(更加细分):您可以编写语句以仅拒绝 ICMP 等协议或 RIP 和 IGRP 之类的路由协议
- 协议套件的上层
- 您可以编写语句以仅拒绝诸如 TFTP 或"HTTP"之类的协议
- 您可以使用 eq,gt,lt 和 neq(等于,大于,小于和不等于)之类的操作数来指定如何处理特定协议。
- 例如,如果您希望访问列表允许除 http 访问之外的所有流量,则可以使用" permit ip any neq 80"(允许来自任意源地址和目的地址的不是 80 端口的信息)
扩展 ACL 的两个功能
在全局配置模式下顺序编写 ACL 语句。(语法更加丰富)
1 |
|
在接口配置模式下将 ACL 分组到一个或多个接口
1 |
|
扩展参数
- access-list-number:choose from the range 100 to 199
- {protocol | protocol-number}:For the CCNA, you only need to know ip and tcp--many more are available
- {source source-wildcard}:same as in standard 和标准的相似
- {destination destination-wildcard}:formatted like the standard, but specifies the destination 和标准格式系统
- [protocol-specific options]:这个参数用于确认协议的过滤部分
端口号
- 查看 tcp 和 udp 协议的各种端口号,并了解以下最常见的端口号。
- 您还可以在{protocolspecific options}中键入名称(telnet)而不是数字(23)。
配置扩展 ACL 的位置
在下图中,我们要拒绝网络 221.23.123.0 访问服务器 198.150.13.34
访问列表应应用于什么路由器和接口?
- 将访问列表写在路由器 C 上,将其应用于 E0,并在
- 这将使网络不受 221.23.123.0 发往 198.150.13.34 的访问,但仍允许 221.23.123.0 访问 Internet
按照标准的原则,应该放置到 Route A,而用扩展的放置的是 Route C 的 E0 上,放置对应的命令
由于扩展的 ACL 具有目标信息,因此您希望将其放置在尽可能靠近源的位置。
编写并使用 ACL
1 |
|
ACLS 的命名
- Cisco IOS 的一项不错的功能是可以命名 ACL。如果在同一路由器上需要 99 个以上的标准 ACL,这将特别有用。
- 命名 ACL 后,提示将更改,您不再需要输入 access-list 和 access-listnumber 参数。
- 在下面的示例中,ACL 命名为 over_and,以提示应如何将其放置在接口上
1 |
|
ACLS 的校验
show access-lists
查看全部shows all access-lists configured on the router
显示路由器上配置的所有访问列表show access-lists {name | number}
查看某一个端口的shows the identified access list
显示已识别的访问列表show ip interface
:显示了应用于接口的访问列表(入站和出站)。show running-config
:显示所有访问列表以及它们应用于什么接口