+86 13541016684Mon. - Fri. 10:00-22:00

网站攻击cc防御

网站攻击cc防御

网站攻击cc防御

最近一客户所在的网站在某一个晚上出现大范围的攻击,据事后监控统计而知,这次用了攻击方用了大约10万并发持续攻击网站,一看网站应用服务器的负载很高这里将接下来开始分析和解决问题的方法给大家整理一下。

一、 攻击现象描述

晚上6点多开始接到客户电话,网站访问很慢,第一时间想到看业务监控,通过监控发现网站应用服务器网卡流量普遍蹿升到100M以上,其中几台服务器网卡流量更是达到了300Mbps。随之带来的就是访问速度逐渐变慢,网络带宽数次被用完。

二、 攻击分析

1、 既然是网卡流出100M以上,那么一定有不正常的请求地址过来,接着服务器才会响应并发送到客户端。由此判断是请求的地址有异常

0901280

应用服务器受到攻击时的网卡流量图

0901281

网站应用服务器受到攻击时的负载现象
2、 分析web日志,可以发现很多IP同时在一秒钟对的多个地址发送GET请求,且返回的地址的流量在200k-300k之间。试想一下,返回一个php地址,怎么会有200多k的流量,那么就一定是恶意的请求。看下面url中的 232347,这个232347,就是返回给客户端的流量。

123.292.192.22 - - [07/Mar/2015:14:24:23 +0800] "GET /forum-116-20.html HTTP/1.0" "200" 232347 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)" "-"
123.292.192.22 - - [07/Mar/2015:14:24:23 +0800] "GET /forum-1402-1.html HTTP/1.0" "200" 253872 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)" "-"
123.292.192.22 - - [07/Mar/2015:14:24:23 +0800] "GET /forum-63-1.html HTTP/1.0" "200" 118163 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)" "-"
123.292.192.22 - - [07/Mar/2015:14:24:23 +0800] "GET /forum-1342-1.html HTTP/1.0" "200" 235327 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)" "-"
123.292.192.22 - - [07/Mar/2015:14:24:23 +0800] "GET /forum.php?mod=forumdisplay&fid=58 HTTP/1.0" "200" 283377 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)" "-"

3、攻击主要针对php应用,php并发跟nginx差了好几个数量级。这次攻击,平均每台php 每秒最高承受200个并发,绝大部分的针对列表页,直接对数据库造成影响。

四、解决方案

1、防火墙封IP(不推荐)

用封IP的方式来阻止攻击源IP,是一种方法,起初,我是采用了这种方法,但是这样封IP,还需要到日志中去搜索。比较繁琐,而且效果不明现。

2、Nginx被动防御(推荐)

还记得日志中的相同的user-agent的没有,nginx这次利用了user-agent来防御攻击。

在的nginx的配置文档的上面加入了

if ( $http_user_agent ~* "Mozilla/4.0\ \(compatible;\ MSIE\ 6.0;\ Windows\ NT\ 5.0\;\ .NET\ CLR\ 1.1.4322\)" )
 {
     return 400;
 }

重启nginx后,nginx 在日志中检测到该类user-agent时,就会返回400 http 状态码,既请求失败。这样设置后,各应用服务器负载恢复到正常,网卡流量正常。

218.5.73.245 - - [07/Mar/2015:10:53:12 +0800] "GET /forum-222-1.html HTTP/1.0" 400 0 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)"
218.5.73.245 - - [07/Mar/2015:10:53:12 +0800] "GET /forum-222-1.html HTTP/1.0" 400 0 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)"
218.5.73.245 - - [07/Mar/2015:10:53:12 +0800] "GET /forum-222-1.html HTTP/1.0" 400 0 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)"

Nginx 处理攻击ip的结果

五、总结

1、本次nginx 在防小型ddos或者cc有自己的特色:处理请求高效,消耗资源极低。

缺点:需要分析日志,找到规律,比如:user-agent等等。

2、疑问?

Q:有些同学要问了,这样屏蔽该类user-agent,造成误杀率有多大?

A:cc攻击者攻击时,都会有自己特殊的user-agent,屏蔽该类user-agent,不会造成额外的误杀。这是通过观察屏蔽日志的得出来的结论,服务器用上该类策略后,从来木有一个网友因为这事找过。

Q:如果cc攻击软件伪装成正常的user-agent,这样的造成误杀多大?

A:1):并不是所有的攻击者都具备修改user-agent的,相当部分的攻击者用的都是购买的攻击软件,如果要修改,则要付出金 钱的代价。这不是攻击者想要的结果。2):就算是伪装成了正常的user-agent,也会有自己的特点,可以从其共有特征来分析,比如来源地址是否相同 等等,这里就可以作为共同点来设置策略。在做策略时应注意观察nginx屏蔽日志中,是否其他的正常的请求也被屏蔽了?

124.133.235.202 - - [08/Mar/2015:10:33:37 +0800] "GET / HTTP/1.1" 302 163 "/test/nz/zong.jsp?group=2" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" -
124.133.235.202 - - [08/Mar/2015:10:33:37 +0800] "GET / HTTP/1.1" 302 163 "/test/nz/zong.jsp?group=2" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" -
124.133.235.202 - - [08/Mar/2015:10:33:37 +0800] "GET / HTTP/1.1" 302 163 "/test/nz/zong.jsp?group=2" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" -
124.133.235.202 - - [08/Mar/2015:10:33:37 +0800] "GET / HTTP/1.1" 302 163 "/test/nz/zong.jsp?group=2" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" -
124.133.235.202 - - [08/Mar/2015:10:33:37 +0800] "GET / HTTP/1.1" 302 163 "/test/nz/zong.jsp?group=2" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" -
124.133.235.202 - - [08/Mar/2015:10:33:37 +0800] "GET / HTTP/1.1" 302 163 "/test/nz/zong.jsp?group=2" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" -
124.133.235.202 - - [08/Mar/2015:10:33:37 +0800] "GET / HTTP/1.1" 302 163 "/test/nz/zong.jsp?group=2" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" -
124.133.235.202 - - [08/Mar/2015:10:33:37 +0800] "GET / HTTP/1.1" 302 163 "/test/nz/zong.jsp?group=2" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" -

例如上面的日志,这次攻击者将user-agent伪装成正常的,再用user-agent做关键字,就会有部分误杀了。所以针对此类攻击,可以以来源地址作为关键字,nginx防护策略可以这么做,

if ($http__referer ~ * "/test/nz/zong.jsp?group=2")
{
  return 400;
}

这样就不会有误杀了

3、经验教训

教训:去年的一次CC攻击,跟这次攻击有异曲同工之处,都是打的是php;那时我们在启用了黑洞防护墙后效果并不明显。