通过与 Jira 对比,让您更全面了解 PingCode

  • 首页
  • 需求与产品管理
  • 项目管理
  • 测试与缺陷管理
  • 知识管理
  • 效能度量
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案

25人以下免费

目录

什么是哈希洪水攻击(Hash-FloodingAttack)

哈希洪水攻击(Hash-Flooding Attack)是一种拒绝服务攻击(Denial of Service),一旦后端接口存在合适的攻击面,攻击者就能轻松让整台服务器陷入瘫痪。。洪水攻击同时也是信息安全领域,最值得研究的课题之一。

一、什么是哈希洪水攻击

哈希洪水攻击(Hash-Flooding Attack)是一种拒绝服务攻击(Denial of Service),一旦后端接口存在合适的攻击面,攻击者就能轻松让整台服务器陷入瘫痪。。洪水攻击同时也是信息安全领域,最值得研究的课题之一。

哈希洪水攻击原理

我们知道,在常用的数据结构里,有些数据结构的“平均运行时间”和“最差运行时间”差得很多,比如哈希表。

如果想连续插入多个元素到哈希表中,假定这些元素的键很少出现相同的哈希值,平均运行时间较少,但如果频繁出现相同的哈希值,所需要的时间就会成倍的增加。

基于这一现象,有人突发奇想,既然“最差运行时间”和“平均运行时间”可以差距那么大,我们是不是可以找到一种方法,使该算法一直使用最差运行时间运行,进而占用大量服务器资源,以最小的代价促使服务器瘫痪?

还真可以实现!

2011年有人曾经做过一次实验,攻击一台基于Java(Tomcat)的服务器时,只需要6kb/s的流量,就可以瘫痪Intel i7处理器。成本如此之低令人发指。

如果你还不明白哈希洪水攻击,我们可以通过一个简单的例子,进一步了解。

假设A在经营一家菜鸟驿站,那时候的菜鸟驿站,还没有快件管理系统,A只能自己制定策略管理快件。

A很快想到了一个办法,以客户手机号的尾数作为判断条件,对快件进行分类整理。比如手机尾号为75的的快递,就放在7号货架的第5层上。

由于经营有方,A的菜鸟驿站的生意越来越好。

然而,快递不配送到家,引起了顾客B的不满,A和B经常为此闹得十分不愉快。B决定狠狠报复一下。

经过一段时间的观察,B发现菜鸟驿站的快递分类方法的规律。于是B联合自己的小伙伴,去申请了大量以7x结尾的手机号,并利用这些手机号在网上进行刷单,产生大量的空包裹。

很快,7号货架被这些“恶意”快递占满,那些以7x结尾的正常客户取快递的时间越来越长,顾客满意度直线下降,A所经营的菜鸟驿站经常遭到投诉,生意越来越差。

最终,因为人手不够,无法及时处理这些快递,A的菜鸟驿站最终关门歇业。

以上就是哈希洪水攻击的过程。

防御哈希洪水攻击

哈希洪水攻击实在过于简单粗暴,那有没有什么办法防御这类攻击呢?

有!

通过菜鸟驿站这个例子,我们很容易想到两种方法。

名列前茅种是限制参数个数,每个货架上能放多少包裹都是固定的,只有老包裹被取走,新包裹才能放上去。

第二种是想一套策略,禁止不明用户提交数据,你这个包括掂起来空空的,有可能是刷单的包裹,对不起,不能放在货架上。

理论上这些方法都可以有效防止哈希洪水攻击,但没办法从根本上杜绝这类攻击。

有人想到了一种绝妙的方法,既然B很容易就能猜到A管理快递的规则,那么我们对规则进行加密,不就可以防止哈希洪水攻击的发生吗?

只要我们每建一个哈希表,就随机生成一个新的秘密参数。这样一来,即使相同的内容,放在不同的表里也会产生完全不同的内存分配。

这一过程,黑客无法预测,也就无法发动攻击。

设计更加安全的带密钥的哈希算法,使黑客难以绕过,发动攻击。

延伸阅读:

二、哈希表概述

哈希表的哈希函数输入一个键,并向返回一个哈希表的索引。可能的键的集合很大,但是哈希函数值的集合只是表的大小。

哈希函数的其他用途包括密码系统、消息摘要系统、数字签名系统,为了使这些应用程序按预期工作,冲突的概率必须非常低,因此需要一个具有非常大的可能值集合的散列函数。

密码系统:给定用户密码,操作系统计算其散列,并将其与存储在文件中的该用户的散列进行比较。(不要让密码很容易被猜出散列到相同的值)。

消息摘要系统:给定重要消息,计算其散列,并将其与消息本身分开发布。希望检查消息有效性的读者也可以使用相同的算法计算其散列,并与发布的散列进行比较。(不要希望伪造消息很容易,仍然得到相同的散列)。

相关文章