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"
或者
|
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