Total Pageviews

Friday, 18 November 2011

WEB服务器被CC攻击的症状及CC攻击的防护

CC攻击是DDoS(分布式拒绝服务)的一种,相比其它的DDoS攻击,CC似乎更有技术含量一些。这种攻击你见不到虚假IP,见不到特别大的异常流 量,但 造成服务器无法进行正常连接,一条ADSL的普通用户足以挂掉一台高性能的Web服务器。由此可见其危害性,称其为“Web杀手”毫不为过。最让站长们忧 虑的是这种攻击技术含量不是很高,利用工具和一些IP代理,一个初、中级的电脑水平的用户就能够实施DDoS 攻击。

攻击症状

CC攻击有一定的隐蔽性,那如何确定服务器正在遭受或者曾经遭受CC攻击呢?我们可以通过以下三个方法来确定。

(1).命令行法

一般遭受CC攻击时,Web服务器会出现80端口对外关闭的现象, 因为这个端口已经被大量的垃圾数据堵塞了正常的连接被中止了。我们可以通过在命令行下输入命令netstat -an来查看,如果看到类似如下有大量显示雷同的连接记录基本就可以被CC攻击了:

……

TCP 192.168.1.3:80 192.168.1.6:2205 SYN_RECEIVED 4

TCP 192.168.1.3:80 192.168.1.6: 2205 SYN_RECEIVED 4

TCP 192.168.1.3:80 192.168.1.6: 2205 SYN_RECEIVED 4

TCP 192.168.1.3:80 192.168.1.6: 2205 SYN_RECEIVED 4

TCP 192.168.1.3:80 192.168.1.6: 2205 SYN_RECEIVED 4 ……

其中“192.168.1.6”就是被用来代理攻击的主机的IP,“SYN_RECEIVED”是TCP连接状态标志,意思是“正在处于连接的 初始同 步状态 ”,表明无法建立握手应答处于等待状态。这就是攻击的特征,一般情况下这样的记录一般都会有很多条,表示来自不同的代理IP的攻击。

(2).批处理法

上述方法需要手工输入命令且如果Web服务器IP连接太多看起来比较费劲,我们可以建立一个批处理文件,通过该脚本代码确定是否存在CC攻击。打开记事本键入如下代码保存为CC.bat:

@echo off

time /t >>log.log

netstat -n -p tcp |find ":80">>Log.log

notepad log.log

exit

上面的脚本的含义是筛选出当前所有的到80端口的连接。当我们感觉服务器异常是就可以双击运行该批处理文件,然后在打开的log.log文件中查看所有的连接。如果同一个IP有比较多的到服务器的连接,那就基本可以确定该IP正在对服务器进行CC攻击。

(3).查看系统日志

上面的两种方法有个弊端,只可以查看当前的CC攻击,对于确定Web服务器之前是否遭受CC攻击就无能为力了,此时我们可以通过Web日志来 查,因为 Web日志忠实地记录了所有IP访问Web资源的情况。通过查看日志我们可以Web服务器之前是否遭受CC攻击,并确定攻击者的IP然后采取进一步的措 施。

Web日志一般在C:\WINDOWS\system32\LogFiles\HTTPERR目录下,该目录下用类似httperr1.log 的日志 文件,这个文件就是记录Web访问错误的记录。管理员可以依据日志时间属性选择相应的日志打开进行分析是否Web被CC攻击了。默认情况下,Web日志记 录的项并不是很多,我们可以通过IIS进行设置,让Web日志记录更多的项以便进行安全分析。其操作步骤是:

“开始→管理工具”打开“Internet信息服务器”,展开左侧的项定位到到相应的Web站点,然后右键点击选择“属性”打开站点属性窗口, 在“网 站”选项卡下点击“属性”按钮,在“日志记录属性”窗口的“高级”选项卡下可以勾选相应的“扩展属性”,以便让Web日志进行记录。比如其中的“发送的字 节数”、“接收的字节数”、“所用时间”这三项默认是没有选中的,但在记录判断CC攻击中是非常有用的,可以勾选。另外,如果你对安全的要求比较高,可以 在“常规”选项卡下对“新日志计划”进行设置,让其“每小时”或者“每一天”进行记录。为了便于日后进行分析时好确定时间可以勾选“文件命名和创建使用当 地时间”。

CC攻击防御策略

确定Web服务器正在或者曾经遭受CC攻击,那如何进行有效的防范呢?

