Hash Collision DoS

Hash Collision DoS:由于java中的hash算法是非随机性的,会存在hash碰撞的问题。这样就可以利用这一弱点,来构造若干个value相同,但是key不相同的数据,这个时候hashMap就会退化为一个单向链表,使得在查询时计算复杂度由O(n)变为O(n*n),CPU负担加重,性能以指数级急剧下降。

影响:
一些应用服务器,比如tomcat在接收请求参数parameters时,是以一个hashMap来存储这些parameters的,Hash Collision DoS
这样就可以利用这一弱点进行攻击。
1.构造攻击数据:
字符串“Aa”和“BB”在java中的hashCode是一样的,就可以以这两个值为种子,构造若干条攻击数据,如:
"AAAA", "AABb", "BbAA", "BbBb"
或者
"AaAaAaAa", "AaAaBBBB", "AaAaAaBB", "AaAaBBAa","BBBBAaAa", "BBBBBBBB", "BBBBAaBB", "BBBBBBAa",
2.构造一个post请求,参数像这样的:AaAa=&AaBB=&BBAa=&BBBB=......,使得存放参数的hashMap成为一个庞大的单向链表
3.构造循环体,创建N个线程不断的提交请求


防御方法:
1.限制post的parameter参数数量。Tomcat6.035+的默认值是10,000
2.限制post请求的大小。比如将tomcat默认的2m减小为200kb
3.使用防火墙阻挡可疑的循环请求。

http://stackoverflow.com/questions/8669946/application-vulnerability-due-to-non-random-hash-functions

猜你喜欢

转载自firehoo.iteye.com/blog/1629793
DOS
今日推荐