• Replay attack 回放攻击


    http://baike.baidu.com/item/重放攻击

    重放攻击(Replay Attacks)又称重播攻击、回放攻击或新鲜性攻击(Freshness Attacks),是指攻击者发送一个目的主机已接收过的包,特别是在认证的过程中,用于认证用户身份所接收的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的安全性。
    它是一种攻击类型,这种攻击会不断恶意或欺诈性地重复一个有效的数据传输,重放攻击可以由发起者拦截并重复发该数据到目的主机进行。攻击者利用网络监听或者其他方式盗取认证凭据,一般是cookies或者一些的认证session会话,进行一定的处理后,再把它重新发给认证服务器。从这个解释上理解,加密可以有效防止明文数据被监听,但是却防止不了重放攻击。重放攻击任何网络通讯过程中都可能发生。
     
     
    云 API 公共参数 - API 文档 - 文档中心 - 腾讯云 https://cloud.tencent.com/document/product/1278/55259
     
    Timestamp Integer 当前 UNIX 时间戳,可记录发起 API 请求的时间。例如1529223702,如果与当前时间相差过大,会引起签名过期错误。
    Nonce Integer 随机正整数,与 Timestamp 联合起来,用于防止重放攻击。
     
     重放攻击 - 百度智能云 https://cloud.baidu.com/search.html?q=%E9%87%8D%E6%94%BE%E6%94%BB%E5%87%BB&type=all&pn=1
     
     
     搜索推广API - 鉴权认证 | 百度智能云文档 https://cloud.baidu.com/doc/SEM/s/njwvxuskg

    API认证优势

    API认证将为用户带来以下优势:

    • 对于请求者的身份进行验证。认证字符串使用指定用户的AK/SK对HTTP请求进行签名,可以起到验证用户身份的作用。关于AK/SK的获取,请参看获取AK/SK。
    • 对被传输内容进行保护,防止非法篡改。用户基于HTTP请求的指定内容生成认证字符串,如果在传输过程中遭到非法篡改,将导致系统生成的认证字符串与用户生成的认证字符串不匹配,最终导致认证失败。
    • 防止重放攻击。认证字符串都具有指定的生效时间,一个请求必须要在指定时间内到达百度智能云,否则系统将拒绝该请求。
    • 为了保护用户的SK信息,百度智能云不直接使用SK信息,而是使用SK生成SigningKey,同时在SigningKey中包含有效时间范围。这样可以减少用户因SigningKey丢失带来的安全隐患。

    百度信息流推广API - 鉴权认证 | 百度智能云文档 https://cloud.baidu.com/doc/FEEDS/s/1jwvy9mog

    为什么要进行签名计算?

    签名过程会通过以下方式保护您的API请求:

    • 验证请求者的身份
      签名可以确保请求是由某个具有有效访问密钥的用户或服务发起。详细请参考管理您的AKSK
    • 保护传输中的数据,防止非法篡改
      若请求在传输过程中遭到非法篡改,由于第三方无法对篡改后的请求进行计算,得到新的认证字符串(Authorization),智能云收到请求后认证字符串匹配将失败,因此身份校验无法通过。
    • 防止重放攻击
      认证字符串(Authorization)都具有指定的有效时间。如请求被截获,第三方无法在有效时间之外重放请求。

    为了保护用户的SK信息,百度智能云不直接使用SK信息,而是使用SK生成SigningKey,同时在SigningKey中包含有效时间范围。这样可以减少用户因SigningKey丢失带来的安全隐患。

     Signing AWS API requests - AWS General Reference https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html

    Why requests are signed

    The signing process helps secure requests in the following ways:

    • Verify the identity of the requester

      Signing makes sure that the request has been sent by someone with a valid access key. For more information, see Understanding and getting your AWS credentials.

    • Protect data in transit

      To prevent tampering with a request while it's in transit, some of the request elements are used to calculate a hash (digest) of the request, and the resulting hash value is included as part of the request. When an AWS service receives the request, it uses the same information to calculate a hash and matches it against the hash value in your request. If the values don't match, AWS denies the request.

    • Protect against potential replay attacks

      In most cases, a request must reach AWS within five minutes of the time stamp in the request. Otherwise, AWS denies the request.

     App ID鉴权介绍_会议_开发指南_华为云 https://support.huaweicloud.com/devg-meeting/meeting_20_0011.html

    2. ExpireTime为0,表示永远不过期。为了防止重放攻击,不建议将ExpireTime设置为0。

     
     开放API网关实践(二) —— 重放攻击及防御 - 草堂笺 https://blog.piaoruiqing.com/2019/08/11/openapi-gateway-replay-attack/ 

    前言

    上一篇文章《开放API网关实践(一)》中的接口设计提到timestampnonce两个参数的作用是用来放重放. 本文就重放攻击及其防御进行探讨. 先抛出两个问题:

    • 什么是重放攻击
    • 如何防御重放攻击

    什么是重放攻击(Replay Attacks)

    什么是重放, 先举个例子:

    打开浏览器的调试工具并访问一个网站, 在网络工具中找到一个请求并右键选择Replay. 如图:

    上述的重放操作是接口调试中比较常用的手段, 这种操作可以让我们跳过认证信息的生成过程, 直接重复发起多次有效的请求.

    重放攻击是一种黑客常用的攻击手段, 又称重播攻击回放攻击, 是指攻击者发送目的主机已接收过的数据, 以达到欺骗系统的目的, 主要用于身份认证过程, 破坏认证的正确性.

    举个易懂的例子:

    • 服务端提供了打款接口, 用户A向服务端请求发起一次打款5元的操作(附带了签名并进行了加密), 服务端接收到了数据并正确打款给用户B.
    • 但这个请求被黑客拦截到(可能就是用户B干的 ( ̄▽ ̄)"), 黑客将请求原封不动地向服务器发送, 服务器多次错误地打款给用户B. (当然, 这些都是是建立在服务端的付款没做幂等等防范措施、安全级别较低的前提下)
    • 尽管A发起的请求有签名和加密, 但B无需破解这个数据, 只是将同样的数据重复发给服务器就能达到欺骗的目的.

    事实上, 签名、加密等手段并不能防御重放攻击, 因为攻击者拦截到的数据已是正确的请求数据, 即使无法破解其内容, 也可以重放向服务器发送原数据以达到欺骗的目的.

    如何防御重放攻击

    百度百科

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

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

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

    在实际使用中, 常将1和2结合使用, 时间戳有效期内判断随机数是否已存在, 有效期外则直接丢弃.

    重放攻击防御实践

    我们采取时间戳+随机数的方式来实现一个简单的重放攻击拦截器. 时间戳和随机数互补, 既能在时间有效范围内通过校验缓存中的随机数是否存在来分辨是否为重放请求, 也能在缓存失效后(缓存有效时间和时间范围一致)通过时间戳来校验该请求是否为重放. 如图:

    • (一): 请求时间超出时间范围的将被拒绝.
    • (二): 缓存过期时间等于有效时间的跨度, 若缓存中已存在该随机数, 则拒绝.

    结语

    重放攻击防御的关键点:

    • 记录请求标识并缓存, 接受请求时校验, 拒绝重放, 即将nonce存入缓存, 拒绝相同的nonce
    • 随机数的方式可能造成过多的缓存, 故需要配合时间戳进行过滤, 时间戳不在有效范围内的一律拒绝.

    重放攻击是一种常用且有效的攻击手段, 其危害不可忽视, 尽管可以通过业务层面来保障数据的正确性, 但依旧会给系统造成不必要开销, 在网关层过滤掉重放请求是一个不错的选择.

    如何有效防止API的重放攻击? - API 网关 - 阿里云 https://help.aliyun.com/document_detail/50041.html

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

    更新时间:2020-08-21 15:00

    API重放攻击(Replay Attacks)又称重播攻击、回放攻击,这种攻击会不断恶意或欺诈性地重复一个有效的API请求。攻击者利用网络监听或者其他方式盗取API请求,进行一定的处理后,再把它重新发给认证服务器,是黑客常用的攻击方式之一。

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

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

    使用签名防止重放攻击

    ##使用签名防止重放攻击 使用签名之后,可以对请求的身份进行验证。但不能阻止重放攻击,即攻击者截获请求后,不对请求进行任何调整。直接使用截获的内容重新高频率发送请求。

    API网关提供了一套有效防止重放攻击的方法。开启API网关的防重放,需要您使用“阿里云APP”的认证方式。通过这种签名认证方式,每个请求只能被使用一次,从而防止重放。

    阿里云APP:是基于请求内容计算的数字签名,用于API网关识别用户身份。客户端调用API时,需要在请求中添加计算的签名。API网关在收到请求后会使用同样的方法计算签名,同用户计算的签名进行比较,相同则验证通过,不同则认证失败。 这种认证的签名方式请参照:请求签名

    在API网关的签名中,提供X-Ca-Timestamp、X-Ca-Nonce两个可选HEADER,客户端调用API时一起使用这两个参数,可以达到防止重放攻击的目的。

    ###原理

    1. 请求所有的内容都被加入签名计算,所以请求的任何修改,都会造成签名失败。
    2. 不修改内容

      • X-Ca-Timestamp:发起请求的时间,可以取自机器的本地实现。当API网关收到请求时,会校验这个参数的有效性,误差不超过15分钟。

      • X-Ca-Nonce:这个是请求的唯一标识,一般使用UUID来标识。API网关收到这个参数后会校验这个参数的有效性,同样的值,15分内只能被使用一次。

     https://zh.wikipedia.org/wiki/重放攻击

    重放攻击(英语:replay attack,或称为回放攻击)是一种恶意或欺诈的重复或延迟有效数据的网络攻击形式。 这可以由发起者或由拦截数据并重新传输数据的对手来执行,这可能是通过IP数据包替换进行的欺骗攻击的一部分。 这是“中间人攻击”的一个较低级别版本。

    这种攻击的另一种描述是: “从不同上下文将消息重播到安全协议的预期(或原始和预期)上下文,从而欺骗其他参与者,致使他们误以为已经成功完成了协议运行。”[1]

    重放攻击工作原理


     
    重播攻击的示例图。Alice(A)将她的哈希密码发送给Bob(B)。Eve(E)嗅探并重新播放哈希。

    假设Alice 想向Bob 证明自己的身份。 Bob 要求她的密码作为身份证明,爱丽丝应尽全力提供(可能是在经过诸如哈希函数的转换之后); 与此同时,Eve窃听了对话并保留了密码(或哈希)。交换结束后,Eve(冒充Alice)连接到Bob。当被要求提供身份证明时,Eve发送从Bob接受的最后一个会话中读取的Alice的密码(或哈希),从而授予Eve访问权限。[1]

    预防与对策

    所有重放攻击的一般对策

    通过使用会话ID和组件编号标记每个加密的组件,可以防止重放攻击。之所以可行,是因为为程序的每次运行创建了唯一的随机会话ID,因此先前的结果更加难以复制。 由于每个会话的ID不同,攻击者无法执行重放。[1]

    关于会话标识符

    会话ID(也称为会话令牌)是一种可用来帮助避免重放攻击的机制。 生成会话ID的方式如下。

    1. Bob将一次性令牌发送给Alice,Alice使用该令牌来转换密码并将结果发送给Bob。例如,她将使用令牌来计算会话令牌的哈希,并将其附加到要使用的密码上。
    2. Bob使用会话令牌执行相同的计算。
    3. 当且仅当Alice和Bob的值都匹配时,登录成功。
    4. 现在,假设攻击者Eve已经捕获了该值,并试图在另一个会话中使用它。Bob将发送一个不同的会话令牌,当Eve用她捕获的值进行答复时,它将不同于Bob的计算,因此他将知道这不是Alice。

    会话令牌应通过随机函数选择(通常使用伪随机函数)。 否则,Eve可能可以冒充Bob,提出一些预测的未来令牌,并说服Alice在她的转换中使用该令牌。 然后,Eve可以在稍后的时间重播她的答复(当Bob实际上提供了先前预测的令牌时),Bob将接受身份验证

    一次性密码

    一次性密码与会话令牌类似,因为一次性密码在使用后(或在很短的时间内)就会过期。 除会话外,它们还可用于验证单个交易,也可以在身份验证过程中使用,以帮助在彼此通信的两方之间创建信任。

    随机数和MAC

    Bob还可以发送随机数,但消息认证码(MAC)应随其后发送,Alice应检查该消息。

    时间戳

    添加时间戳是防止重放攻击的另一种方法。 同步应使用安全协议来实现。例如,Bob 定期广播他的时间和MAC。当Alice要向Bob发送消息时,她会在消息中包含最佳的估计时间,这也是经过身份验证的。 Bob仅接受时间戳在合理范围内的消息。这种方案的优点是Bob不需要生成(伪)随机数,而Alice不需要向Bob询问随机数。在单向或接近单向的网络中,这可能是一个优势。但是,如果重放攻击执行得足够快(即在该“合理”范围内),则可以成功。

    特定情况下的对策

    Kerberos协议防护

    Kerberos身份验证协议包括一些对策。在重放攻击的经典情况下,对手捕获一条消息,然后在稍后的日期重放该消息以产生效果。例如,如果一个银行计划容易受到这种攻击,那么导致资金转移的信息可以一遍又一遍地重放,以转移比最初预期更多的资金。 但是,在Microsoft Windows Active Directory中实现的Kerberos协议包括使用涉及时间戳的方案来严重限制重放攻击的有效性。 超过“生存时间(TTL)”的消息将被视为旧消息并被丢弃。[2]

    已经提出了改进措施,包括使用三重密码方案。这三个密码与身份验证服务器,票证授予服务器和TGS一起使用。这些服务器使用密码在不同服务器之间使用秘密密钥加密消息。这三个密钥提供的加密有助于防止重放攻击。[3]

    Ad hoc网络中的安全路由

    无线随意网络也容易受到重放攻击。在这种情况下,可以通过扩展AODV协议来改进身份验证系统并使其更强大。这种改善Ad Hoc网络安全性的方法以少量开销增加了网络的安全性。[4] 如果存在大量开销,则网络将面临变慢的风险,并且其性能将下降。因此,通过保持相对较低的开销,网络可以保持更好的性能,同时仍可以提高安全性。

    质询握手身份验证协议

    当使用密码验证协议(PAP)验证其身份时,使用点对点协议(PPP)的客户端进行的验证和登录很容易受到重放攻击,因为进行身份验证的客户端会“明文”发送其用户名和密码, 然后,认证服务器响应此请求发送其确认;因此,拦截客户端可以自由地读取传输的数据,并将客户端和服务器中的每一个模拟为彼此,以及随后可以存储客户端凭据以供稍后模拟到服务器。 询问握手认证协议(CHAP)通过使用来自身份验证器的“质询”消息代替客户端使用基于共享机密(例如,客户端密码)的哈希计算值来响应,从而在身份验证阶段防止此类重播攻击 ),身份验证者将其与自己对挑战和共享机密的计算进行比较,以对客户端进行身份验证。通过依靠自身尚未传送的共享机密以及其他功能(例如,身份验证器控制的挑战的重复以及更改标识符和挑战值),CHAP提供了针对重放攻击的有限保护。[5]

    重放攻击敏感性的真实示例

    有几个真实的例子,说明如何使用重放攻击以及如何检测和修复问题以防止进一步的攻击。

    车辆远程无钥匙进入系统

    为了方便用户,道路上的许多车辆使用远程无钥匙系统或密钥卡。 现代系统已针对简单的重放攻击进行了加固,但容易受到缓冲重放攻击的影响。 通过在目标车辆的范围内放置可以接收和发送无线电波的设备来执行此攻击。 发送器将尝试阻塞发送给它的任何RF车辆解锁信号,同时将其放置在缓冲区中以备后用。 在进一步尝试解锁车辆时,发射器将阻塞新信号,将其缓存并播放旧信号,从而创建一个滚动缓冲,该缓冲比车辆领先一步。 稍后,攻击者可能会使用此缓冲的代码来解锁车辆。[6][7]

    文本相关的说话人验证

    各种设备使用说话者识别来验证说话者的身份。 在依赖于文本的系统中,攻击者可以记录系统正确验证的目标个人的语音,然后再次播放录音以供系统验证。 使用频谱位图从已验证用户的存储语音中设计了一种对策。 在这种情况下,重放的语音具有不同的模式,然后将被系统拒绝。[8]

     重播攻击的示例图。Alice(A)将她的哈希密码发送给Bob(B)。Eve(E)嗅探并重新播放哈希。

     What is a Replay Attack and How to Prevent it | Kaspersky https://www.kaspersky.com/resource-center/definitions/replay-attack
     

    A replay attack occurs when a cybercriminal eavesdrops on a secure network communication, intercepts it, and then fraudulently delays or resends it to misdirect the receiver into doing what the hacker wants. The added danger of replay attacks is that a hacker doesn't even need advanced skills to decrypt a message after capturing it from the network. The attack could be successful simply by resending the whole thing.

    How It Works

    Consider this real-world example of an attack. A staff member at a company asks for a financial transfer by sending an encrypted message to the company's financial administrator. An attacker eavesdrops on this message, captures it, and is now in a position to resend it. Because it's an authentic message that has simply been resent, the message is already correctly encrypted and looks legitimate to the financial administrator.

    In this scenario, the financial administrator is likely to respond to this new request unless he or she has a good reason to be suspicious. That response could include sending a large sum of money to the attacker's bank account.

    Stopping a Replay Attack

    Preventing such an attack is all about having the right method of encryption. Encrypted messages carry "keys" within them, and when they're decoded at the end of the transmission, they open the message. In a replay attack, it doesn't matter if the attacker who intercepted the original message can read or decipher the key. All he or she has to do is capture and resend the entire thing — message and key — together.

    To counter this possibility, both sender and receiver should establish a completely random session key, which is a type of code that is only valid for one transaction and can't be used again.

    Another preventative measure for this type of attack is using timestamps on all messages. This prevents hackers from resending messages sent longer ago than a certain length of time, thus reducing the window of opportunity for an attacker to eavesdrop, siphon off the message, and resend it.

    Another method to avoid becoming a victim is to have a password for each transaction that's only used once and discarded. That ensures that even if the message is recorded and resent by an attacker, the encryption code has expired and no longer works.

     
     
  • 相关阅读:
    SpringCloud学习笔记(3)----Spring Cloud Netflix之深入理解Eureka
    SpringCloud学习笔记(2)----Spring Cloud Netflix之Eureka的使用
    SpringCloud学习笔记(1)----认识微服务与SpringCloud
    SpringBoot学习笔记(16)----SpringBoot整合Swagger2
    SpringBoot学习笔记(15)----SpringBoot使用Druid
    SpringBoot学习笔记(14)----应用监控-HTTP方式
    SpringBoot学习笔记(13)----使用Spring Session+redis实现一个简单的集群
    SpringBoot学习笔记(12)----SpringBoot实现多个 账号轮询发送邮件
    SpringBoot学习笔记(11)-----SpringBoot中使用rabbitmq,activemq消息队列和rest服务的调用
    SpringBoot学习笔记(8)-----SpringBoot文件上传
  • 原文地址:https://www.cnblogs.com/rsapaper/p/6667912.html
Copyright © 2020-2023  润新知