(1).取消域名绑定

一般cc攻击都是针对网站的域名进行攻击,比如我们的网站域名是“www.abc.com”,那么攻击者就在攻击工具中设定攻击对象为该域名然后实施攻击。

对于这样的攻击我们的措施是在IIS上取消这个域名的绑定,让CC攻击失去目标。具体操作步骤是:打开“IIS管理器”定位到具体站点右键“属 性”打 开该站点的属性面板,点击IP地址右侧的“高级”按钮,选择该域名项进行编辑,将“主机头值”删除或者改为其它的值(域名)。

经过模拟测试,取消域名绑定后Web服务器的CPU马上恢复正常状态,通过IP进行访问连接一切正常。但是不足之处也很明显,取消或者更改域名 对于别 人的访问带来了不变,另外,对于针对IP的CC攻击它是无效的,就算更换域名攻击者发现之后,他也会对新域名实施攻击。

(2).域名欺骗解析

如果发现针对域名的CC攻击,我们可以把被攻击的域名解析到127.0.0.1这个地址上。我们知道127.0.0.1是本地回环IP是用来进 行网络 测试的,如果把被攻击的域名解析到这个IP上,就可以实现攻击者自己攻击自己的目的,这样他再多的肉鸡或者代理也会宕机,让其自作自受。

另外,当我们的Web服务器遭受CC攻击时把被攻击的域名解析到国家有权威的政府网站或者是网警的网站,让其网警来收拾他们。

现在一般的Web站点都是利用类似“新网”这样的服务商提供的动态域名解析服务,大家可以登录进去之后进行设置。

(3).更改Web端口

一般情况下Web服务器通过80端口对外提供服务,因此攻击者实施攻击就以默认的80端口进行攻击,所以,我们可以修改Web端口达到防CC攻 击的目 的。运行IIS管理器,定位到相应站点,打开站点“属性”面板,在“网站标识”下有个TCP端口默认为80,我们修改为其他的端口就可以了。

(4).IIS屏蔽IP

我们通过命令或在查看日志发现了CC攻击的源IP,就可以在IIS中设置屏蔽该IP对Web站点的访问,从而达到防范IIS攻击的目的。在相应 站点的 “属性”面板中,点击“目录安全性”选项卡,点击“IP地址和域名现在”下的“编辑”按钮打开设置对话框。在此窗口中我们可以设置“授权访问”也就是“白 名单”,也可以设置“拒绝访问”即“黑名单”。比如我们可以将攻击者的IP添加到“拒绝访问”列表中,就屏蔽了该IP对于Web的访问。

(5).组策略封闭IP段

打开本地安全设置,点“IP安全策略,在本地机器”——创建IP安全策略----下一步---- 名称随便写,如输入阻止,然后一直点下一步,出现提示点是,一直到完成, 这个时候就创建了一个名为“阻止”的策略了

下面点“IP安全策略,在本地机器”——管理IP筛选器表和筛选器操作----点添加----名称添75.156.25(为了识别最好填写对应 的IP 段) ----点添加----下一步----源地址选择一个特定的IP子网,IP输入75.156.25.0 子网掩码改为255.255.255.0----下一步---- 目标地址选择我的IP地址----下一步----协议类型为任意----下一步----完成 全部关闭

下面点我们开始建立的名为“阻止”的策略,点属性----填加----下一步----下一步网络类型选择所有网络连接----下一步----出 现提示 点是 ----到IP筛选列表,点中我们刚才创建的名为75.156.25的选项----下一步----选择阻止----下一步到完成、关闭

最后点“阻止”这个策略,右键,指派,到这里为止我们就已经阻止了75.156.25开头的网段了。
------------------------------------------------------------------------

CC攻击防护的asp代码,防止CC攻击的方法



碰到CC攻击,请把下面的代码放做成conn.asp,原理大家可以自己研究 ..

<% !

DimfsoObject ..

DimtsObject 。

dimfile 版权申明:本站文章均来自网络,如有侵权,请联系028-86262244-215,我们收到后立即删除,谢谢!

ifRequest.ServerVariables("HTTP_X_FORWARDED_FOR")=""then  .

response.write"系统维护中" .

response.end ..

endif 特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系.

SetfsoObject=Server.CreateObject("scripting.FileSystemObject") 版权申明:本站文章均来自网络,如有侵权,请联系028-86262244-215,我们收到后立即删除,谢谢!

