Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

如何有效防止API的重放攻击? #108

Open
pfan123 opened this issue Oct 17, 2022 · 0 comments
Open

如何有效防止API的重放攻击? #108

pfan123 opened this issue Oct 17, 2022 · 0 comments

Comments

@pfan123
Copy link
Owner

pfan123 commented Oct 17, 2022

API重放攻击(Replay Attacks)又称重播攻击、回放攻击,是指攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。重放攻击可以由发起者,也可以由拦截并重发该数据的敌方进行。攻击者利用网络监听或者其他方式盗取认证凭据,之后再把它重新发给认证服务器。重放攻击在任何网络通信 [6] 过程中都可能发生,是计算机世界黑客常用的攻击方式之一。

HTTPS数据加密是否可以防止重放攻击?

否,加密可以有效防止明文数据被监听,但是却防止不了重放攻击。

原理

重放攻击的基本原理就是把以前窃听到的数据原封不动地重新发送给接收方。很多时候,网络上传输的数据是加密过的,此时窃听者无法得到数据的准确意义。但如果他知道这些数据的作用,就可以在不知道数据内容的情况下通过再次发送这些数据达到愚弄接收端的目的。例如,有的系统会将鉴别信息进行简单加密后进行传输,这时攻击者虽然无法窃听密码,但他们却可以首先截取加密后的口令然后将其重放,从而利用这种方式进行有效的攻击。再比如,假设网上存款系统中,一条消息表示用户支取了一笔存款,攻击者完全可以多次发送这条消息而偷窃存款。

img

类型

1.根据重放消息的接收方与消息的原定接收方的关系,重放攻击可分为3种:

第一种是直接重放,即重放给原来的验证端,直接重放的发送方和接收方均不变。

第二种是反向重放,将原本发给接收方的消息反向重放给发送方。

第三种是第三方重放,将消息重放给域内的其他验证端。

2.基于重放法发生在什么回合,可以将重放攻击分为两类:

(1)在当前回合外攻击中,重放的消息来自协议当前回合之外,因此至少涉及协议的两个回合运行,可以并发也可以顺序地实现。

①交错攻击需要两回合或多回合同时执行协议,著名的例子是Lowe对NSPK协议的攻击。

②经典重放也涉及当前回合外执行协议,但不要求同时执行协议。攻击者存储在前面的回合中所传送的消息,并抓住机会重放它们,对协议的当前回合进行攻击。Denning和Sacco对NSSK协议的攻击,就是经典重放的一个著名例子。

(2)在当前回合内攻击中,重放的消息来自协议当前回合。

3.考查攻击者对消息重定向,这种分类法称为目的地分类法。分类如下。

(1)偏转重放攻击:重放消息重新定向,发送给不同于原接收者的第三方。这种情形可进一步分为如下子类:

①重放消息重定向,发送给原发送者,称为反射重放攻击。

②重放消息重定向,发送给第三方,即不同于原发送者和原接收方的第三方。

(2)攻击者通过延时的方法(可能涉及不同的协议回合),将消息传送给目的地,称为直接重放攻击。

防御方案

(1)加随机数。该方法优点是认证双方不需要时间同步,双方记住使用过的随机数,如发现报文中有以前使用过的随机数,就认为是重放攻击。缺点是需要额外保存使用过的随机数,若记录的时间段较长,则保存和查询的开销较大。

(2)加时间戳。该方法优点是不用额外保存其他信息。缺点是认证双方需要准确的时间同步,同步越好,受攻击的可能性就越小。但当系统很庞大,跨越的区域较广时,要做到精确的时间同步并不是很容易。

(3)加流水号。就是双方在报文中添加一个逐步递增的整数,只要接收到一个不连续的流水号报文(太大或太小),就认定有重放威胁。该方法优点是不需要时间同步,保存的信息量比随机数方式小。但是一旦攻击者对报文解密成功,就可以获得流水号,从而每次将流水号递增欺骗认证端。

在实际中,常将方法(1)和方法(2)组合使用,这样就只需保存某个很短时间段内的所有随机数,而且时间戳的同步也不需要太精确。

对付重放攻击除了使用本以上方法外,还可以使用挑战一应答机制和一次性口令机制,而且似乎后面两种方法在实际中使用得更广泛。

应用案例

重放操作

一个电子商务网站,要求客户对电子订单签名以防止非授权用户下订单。攻击者如要冒充某位客户下订单,最好可以获得他的私钥,如果不成功,攻击者可以监听这位顾客的通信,将顾客以前发送的订单记录下来,然后他就可以直接将这些订单发给网站了。因为这些订单的确是合法客户签名过的,如果网站没有一种识别重放订单的机制,它就会不加犹豫地接收这些订单。

防止操作

可以在订单内设置时间字段,标识下订单的时间。网站检查下订单的时间,早前的订单可以可以当作重放攻击订单丢掉。假如时间的精度是秒,在一秒内发送多个订单是可能的,所以单凭时间也许是不够的。可以为订单增加一个随机数数值,如果发现同一秒内出现两个随机数相同的订单,有理由怀疑后面那个订单是重放攻击订单。利用随机数,可以有效地防范短时间内地重放攻击。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant