网络安全基本原理
网络安全基本概念
网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。
网络安全基本属性
- 机密性(confidentiality):只有发送方与预定接收方能够理解报文内容
- 发送方加密报文
- 接收方解密报文
- 身份认证(authentication):发送方与接收方希望确认彼此的真实身份
- 信息完整性(message integrity):发送方与接收方希望确保信息未被篡改(传输途中或者后期),发生篡改一定会被检测到
- 可访问与可用性(access and availability):
- 网络服务必须对被授权用户可访问与可用
网络安全的基本特征
- 相对性
- 只有相对的安全,没有绝对的安全
- 时效性
- 新的漏洞与攻击方法不断发现
- 相关性
- 新配置、新系统组件可能会引入新的安全问题
- 不确定性
- 攻击时间、攻击者、攻击目标和攻击发起的地点都具有不确定性
- 复杂性
- 网络安全是一项系统工程,需要技术的和非技术的手段
- 重要性
- 网络安全关乎国家、政府、企业、个人的安全
网络威胁
- 窃听(eavesdrop): 窃听信息
- 插入(insert): 主动在连接中插入信息
- 假冒(impersonation): 可以通过伪造(spoof)分组中的源地址(或者分组的任意其他字段
- 劫持(hijacking): 通过移除/取代发送发或者接收方“接管”(take over)连接
- 拒绝服务DoS(denial of service): 阻止服务器为其他用户提供服务(e.g.,通过过载资源)
- 映射(Mapping):
- 发起攻击前:“探路”(case the joint)一找出网络上在运行什么服务
- 利用ping命令确定网络上主机的地址
- 端口扫描(Port-scanning):依次尝试与每个端口建立TCP连接
- nmap (http://www.insecure.org/nmapl),广为使用的国外端口扫描工具之一
- 对策(Countermeasures)
- 记录到达的网络流量
- 分析、识别出可疑活动(IP地址和端口被依次扫描)
- 分组“嗅探”(sniffing):
- 广播介质(共享式以太网,无线网络)
- 混杂(promiscuous)模式网络接口可以接收/记录所有经过的分组/帧
- 可以读到所有未加密数据(e.g.,包括口令!)
- Wireshark 就是一个典型免费的分组嗅探软件(抓包工具)
- 分组嗅探对策
- 组织中的所有主机都运行软件,周期性监测网络接口是否工作在混杂模式
- 每段广播介质连接一台主机(如交换式以太网)
- IP欺骗(Spoofing):
- 直接由应用生成“原始”IP分组,可以设置分组的源IP地址字段为任意值
- 接收方无法判断源地址是否被欺骗
- e.g.:C冒充B
- IP欺骗对策: 入口过滤(ingress filtering)
- 路由器不转发源IP地址无效的IP分组 (e.g.,源IP地址不属于所连接网络)
- 很有效!但是不能强制所有网络都执行入口过滤
- 拒绝服务DOS(Denial of service):
- 向接收方恶意泛洪(flood)分组,淹没(swamp)接收方
- 带宽耗尽
- 资源耗尽
- 分布式拒绝服务攻击(DDOS): 多个源主机协同淹没接收方
- e.g., C与另一个远程主机协同对A进行SYN攻击
- DDoS攻击过程:
- 1.选择目标
- 2.入侵(break into)网络中主机(构建僵尸网络)
- 3.控制僵尸主机向目标发送分组
- 反射式DDoS攻击:
- 1.选择目标
- 2.入侵网络中主机(构建僵尸网络)
- 3.选择反射服务器
- 4.借助反射服务器向目标发起攻击
- 向接收方恶意泛洪(flood)分组,淹没(swamp)接收方
- DOS:对策
- 在到达主机前过滤掉泛洪分组(e.g.,SYN)
- 可能好坏一起扔
- 追溯(traceback)攻击源
- SYN cookie[RFC 4987]
- 在到达主机前过滤掉泛洪分组(e.g.,SYN)
密码学基础
密码学(cryptography)术语:
- m: 明文
- KA(m): 密文,利用秘钥KA加密
- m = KB(KA(m)): 利用秘钥KB解密
对称密钥加密
- 对称密钥加密: Bob和Alice共享相同(对称)密钥: Ks
- e.g.,单码替代密码的替代模式
- Q: Bob和Alice如何确认密钥值(密钥分发)?
公开密钥加密
破解加密方法
- 唯密文攻击(cipher-textonly attack): 入侵者(如Trudy)只截获到密文,基于对密文的分析进行破解
- 两条途径:
- 暴力破解(brute force): 尝试所有可能的密钥
- 统计分析
- 两条途径:
- 已知明文攻击(known-plaintext attack): 入侵者已知(部分)明文以及与之匹配的密文
- e.g.,在单码替代密码(monoalphabetic
cipher)中,入侵者已确认字母a,l,i,c,e,b,o的替换关系
- e.g.,在单码替代密码(monoalphabetic
- 选择明文攻击(chosen-plaintext attack):入侵者可以获取针对选择的明文的密文
传统加密方法
- 替代密码(substitution cipher): 利用一种东西替代另一种东西
- 凯撒密码(Casesar cipher): 一个字母替代另一个字母
- 将一个字母利用字母表中该字母后面的第
k
个字母替代 - 如k=3,“bob. i love you. alice”→“ere, l oryh brx. dolfh”
- 将一个字母利用字母表中该字母后面的第
- 单码(字母)替代密码(monoalphabetic cipher)
- 多码(字母)替代加密(polyalphabetic encryption): 使用多个单码替代密码,明文中不同位置的字母使用不同的单码替代密码
- 凯撒密码(Casesar cipher): 一个字母替代另一个字母
- 换位(transpositions)密码: 重新排列明文中的字母
- 置换法(permutation method)
- 将明文划分为固定长度(d)的组,每个组内的字母按置换规则(f)变换位置
- 密钥: (d, f)
- 列置换加密
- 将明文按行组成一个矩阵,然后按给定列顺序输出得到密文
- 列置换加密的密钥包括列数和输出顺序
- 可以用一个单词来表示
- 单词长度表示列数,单词中的字母顺序表示输出顺序
- 置换法(permutation method)
现代加密技术
- 现代加密技术的基本操作包括经典的替代和置换·
- 不再针对一个个字母,而是针对二进制位操作
- 现代加密技术主要分为:
- 对称密钥加密
- 非对称密钥加密(公开密钥加密)
- 对称密钥加密:
- 流密码( stream ciphers)
- 分组密码,也称块密码( block ciphers)
数字签名
Q: 如何解决下列与报文完整性相关的问题?
- 否认:发送方不承认自己发送过某一报文
- 伪造:接收方自己伪造一份报文,并声称来自发送方
- 冒充:某个用户冒充另一个用户接收或发送报文
- 篡改:接收方对收到的信息进行篡改
A: 数字签名(Digital signatures) !
- 数字签名技术是实现安全电子交易的核心技术之一
- 可验证性(verifiable)
- 不可伪造性(unforgeable)
- 不可抵赖性(non-repudiation)
对称密钥问题?
Q: 两个实体在网上如何建立共享秘密密钥?
A: 解决方案:
可信任的密钥分发中心(Key Distribution
Center-KDC)作为实体间的中介(intermediary)
公钥问题
Q: 当Alice获得了Bob的公钥(通过web网站、e-mail、磁盘等),她怎么确认这真的是Bob的公钥而不是Trudy的?
A:解决方案:
可信任的认证中心(Certification Authority-CA)
- 认证中心(CA): 实现特定实体E与其公钥的绑定
- 每个E(如人、路由器等)在CA上注册其公钥
- E向CA提供“身份证明”.
- CA创建绑定E及其公钥的证书(certificate).
- 证书包含由CA签名的E的公钥-CA声明:“这是E的公钥”
当Alice想要Bob的公钥时:
- 首先获取Bob的公钥证书(从Bob或者其他地方)
- 应用CA的公钥,解密证书中签名的公钥,获得Bob公钥
公钥证书主要内容
Web安全威胁
- Web服务器的安全威胁
- Web服务越强大,包含安全漏洞概率就越高
- HTTP服务可在不同权限下运行
- Web浏览器的安全威胁
- 活动Web页可能隐藏恶意程序
- 通信信道的安全威胁
- 监听程序会威胁通信信道中所传输信息的机密性
- 伪造、篡改、重放会威胁所传输信息的完整性
- 缺乏身份认证使得冒充他人身份进行中间人攻击
- 缺乏数字签名机制使得通信双方能相互攻击
- 拒绝服务攻击使得通信信道不能保证可用性
应对Web安全威胁的着手点
- 基于应用层实现Web安全
- 为特定应用定制特定安全服务,将安全服务直接嵌入在应用程序中
- 基于传输层实现Web安全
- SSL或TLS可作为基础协议栈的组成部分,对应用透明
- 也可直接嵌入到浏览器中使用
- 使用SSL或TLS后,传送的应用层数据会被加密
- 保证通信的安全
- SSL或TLS可作为基础协议栈的组成部分,对应用透明
- 基于网络层实现Web安全
- IPSec提供端到端(主机到主机)的安全机制
- 通用解决方案
- 各种应用程序均可利用IPSec提供的安全机制
- 减少了安全漏洞的产生
- IPSec提供端到端(主机到主机)的安全机制
SSL: Secure Sockets Layer
- 广泛部署的安全协议
- 几乎所有浏览器和Web服务器都支持
- https
- 每年通过SSL交易额达数十亿美元
- 实现:Netscape
- 变体:TLS(RFC 2246)
- 提供:
- 机密性(confidentiality)
- 完整性(integrity)
- 认证(authentication)
- 最初目标:
- Web电子商务交易
- 加密(尤其信用卡号)
- Web服务器认证可选的客户认证
- 方便与新商户的商务活动(minimum hassle)
- 可用于所有基于TCP的网络应用
- 安全socket接口
SSL和TCP/IP
- SSL为网络应用提供应用编程接口(API)
- C语言和Java语言的SSL库/类可用
简化的(Toy)SSL: 一个简单的安全信道
- 握手(handshake): Alice和Bob利用他们的证书、私钥认证(鉴别)彼此,以及交换共享密钥
- 密钥派生(key derivation): Alice和Bob利用共享密钥派生出一组密钥
- 数据传输(data transfer): 待传输数据分割成一系列记录
- 连接关闭(connection closure): 通过发送特殊消息, 安全关闭连接
握手
- MS:主密钥
- EMS:加密的主密钥
密钥派生
- 不同加密操作使用不同密钥会更加安全
- 例如:报文认证码(MAC)密钥和数据加密密钥
- 4个密钥:
- Kc=用于加密客户向服务器发送数据的密钥
- Mc=用于客户向服务器发送数据的MAC密钥
- Ks=用于加密服务器向客户发送数据的密钥
- Ms=用于服务器向客户发送数据的MAC密钥
- 通过密钥派生函数(KDF)实现密钥派生
- 提取主密钥和((可能的)一些额外的随机数,生成密钥
数据传输
- 为什么不直接加密发送给TCP的字节流?
- MAC放到哪儿?
- 如果放到最后,则只有全部数据收全才能进行完整性认证
- e.g.,对于即时消息应用,在显示一段消息之前,如何针对发送的所有字节进行完整性检验?
- MAC放到哪儿?
- 方案: 将字节流分割为一系列记录
- 每个记录携带一个 MAC
- 接收方可以对每个记录进行完整性检验
- 问题: 对于每个记录,接收方需要从数据中识别出MAC
- 需要采用变长记录
简化的SSL: 序列号
- 问题: 攻击者可以捕获和重放记录或者重新排序记录
- 解决方案: 在MAC中增加序列号
- MAC= MAC(Mx,sequence][data)
- 注意:记录中没有序列号域
- 问题: 攻击者可以重放所有记录
- 解决方案: 使用一次性随机数(nonce)
简化的SSL: 控制信息
- 问题:截断攻击
- 攻击者伪造TCP连接的断连段,恶意断开连接
- 一方或双方认为对方已没有数据发送
- 解决方案: 记录类型, 利用一个类型的记录专门用于断连
- type 0用于数据记录; type 1用于断连
- MAC=MAC(Mx,sequence || type || data)
SSL协议栈
- 介于HTTP与TCP之间的一个可选层
- 绝大多数应用层协议可直接建立在SSL之上
- SSL不是一个单独的协议,而是两层协议
SSL密码组(cipher suite)
- 密码组(cipher suite)
- 公开密钥算法(public-keyalgorithm)
- 对称加密算法(symmetricencryption algorithm)
- MAC算法
- SSL支持多个密码组
- 协商(negotiation): 客户与服务器商定密码组
- 客户提供选项(choice)
- 服务器挑选其一
- 常见的SSL对称密码:
- DES-分组密码
- 3DES-分组密码
- RC2 -Rivest Cipher 2分组密码
- RC4 -Rivest Cipher 4流密码
- SSL公开密钥加密: RSA
SSL握手过程
- 客户发送其支持的算法列表,以及客户一次随机数(nonce)
- 服务器从算法列表中选择算法,并发回给客户: 选择+证书+服务器一次随机数
- 客户验证证书,提取服务器公钥,生成预主密钥(pre_master_secret),并利用服务器的公钥加密预主密钥,发送给服务器
- 客户与服务器基于预主密钥和一次随机数分别独立计算加密密钥和MAC密钥
- 客户发送一个针对所有握手消息的MAC
- 服务器发送一个针对所有握手消息的MAC
最后2步的意义: 保护握手过程免遭篡改
- 客户提供的算法,安全性有强、有弱
- 明文传输
- 中间人攻击可以从列表中删除安全性强的算法
- 最后2步可以预防这种情况发生
为什么使用两个一次随机数?
- 假设Trudy嗅探Alice与Bob之间的所有报文
- 第二天,Trudy与Bob建立TCP连接,发送完全相同的记录序列
- Bob(如Amazon)认为Alice对同一产品下发两个分离的订单
- 解决方案:Bob为每次连接发送完全不同的一次随机数
- 确保两天的加密密钥不同
虚拟专用网VPN
- 动机: 安全+成本
- 虚拟专用网VPN(Virtual Private Networks): 通过建立在公共网络(如Internet)上的安全通道,实现远程用户、分支机构、业务伙伴等与机构总部网络的安全连接,从而构建针对特定组织机构的专用网络。
- 虚拟:“安全通道”不实际独占公共网络的资源,是一条逻辑的穿过公共网络的安全、稳定的隧道
- 通过隧道技术、加密技术、密钥管理、认证和访问控制等,实现与专用网类似的安全性能
VPN的功能
- 数据机密性保护
- 数据完整性认证
- 数据源身份认证
- 防重放攻击
- 访问控制
VPN关键技术
- 隧道技术
- 数据加密
- 身份认证
- 密钥管理
- 访问控制
- 网络管理
隧道技术
- 构建VPN的核心技术
- 隧道: 通过Internet提供安全的点到点(或端到端)的数据传输“安全通道”
- 实质上是一种封装
- VPN隧道利用隧道协议对通过隧道传输的数据进行封装
- 使数据安全穿越公共网络(通常是Internet)
- 通过加密和认证以确保安全
- 数据包进入隧道时,由VPN封装成IP数据报
- 通过隧道在Internet上安全传输
- 离开隧道后,进行解封装,数据便不再被保护
隧道协议
隧道协议内包括以下三种协议:
- 乘客协议(Passenger Protocol)
- 封装协议(Encapsulating Protocol)
- 承载协议(Carrier Protocol)
常见VPN隧道协议:
- 第二层隧道:PPTP、L2TP
- 主要用于远程客户机访问局域网方案
- 第三层隧道: IPSec
- 主要用于网关到网关、或网关到主机方案
- 不支持远程拨号访问
典型VPN实现技术
- IPSec: 最安全、适用面最广
- SSL:具有高层安全协议的优势
- L2TP:最好的实现远程接入VPN的技术
- 典型VPN技术结合:
- IPSec与SSL、IPSec与L2TP
防火墙(firewall)
防火墙:隔离组织内部网络与公共互联网,允许某些分组通过, 而阻止其他分组进入/离开内部网络的软件/硬件设施。
为什么需要防火墙?
- 预防拒绝服务攻击(DoS) :
- SYN泛洪: 攻击者建立许多虚假TCP连接,耗尽资源,导致“真正”的连接无法建立
- 预防非法修改内部数据访问:
- e.g.,攻击者替换CIA网站主页
- 只允许对内部网络的授权访问:
- 认证的用户/主机
三种类型的防火墙:
- 无状态分组过滤器(stateless packet filters)
- 有状态分组过滤器(stateful packet filters)
- 应用网关(application gateways)
无状态分组过滤器
- 内部网络通过路由器防火墙(router firewall)与Internet连接
- 路由器逐个分组过滤,决策是否转发或丢弃分组,依据:
- 源IP地址、目的IP地址
- TCP/UDP源、目的端口号
- ICMP报文类型
- TCP SYN和ACK标志位
无状态分组过滤器: 笨拙
- 不加以区分放行满足条件的所有分组
- 例如:放行dest port = 80、ACK=1的分组,即使没有建立的TCP连接
有状态分组过滤器:跟踪每个TCP连接
- 跟踪连接建立(SYN)、拆除(FIN): 根据状态确定是否放行进入或外出的分组
- 超时的非活动连接: 不再允许分组通过
应用网关
- 基于应用数据以及lP/TCP/UDP头部字段过滤分组
- 例如:允许特定用户telnet外部网络
- 要求所有Telnet用户通过网关Telnet外部网络;
- 对于授权的用户,网关代理用户与目的主机建立Telnet连接,并且在两个连接之间进行数据中继;
- 路由器阻止所有不是由网关发起的Telnet连接。
防火墙、应用网关的局限性
- IP欺骗(spoofing): 路由器不知道数据是否来自于声称的源
- 如果多个应用需要特殊处理,则每个应用需要一个应用网关
- 客户软件必须知道如何连接网关
- e.g..必频配置Web浏览器的代理服务器的IP地址
- 过滤器经常对UDP流量使用“全部通过”或者“全部不通过”策略
- 折衷(tradeoff):确定安全级别
- 与外部网络的通信度
- 很多安全防护级别很高的网站仍然遭受攻击