file=server.mappath("CCLog.txt") .

ifnotfsoObject.fileexists(file)then 。

fsoObject.createtextfilefile,true,false .

endif 版权申明:本站文章均来自网络,如有侵权,请联系028-86262244-215,我们收到后立即删除,谢谢!

settsObject=fsoObject.OpenTextFile(file,8) . 

tsObject.WritelineRequest.ServerVariables("HTTP_X_FORWARDED_FOR")

&"["&Request.ServerVariables("REMOTE_ADDR")&"]"&now()
SetfsoObject=Nothing 。

SettsObject=Nothing .

response.write"系统维护中." .

%> ..

查了网上资料,资料上说:"并不是每个代理服务器都能用 Request.ServerVariables("HTTP_X_FORWARDED_FOR")来读取客户端的真实IP,有些用此方法读取到的仍然是 代理服务器的IP。"看来还是有可能有办法突破的。不过话又说回来了,就算你能读到真实的客户端IP,但是真实的客户端如果是用的肉鸡并不是最根源的攻击 者电脑IP呢?又迷糊了吧。 .

还有一种方法是这样,如果判断出是用代理服务器访问的就把它禁止访问?这未尝不是一种笨方法。不过要在网站上说明一下代理不能访问。 ...

站长安全网提醒:以上代码未经测试,推荐有一定编程基础的朋友使用,使用前认真阅读代码内容。
----------------------

防御CC攻击


什么是CC攻击

CC攻击,英文Challenge Collapsar,译为“挑战黑洞”,是一种以服务系统性能薄弱环节为目标的分布式拒绝服务(DDoS)攻击。传统的DDoS攻击一般利用受害者服务器底层网络技术的缺陷发动攻击,攻击者流量消耗比较小。随着技术的进步,已经基本实现有效防御。CC攻击则和传统的DDoS攻击方式不同,它针对的是业务系统应用层的薄弱环节,攻击者需要消耗较多的网络带宽才能发动,但由于根据业务特点发动攻击,目前没有通用的有效的防御手段,所以攻击成功率比较高。
服务器业务中的性能薄弱环节,未必是软件实施的缺陷。比如常见的CMS网站,首页在Cache等技术下,承载上万RPS(每秒请求)不会有任何问题,但是CMS的搜索功能,也许只能承载几百RPS。考虑到平时网站用户量不大,实际首页压力只有几百RPS,而搜索只有几RPS的实际情况,网站完全能够正常运行。此时如果黑客断定搜索是性能薄弱环节,针对搜索功能发起CC攻击,通过遍布全国的几百个代理服务器,向网站发送搜索请求,很快网站就会不堪重负,被迫下线了。
网站中需要处理复杂事务的接口,一般都有可能会成为CC攻击的目标,包括搜索、聊天、短信发送、验证码生成等等。

侦测CC攻击

防御CC攻击较之防御传统的DDoS攻击,一大难点是不易侦测攻击的存在。从单个请求来看,CC攻击者和普通用户几乎完全相同,一般只能从宏观层面,比如一段时间的网站流量统计中才能发现自己被攻击了。找到方法甄别来访者是普通用户还是攻击者,是解决CC攻击的关键。

检查代理服务器

一般用户都是直接访问互联网,而大多数CC攻击采用代理服务器发起,检测来访用户是否使用代理服务器是一个判别的方法。公共HTTP代理一般会在请求中加入X-Forwarded-ForVia请求标头,可以以此为据侦测用户是否使用了代理服务器。
不过近年出现了不少高匿名的代理服务器,完全不透传任何信息,这个方法就无能为力了。

检查IP的并发连接数

根据HTTP协议的规定,用户代理对每个域应该允许最多2个并发连接,这一标准在06年以来有所提高,每个域允许6个并发连接。正常情况下,每个连接到服务器的IP处于ESTABLISHED状态的连接数应该不超过n*6个,n是该服务器同时对外服务的域名数量。如果来自同一个IP存在大量的并发连接,则有可能是攻击者。我们可以使用netstat命令实时地查看TCP连接的情况,配合脚本可以统计出当前各个客户端IP的并发连接数。
当然这个方法并不绝对,有的网吧几十台机器共用一个IP作为出口,那么这个IP的并发连接数量就会大得多。还有一些小的ISP可能只有少量的公网IP,它们在建设小区宽带的时候甚至会让一幢楼的用户共用一个公网IP。

