`
desert3
  • 浏览: 2138121 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

哈希碰撞Hash Collision

 
阅读更多
转自:哈希碰撞相关

哈希碰撞Hash Collision DoS(Hash碰撞的拒绝式服务攻击),有恶意的人会通过这个安全弱点会让你的服务器运行巨慢无比。这个安全弱点利用了各语言的Hash算法的“非随机性”可以制造出N多hash运算前value不一样,但是hash运算后值一样数据,然后让你的Hash表成为一张单向链表,而导致你的整个网站或是程序的运行性能以级数下降(可以很轻松的让你的CPU升到100%)。

目前,这个问题出现于Java, JRuby, PHP, Python, Rubinius, Ruby这些语言中,主要:
  Java, 所有版本
  JRuby <= 1.6.5 (目前fix在 1.6.5.1)
  PHP <= 5.3.8, <= 5.4.0RC3 (目前fix在 5.3.9, 5.4.0RC4)
  Python, all versions
  Rubinius, all versions
  Ruby <= 1.8.7-p356 (目前fix在 1.8.7-p357, 1.9.x)
  Apache Geronimo, 所有版本
  Apache Tomcat <= 5.5.34, <= 6.0.34, <= 7.0.22 (目前fix在 5.5.35, 6.0.35, 7.0.23,增加maxParameterCount限制单个request的参数个数!默认值10000)
  Oracle Glassfish <= 3.1.1 (目前fix在mainline)
  Jetty, 所有版本
  Plone, 所有版本
  Rack <= 1.3.5, <= 1.2.4, <= 1.1.2 (目前fix 在 1.4.0, 1.3.6, 1.2.5, 1.1.3)
  V8 JavaScript Engine, 所有版本
  ASP.NET 没有打MS11-100补丁
注意,Perl没有这个问题,因为Perl在N年前就fix了这个问题了。关于这个列表的更新,请参看oCERT的2011-003报告,比较坑爹的是,这个问题早在2003 年就在论文《通过算法复杂性进行拒绝式服务攻击》中被报告了,但是好像没有引起注意,尤其是Java。

Hash碰撞攻击解释
  你可以会觉得这个问题没有什么大不了的,因为黑客是看不到hash算法的,如果你这么认为,那么你就错了,这说明对Web编程的了解还不足够底层。
  无论你用JSP,PHP,Python,Ruby来写后台网页的时候,在处理HTTP POST数据的时候,你的后台程序可以很容易地以访问表单字段名来访问表单值,就像下面这段程序一样:
  $usrname = $_POST [ 'username' ];
  $passwd = $_POST [ 'password' ];


  这是怎么实现的呢?这后面的东西就是Hash Map啊,所以,我可以给你后台提交一个有10K字段的表单,这些字段名都被我精心地设计过,他们全是Hash Collision ,于是你的Web Server或语言处理这个表单的时候,就会建造这个hash map,于是在每插入一个表单字段的时候,都会先遍历一遍你所有已插入的字段,于是你的服务器的CPU一下就100%了,你会觉得这10K没什么,那么我 就发很多个的请求,你的服务器一下就不行了。
  
举个例子,你可能更容易理解:
  如果你有n个值—— v1, v2, v3, … vn,把他们放到hash表中应该是足够散列的,这样性能才高:
  0 -> v2
  1 -> v4
  2 -> v1
  …
  …
  n -> v(x)

  但是,这个攻击可以让我造出N个值—— dos1, dos2, …., dosn,他们的hash key都是一样的(也就是Hash Collision),导致你的hash表成了下面这个样子:
  0 – > dos1 -> dos2 -> dos3 -> …. ->dosn
  1 -> null
  2 -> null
  …
  …
  n -> null

  于是,单向链接就这样出现了。这样一来,O(1)的搜索算法复杂度就成了O(n),而插入N个数据的算法复杂度就成了O(n^2),你想想这是什么样的性能。

Hash Collision DoS 详解:Application vulnerability due to Non Random Hash Functions
  首先,这些语言使用的Hash算法都是“非随机的”,如下所示,这个是Java和Oracle使用的Hash函数:
  static int hash( int h){
  h ^= (h >>> 20) ^ (h >>> 12);
  return h ^ (h >>> 7) ^ (h >>> 4);
  }
  所谓“非随机的” Hash算法,就可以猜。比如:
  1)在Java里, Aa和BB这两个字符串的hash code(或hash key) 是一样的,也就是Collision 。
  2)于是,我们就可以通过这两个种子生成更多的拥有同一个hash key的字符串。如:”AaAa”, “AaBB”, “BBAa”, “BBBB”。这是第一次迭代。其实就是一个排列组合,写个程序就搞定了。
  3)然后,我们可以用这4个长度的字符串,构造8个长度的字符串,如下所示:
  "AaAaAaAa", "AaAaBBBB", "AaAaAaBB", "AaAaBBAa",
  "BBBBAaAa", "BBBBBBBB", "BBBBAaBB", "BBBBBBAa",
  "AaBBAaAa", "AaBBBBBB", "AaBBAaBB", "AaBBBBAa",
  "BBAaAaAa", "BBAaBBBB", "BBAaAaBB", "BBAaBBAa",
  4)同理,我们就可以生成16个长度的,以及256个长度的字符串,总之,很容易生成N多的这样的值。
  在攻击时,我只需要把这些数据做成一个HTTP POST 表单,然后写一个无限循环的程序,不停地提交这个表单。你用你的浏览器就可以了。当然,如果做得更精妙一点的话,把你的这个表单做成一个跨站脚本,然后找 一些网站的跨站漏洞,放上去,于是能过SNS的力量就可以找到N多个用户来帮你从不同的IP来攻击某服务器

  防守
要防守这样的攻击,有下面几个招:
打补丁,把hash算法改了。
限制POST的参数个数,限制POST的请求长度。
限制POST请求的大小
最好还有防火墙检测异常的请求。
不过,对于更底层的或是其它形式的攻击,可能就有点麻烦了。
分享到:
评论

相关推荐

    2024年全球嵌入式配电盘行业总体规模、主要企业国内外市场占有率及排名.docx

    2024年全球嵌入式配电盘行业总体规模、主要企业国内外市场占有率及排名

    AccessControl-6.3-cp39-cp39-manylinux_2_17_aarch64.whl.zip

    AccessControl-6.3-cp39-cp39-manylinux_2_17_aarch64.whl.zip

    AccessControl-6.0-cp37-cp37m-manylinux_2_5_x86_64.whl.zip

    AccessControl-6.0-cp37-cp37m-manylinux_2_5_x86_64.whl.zip

    【Python-WEB自动化-06课-对验证码的处理】

    【Python-WEB自动化-06课-对验证码的处理】

    AccessControl-5.4-cp38-cp38-manylinux_2_17_aarch64.whl.zip

    AccessControl-5.4-cp38-cp38-manylinux_2_17_aarch64.whl.zip

    AX3_Mercadopago-0.2.4-py3-none-any.whl.zip

    AX3_Mercadopago-0.2.4-py3-none-any.whl.zip

    Acquisition-4.12-cp37-cp37m-manylinux_2_17_aarch64.whl.zip

    Acquisition-4.12-cp37-cp37m-manylinux_2_17_aarch64.whl.zip

    AXX_AIAPI-1.2.0-py3-none-any.whl.zip

    AXX_AIAPI-1.2.0-py3-none-any.whl.zip

    一款高效的数据库连接工具,支持多种数据库类型,简洁易用的界面,帮助用户轻松管理和操作数据库,提高工作效率

    一款高效的数据库连接工具,支持多种数据库类型,简洁易用的界面,帮助用户轻松管理和操作数据库,提高工作效率

    OPENCV目标跟踪车辆检测和跟踪绘制车辆的轨迹opencv

    OPENCV目标跟踪车辆检测和跟踪,绘制车辆的轨迹opencv提取方式是百度网盘分享地址

    4-3 TCP的连接管理.pka

    4-3 TCP的连接管理.pka

    ANSYS帮助文档Advanced Analysis Guide

    ANSYS帮助文档、ANSYS操作帮助、APDL教程、APDL操作指南

    AWSIoTDeviceDefenderAgentSDK-1.0.1-py2-none-any.whl.zip

    AWSIoTDeviceDefenderAgentSDK-1.0.1-py2-none-any.whl.zip

    基于S128单片机智能赛车的设计

    本文的目的是实现基于单片机智能赛车的设计,它是一种以规定的汽 车模型为载体,采用位微控制器为核心控制模块,通过自主设计电源电路,电 机驱动电路、道路光电传感器电路,硬件部分合理布局,同时编写配套程序,使其能够自 主识别路径的模型车。比赛时它能在规定赛道上,以最短时间跑完全程,且取得较好成绩, 论文整体包括:绪论,系统总体方案设计,车模机械部分设计改造,硬件电路部分设计制 作,软件部分设计,系统调试六章内容。 本文简单介绍了国内外智能车的发展概况,“飞思卡尔杯”智能车大赛起源以及我国 “飞思卡尔”杯全国智能车竞赛盛况。详细地阐述了该款智能赛车软硬件设计、制作、调试 的具体方法和过程。并对转向舵机,直流电机调速信号的控制做了一些研究。 主控模块,作为整个智能汽车的“大脑”,光电传感器、光电编码器 等传感器的信号,根据控制算法做出控制决策,驱动直流电机和伺服电机完成对智能汽车 的控制。传感器模块,是智能汽车的“眼睛”,可以通过一定的前瞻性,提前感知前方的 赛道信息,为智能汽车的“大脑”做出决策提供必要的依据和充足的反应时间。总之,电 源模块,为整个系统提供合适而又充足的能源。电机驱动模块,驱

    AX3_model_extras-1.2.0-py3-none-any.whl.zip

    AX3_model_extras-1.2.0-py3-none-any.whl.zip

    mysql大纲资料.txt

    mysql大纲资料.txt

    机器学习相关的ppt,制作精良

    机器学习相关的ppt,制作精良

    CC2530的定时器T1可以用于控制LED的亮灭

    CC2530的定时器T1可以用于控制LED的亮灭。以下是使用定时器T1的具体步骤: 初始化定时器T1:需要设置定时器的计数器初值和计数模式等参数。这些参数决定了定时器何时触发中断。 编写中断服务函数:在定时器T1的中断服务函数中,可以通过修改LED的状态来实现LED的亮灭控制。例如,每次中断发生时,可以切换LED的状态,从而实现闪烁效果。 设置定时器通道:定时器1有5个通道,对应于5对T1CCxH和T1CCxL寄存器(x从0到4)。如果要使用定时器的定时功能,通常会使用T1CC0H和T1CC0L寄存器来存放最大计数值的高8位和低8位。 开启定时器中断:在示例代码中,需要确保定时器中断被使能,这样当定时器达到预设的计数值时,就会触发中断服务程序执行。 通过以上步骤,可以利用CC2530的定时器T1来实现LED灯的闪烁或其他定时控制的功能。这种使用定时器的方法在嵌入式编程中非常常见,它不仅适用于LED控制,还可以用于多种需要定时操作的场景。

    Python开发环境搭建+PyCharm+下载安装配置教程+入门指南

    想要轻松搭建Python开发环境,却苦于不知从何入手?这款PyCharm下载安装配置使用教程学习资料文档是你的不二之选!本资料以通俗易懂的语言,带你一步步掌握PyCharm的下载、安装、配置及基本使用,让你快速迈出Python编程的第一步。 本资料适用于对Python编程感兴趣的人群,尤其适合编程初学者、计算机专业学生及软件开发人员。使用场景包括Python学习、项目开发、编程教学等,旨在帮助读者快速掌握PyCharm这一强大的Python开发工具。 通过学习本资料,你将掌握以下内容: 1. PyCharm的下载和安装步骤 2. PyCharm的基本配置方法 3. 在PyCharm中创建和管理Python项目 4. 使用PyCharm进行代码编写、调试和运行 5. PyCharm的常用功能和插件介绍 本资料内容全面,结构清晰,从PyCharm的下载到安装、配置,再到项目创建和代码编写,手把手教你搭建自己的Python开发环境。此外,我们还提供了丰富的实例和操作截图,让你在实际操作中轻松掌握所学知识。 现在就下载这款学习资料文档,开启你的Pytython编程之旅吧。

    QAbstractButton部分子类图

    QAbstractButton的子类有: 1. QPushButton: 提供了一个可以点击的按钮。 2. QRadioButton: 提供了一个单选按钮。 3. QCheckBox: 提供了一个多选按钮。 4. QToolButton: 提供了一个更小的按钮,通常用于工具栏上。 5. QCommandLinkButton: 提供了一个带有说明文本的按钮。 6. QDialogButtonBox:通常用于创建对话框,并提供了一组预定义的按钮,如Ok、Cancel、Apply等

Global site tag (gtag.js) - Google Analytics