攻击目的

Classify

  • 被动攻击:偷窥者,嗅探数据,目的是为了获取当前通信双方的内容, 被攻击者一般不易察觉
  • 主动攻击:终端,篡改,伪造各种请求, 攻击者主动做一些攻击行为

说明:

  • 主动攻击: DDOS(分布式拒绝服务攻击), 信息篡改, 伪装, 重放攻击.
  • 被动攻击: 嗅探, 信息收集, 流量分析(GFW)

主动攻击

  • 伪装: 假装另外一个实体, 在捕获身份鉴别信息后, 伪装他人进行破坏
  • 重放: 被动捕获数据单元, 之后重放, 从而产生非授权效果
  • 篡改: 修改报文, 产生非授权效果
  • Dos: 利用合理的请求来占用服务器资源, 例如伪造 IP 地址等
  • DDos: 分布式拒绝服务攻击, 利用很多分布在各个地方的机器(肉鸡)来完成

防护手段: ICMP 不可达, TCP-RST 响应, 防火墙过滤机制.

被动攻击

  • 窃听: 截获信息
  • 流量分析: 获取流量, 拷贝流量分析

防护手段: 报文加密

重放攻击

Intro

replay attack,重播攻击,回放攻击,新鲜性攻击, 攻击者发送一个目的主机已接收过的包,
来达到欺骗系统的目的,主要用于”身份认证”过程.

一句话:摘要token和密码一样好用,只要你的token不变化,我就一直伪装正常用户.

这个操作有点像流量抓取并重放的测试功能,但是后者仅仅”被动攻击”的合法化运用, 截获请求,之后将自己当成客户端,转发请求,这个过程无需进行任何加解密操作哦;

replay

时间戳

使用”时间戳”来代表当前时刻的数, 接收方在接收到消息之后会判断包中时间戳是否与
接收方记录的时间戳是否相近, 如果相对远离, 则丢弃包.

问题: 可能造成误判

序号

通信双方通过消息中的序列号来判断消息的新鲜性, 要求通信双方实现协商一个初始
序列号, 并协商递增方法.

Example

普通方式:

1
2
登录: /login.do?method=login&password=md5
监听者: 直接使用该 URL, 在自己的浏览器上登录即可(默认攻击者使用浏览器)

增强方式(session):

1
2
3
用户进行主页, C/S 约定sessionid, 之后使用md5(md5(password) + sessionid)来加密
登录: /login.do?method=login&password=md5
监听者: (默认攻击者是小白, 使用浏览器攻击), 此时攻击者的sessionid是不同的, 认证失败

固定盐值(salt):

1
2
默认客户端的盐值是正确保存的, 不适用于浏览器啊, 加salt, 避免用户密码果断
产生的暴力攻击方式, md5(md5(password) + salt), 这个适用性范围太小了.

所有上述的解决方式其实都没有真正解决问题, 最终还是需要https来避免这种重放攻击.

报文摘要算法

单向加密

  • 加密过程中不需要密钥,输入明文后由系统直接经过加密算法处理成密文,无法被破解;
  • 同样的明文永远得到同样的密文;
  • 明文任何一点变化都会导致密文的输出千差万别;

single-security

报文摘要

单向加密, 报文摘要算法就是一种散列函数,或者称为密码编码的检验和,一种单向加密算法

  • MD5生成128bits的摘要
  • SHA1生成160bits的摘要
  • SHA256

结果: 任意长度的报文经过报文摘要算法之后都会生成一个固定长度的报文摘要信息;

强碰撞和弱碰撞

冲突:散列函数的结果可能会相同的情况,也称为碰撞;

弱抗碰撞性:

1
2
3
4
已知函数 M 和一段数据 H, 
若想找到一个 H', 使得 M(H)=M(H')是非常困难的

弱抗碰撞性: 仅仅能抵抗弱碰撞的hash函数

强抗碰撞性:

1
2
3
已知 M, 若想找出任意两个不同的H, H', 使得M(H)=M(H')是非常困难的.

强碰撞性: 能抵抗强碰撞的hash函数

例子

银行交易系统的完整性:

security-bank

用途

校验报文,即报文的完整性,如果H(X)得出的结果和传送过来的校验值不匹配,丢包

  • 软件下载工程中的md5值;
  • /etc/passwd中的md5值,登录时利用密码计算md51,之后比较;

双向加密

通用加密算法,对数据本身的加密,一般不是md5和sha的算法都是双向加密算法,包括:

  • 对称加密算法
  • 非对称加密算法

中间人攻击

方法

middle

防御

使用数字证书(CA),利用asymmetric algorithm算法.

明文攻击

Intro

使用Digest Authentication(其中有随机数)来生成Response,但是如果其中有一个恶意的代理
或者恶意的原始服务器,很容易的为Client的响应计算提供nonce,此类方式成为
chosen plaintext attack.其中密码分析见《Glossary Of Security》

PS: 网络安全模型中一般假设所有的加密算法都是公开的,密码体系的安全性依赖于秘钥的安全性,秘钥只有发送方和接收方知道,一旦第三方得知这个秘钥,那他们的通信就被攻破了.

预先计算的词典攻击

Attack会根据nonce和常见的密码(一个密码库)生成一个大型的MD5之后的词典.

  • 首先攻击者肯定事先知道生成MD5的数据组成方式
  • 其次Attack Proxy就可以完成流量封锁,Client的请求都会被attack截获并伪造Response

暴力型攻击

枚举所有可能的密码,当场算法MD5值,需要机器的运算速度,从而成为一个假冒的服务器,所以密码还是不能太简单.

防御

在Client端提供cnonce + 强密码 + 密码过期策略.