高频请求检测

发动CC攻击一般都用脚本让机器自动发起请求,如果发现某个IP以非常高的频率发起HTTP请求,这个IP就有可能是攻击者。收集和处理高频请求的数据,需要占用一些服务器的CPU和内存资源。判定是否高频,一般以正常用户的页面平均停留时间乘以一个系数来计算需要根据实际情况不断调整。
这一方法和前面的并发连接数法有着相同的问题,如果用户存在共用出口公网IP的情况,就可能误判。另一个问题是,如果攻击者采用游击战术,每个代理只发起一波请求,然后弃之不用,这一方法就不会有实际效果,因为发现攻击者之后,攻击者已经换地方了。

重复IP检测

对于低留存率的网站,可以计算出连续若干天的来访者IP交集,去掉搜索引擎的和白名单上的IP之后,可以认为这些IP是攻击者。
这一方法的局限性在于需要攻击持续一段时间,并且攻击者只使用少数固定的代理服务器。如果攻击者打游击,这一方法也不会有效。另外,高留存率的网站可能不适用此方法,因为本来用户就会来了又来。

浏览器特性检测

有的CC攻击发起者只是为了对服务器的复杂逻辑发起请求,让服务器负担加大。有的攻击者会放弃使用全功能的浏览器,而改用一般的Python脚本发起。如果攻击者使用的不是完整的浏览器,我们就可以下发JS脚本运行,并用Feature Hack的方法确认用户的浏览器和它在UA中声称的自己的身份是否一致,进而推断是否为攻击者。

反向扫描来访IP的端口

一般的家用宽带用户不会开启大量非常用端口,反向扫描来访者IP开启的端口情况,如果发现对方在Listen许多非常用端口,则说明对方很可能是一台代理服务器或者被黑客操控的肉机。
反向扫描的方法耗时比较长,对一波流的攻击者效果不显著。

业务保护

如果我们无法有效辨别一个来访请求是CC攻击还是普通用户,也可以从业务角度入手,保护复杂业务正常进行。CC攻击是由机器自动完成,如果被攻击的功能能够识别人类用户,虽然无法降低带宽成本,但是可以有效减少业务损失。

加验证码

在关键功能上加验证码是一种直接的方法,可以参考12306的登录功能,使用验证码保护登录接口不会被机器自动提交攻击。

对抗非浏览器

如果攻击者使用的客户端不是浏览器,无法运行网页中的JavaScript程序,可以在页面中加入JavaScript验证程序,让一般的网页抓取工具失效。Wordpress的反垃圾留言就有类似的实现方法,它使用随机生成的JS和JS注释拼装出一个Token和留言一起提交,在服务器端检查Token是否合法,因为Token是混在大量JS脚本中的,一般的正则工具很难把Token分析出来,从而实现了无需输入验证码的简单人机区分。

鼠标行为探测

如果攻击者使用的是全功能浏览器,那么前面的方法不会有效,但依然有办法侦测对方是人类还是机器。鼠标移动轨迹就是一个方法。人们访问网页的时候,鼠标一般不会以固定的方式移动。对于那些不希望验证码降低用户体验的网页,可以用鼠标移动监测的方式判断是否人类用户。这一方法可以和滚动条状态等方法一起使用,对于平板电脑用户,还可以加入触屏行为监测。
当然,如果被攻击者发现了,攻击者也能写出模拟鼠标随机移动的程序,此时这一方法的效果就会打折扣了。

延迟业务自动开启

我们被攻击的地方是浏览器自动弹出的客服聊天窗口,考虑到自动机攻击时页面开启时间比较短,而正常用户页面开启时间比较长,可以延迟自动聊天窗口的弹出,绕过攻击。

按地区过滤非主流用户

这个方法是结合具体业务而设计的。由于被攻击的业务集中在临近的几个省,可以利用IP地理位置库设置规则,只放行主要业务地区的线上来访请求,其它地区则转向线下电话咨询.
---------------------------------------

收集处理DDOS、CC攻击各类脚本,包括NGINX日志中的CC攻击IP处理。 

cc_iptables

收集处理DDOS、CC攻击各类脚本,包括NGINX日志中的CC攻击IP处理。
image
git@git.oschina.net:ppabc/cc_iptables.git
git@github.com:ppabc/cc_iptables.git