如何设计实现一个轻量的开放API网关之重放攻击及防御
文章地址: https://blog.piaoruiqing.com/blog/2019/08/11/开放api网关实践之重放攻击及防御/
文章目录
前言
上一篇文章(开放API网关实践(一)中的接口设计提到timestamp
和nonce
两个参数的作用是用来防重放. 本文就重放攻击及其防御进行探讨. 先抛出两个问题:
- 什么是重放攻击
- 如何防御重放攻击
什么是重放攻击(Replay Attacks)
什么是重放
, 先举个例子:
打开浏览器的调试工具并访问一个网站, 在网络工具中找到一个请求并右键选择Replay
. 如图:
上述的重放
操作是接口调试中比较常用的手段, 这种操作可以让我们跳过认证信息的生成过程, 直接重复发起多次有效的请求.
而重放攻击
是一种黑客常用的攻击手段, 又称重播攻击
、回放攻击
, 是指攻击者发送目的主机已接收过的数据
, 以达到欺骗系统的目的, 主要用于身份认证过程, 破坏认证的正确性.
举个易懂的例子:
- 服务端提供了打款接口, 用户A向服务端请求发起一次打款5元的操作(附带了签名并进行了加密), 服务端接收到了数据并正确打款给用户B.
- 但这个请求被黑客拦截到(可能就是用户B干的 ( ̄▽ ̄)"), 黑客将请求原封不动地向服务器发送, 服务器多次错误地打款给用户B. (当然, 这些都是是建立在服务端的付款没做幂等等防范措施、安全级别较低的前提下)
- 尽管A发起的请求有签名和加密, 但B无需破解这个数据, 只是将
同样的数据
重复发给服务器就能达到欺骗的目的.
模拟重放攻击
实验器材
序号 | 名称 | 数量 | 备注 |
---|---|---|---|
1 | 服务器x2 | 1 | Mac: 10.33.30.101 - 真实服务器 Windows: 10.33.30.100 - 伪造服务器 |
2 | 域名 | 1 | replay-test.piaoruiqing.com (10.33.30.101) |
3 | DNS 服务器 |
1 | 用来模拟DNS 劫持 |
实验步骤
- 启动服务器, 请求接口并收到响应数据.
- 劫持DNS(在路由器中修改DNS服务器地址模拟劫持), 并拦截请求数据.
- 向服务器重复发送拦截到的数据(重放攻击).
过程记录
准备工作
DNS配置, 将域名replay-test.piaoruiqing.com
指向内网中服务器的IP. 并启动服务器.
正常请求
使用postman
发起一个正常的请求, 其中签名已在Pre-request-script
中生成.