六 网络安全2
DNS
应用层协议
53端口
域名解析
迭代域名解析: 本地服务器和其他服务器
递归域名解析:客户端和本地服务器
DNS数据包
小于512B UDP,大于512B TCP
DNS攻击
网络嫁接,网络钓鱼:
将网站发送的请求解析成恶意服务器的伪装ip地址
DNS缓存中毒:
欺骗DNS服务器保存虚假的DNS记录
服务器面临中毒威胁:忽略标识符,具有可预测的id,接受未经请求的DNS记录
防御:
- 对查询使用随机标识符
- 始终检查标识符
- DNS请求端口随机化
- 部署DNSSEC
DNSSEC保证:
DNS回答来源的真实性
回复的完整性
拒绝存在的真实性
实现: 每一步中对DNS回复签名
使用公钥加密部署响应
信任锚,操作系统中的条目引导进程
防火墙
防火墙策略
- 接受:允许通过
- 丢弃:不允许通过,无失败提示
- 拒绝:不允许通过,有失败提示
防火墙类型
数据包过滤器(无状态防火墙):
根据规则集匹配,必须具有严格的限制性
状态过滤器(状态防火墙):
维护通过防火墙的连接的记录
应用层防火墙:
检查数据包内容
SSH
- 客户端通过TCP连接到服务器
- 客户端与服务器交换管理细节(协议,加密算法)
- 客户端与服务器进行密钥交换
七 WEB安全
跨站脚本XSS
攻击者将脚本代码注入Web应用程序生成的页面
XSS发起条件
- Web服务器没有对用户输入进行验证
- 允许用户输入不相关字符
- 直接显示用户输入,没有去除非法字符或者重新编码
客户端对XSS防御
基于代理:
分析浏览器和服务器间HTTP通信量
寻找HTML特殊字符
执行Web页面之前编码
应用层防火墙:
分析页面中超链接
停止不良请求链接
审计:
监视Javascript代码执行
SQL注入
防范
- 使用预编译语句,绑定变量
- 对用户提交的数据和输入参数过滤
- 不使用动态SQL语句,使用储存过程访问和操作数据
- 用户以低权限使用数据库
八 密码学概述
攻击类型
- 唯密文攻击 ciphertext only attack
- 已知明文攻击 known plaintext attack : 有多个明文-密文对
- 选择明文攻击 chosen plaintext attack :收集指定的明文对应的密文
- 选择密文攻击 chosen ciphertext attack : 收集指定密文对应的明文
分组密码
填充
PKC35:字节相同,表示填充的长度(填充了几个字节)
如果正好够分组,最后一个分组全是填充的
实际应用
DES
分组64bit,密钥56bit
3DES
密钥长度168bit(56*3)
AES
分组长度128bit,密钥长度128,192,256
AES-256是最常用的对称加密算法
AES轮结构
- 10轮
- 每一轮进行可逆替换
- X0是明文P与密钥K的异或
每一轮进行四个步骤
- SubBytes: S盒替换
- ShiftRows: 置换
- MixColums: 矩阵乘法
- AddRoundKey: 从128位密钥派生轮密钥
分组密码操作模式
电子密码本ECB
适用于数据较少的情况
对于大文件,相同的分组会使用相同的加密方式
密码分组链接CBC
C [ i ] = E k ( C ( i − 1 ) ⊕ P [ i ] ) C[i]=E_k(\ C(i-1)\ \oplus \ P[i]\ ) C[i]=Ek( C(i−1) ⊕ P[i] )
优点:
- 没有在密文中泄露明文的模式
- 最常用的模式
- 快速,简单
缺点:
- 所有数据快都必须可靠,丢失一个后面就都无了
流密码
适用于快速写入的任意长度的明文
同步流密码
密钥流的生成只依靠密钥k
如果明文是带有序列号的包,可以在不可靠信道下工作
自同步流密码
密钥k和前q个密文生成密钥流
收到q个密文后自动与密钥流生成器同步,数字被丢弃或天骄到明文流中,更容易恢复
RC4
2048位密钥
算法非常简单
工作在计数器模式下(CTR)
同步流密码
公钥加密
数论基础
一个正整数可由若干素数唯一表示
欧几里得算法(辗转相除)
g c d ( a , b ) = g c d ( b , a m o d b ) gcd(a,b)=gcd(b, a \ mod \ b) gcd(a,b)=gcd(b,a mod b)
乘法逆元
( x ∗ y ) m o d n = 1 (x*y)\ mod \ n=1 (x∗y) mod n=1
费马小定理
p是素数,p不是x的因子,则
x p − 1 m o d p = 1 x^{p-1} \ mod \ p = 1 xp−1 mod p=1
推论:x关于p的模逆元是 x p − 2 x^{p-2} xp−2
x ∗ x p − 2 m o d p = 1 x * x^{p-2} \ mod \ p =1 x∗xp−2 mod p=1
欧拉定理
欧拉函数 Φ ( n ) \Phi (n) Φ(n),比n小且与n互质的个数, Φ ( q ) = q − 1 \Phi (q)=q-1 Φ(q)=q−1 ,q 为素数时
对于任意互素的x和n
x Φ ( n ) m o d n = 1 x^{\Phi(n)}\ mod \ n =1 xΦ(n) mod n=1
n为素数时,退化为费马小定理
RSA
- n = p ∗ q n=p*q n=p∗q , p、q互素,则 Φ ( n ) = ( p − 1 ) ∗ ( q − 1 ) \Phi (n)=(p-1)*(q-1) Φ(n)=(p−1)∗(q−1)
- 寻找一个e满足 g c d ( e , Φ ( n ) ) = 1 gcd(\ e,\Phi(n)\ )=1 gcd( e,Φ(n) )=1
- d = e − 1 m o d Φ ( n ) d=e^{-1} \ mod \ \Phi (n) d=e−1 mod Φ(n) ,即d是e的模逆元
密钥
公钥: K E = ( n , e ) K_E=(n,e) KE=(n,e)
私钥: K D = d K_D=d KD=d
加密
明文: M<n
密文: C = M e m o d n C = M^e \ mod \ n C=Me mod n
解密
密文: C
明文: M = C d m o d n M=C^d\ mod \ n M=Cd mod n
RSA安全性
给定e和n,无法找到d,关键在于没法分解n为p,q
RSA正确性
模幂运算
时间复杂度 O ( l o g p ) O(log \ p) O(log p)
模逆运算
哈希函数
密码学Hash应满足的性质
- 抗原象攻击(单向性): 一直哈希值,求原值很难
- 抗第二原象攻击(抗弱碰撞性):已知P,找到Q使得 h ( P ) = h ( Q ) h(P)=h(Q) h(P)=h(Q) 很难
- 抗碰撞攻击(抗强碰撞性): 已知 h ( P ) h(P) h(P) ,找到Q使得 h ( P ) = h ( Q ) h(P)=h(Q) h(P)=h(Q)。
使用至少256位的Hash函数
随机预言机
- 一致性: 输入相同,输出相同
- 可计算性: 多项式时间
- 均匀分布性: 在取值空间内均匀分布,不碰撞
生日攻击
消息认证码MAC
基于Hash的MAC(HMAC)
h ( K ⊕ A ∣ ∣ h ( K ⊕ B ∣ ∣ M ) ) h(K\oplus A||\ \ h(K\oplus B||M)) h(K⊕A∣∣ h(K⊕B∣∣M))
安全通信
签名配合加密和MAC配合加密
九 安全模型与实践
kerberos
kerberos使用**票据(ticket)**作为身份令牌。票据是储存会话密钥的数字文件
票据
- 票据授予票据(TGT): 用户和会话密钥的全局标识符
- 服务票据: 对用户进行身份认证
票据都有时间戳,便于管理员设置到期时间
密钥分发中心KDC
- 身份验证服务器AS: 验证用户身份
- 票据授予服务器TGS: 向用户授予票据
kerberos身份验证
- 客户端与身份验证服务器互相进行身份验证
- 客户端与票据授予服务相互验证
- 客户端与服务S相互身份验证,为客户端提供服务
优点
- 分布式体系结构,在不安全网络下也安全
- 每次传输都用密钥加密,攻击者无法伪造
- 可以防止重放攻击
- 对称加密更高效
缺点
- 密钥分发中心不可用,整个网络瘫痪
- 攻击者破坏KDC,所有客户端和服务器的身份验证信息都被泄露
- 使用时间戳,所有参与方都同步时钟
十 数据库安全
敏感数据
使用加密
数据库数据储存为密文
解密密钥不能存储于数据库中
隐私保护
不能公开隐私
可以采用掩码值
推理攻击
可以通过其他信息组合得到隐私信息
防御方法:
- 单元抑制: 删除数据库一些单元
- 推广: 一些值被常用值替代
- 加噪: 添加随机值使平均噪声为0