随着网络技术的迅猛发展和普及,网络已改变每一个人的生活和工作方式,网络安全问题也越来越严重。
近几年,网络入侵的频率不断增加,危害性日趋严重,其中分布式拒绝服务攻击(DDoS)的危害最大,DDoS攻击能在短时间内使得被攻击的网络主机彻底丧失正常服务的能力。

  • CC攻击(ChallengeCoHapsar,挑战黑洞)是DDoS攻击的一种常见类型,攻击者控制某些主机不停地发送大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃。
  • CC攻击主要针对WEB服务器发送大量并发请求,重点针对应用程序中比较消耗资源的功能,占用大量系统资源。
  • CC攻击的攻击技术含量和成本很低, 只要有上百个IP,每个IP弄几个进程,就可以有上千个并发请求,很容易让被攻击目标服务器资源耗尽,从而造成网站宕机。

    CC攻击的原理:

  • CC攻击的原理就是攻击者控制某些主机不停地发大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃。   
  • CC主要是用来消耗服务器资源的,每个人都有这样的体验:当一个网页访问的人数特别多的时候,打开网页就慢了,CC就是模拟多个用户(多少线程就是多少用户)不停地进行访问那些需要大量数据操作(就是需要大量CPU时间)的页面,造成服务器资源的浪费,CPU长时间处于100%,永远都有处理不完的连接直至就网络拥塞,正常的访问被中止。

    CC攻击的种类:

直接攻击代理攻击僵尸网络攻击单主机虚拟多IP地址攻击

  • 直接攻击:主要针对有重要缺陷的 WEB 应用程序,一般说来是程序写的有问题的时候才会出现这种情况,比较少见。
  • 僵尸网络攻击:类似于 DDOS 攻击了,从 WEB 应用程序层面上已经无法防御。
  • 代理攻击:是CC 攻击者一般会操作一批代理服务器,比方说 100 个代理,然后每个代理同时发出 10 个请求,这样 WEB 服务器同时收到 1000 个并发请求的,并且在发出请求后,立刻断掉与代理的连接,避免代理返回的数据将本身的带宽堵死,而不能发动再次请求,这时 WEB 服务器会将响应这些请求的进程进行队列,数据库服务器也同样如此,这样一来,正常请求将会被排在很后被处理,就象本来你去食堂吃饭时,一般只有不到十个人在排队,今天前面却插了一千个人,那么轮到你的机会就很小很小了,这时就出现页面打开极其缓慢或者白屏
  • 单主机虚拟多IP地址攻击:攻击者利用一台主机虚构出多个IP地址向目标服务器指定页面发送大量请求,当服务器来不及处理这些访问请求时,将导致该页面不能响应,正常的访问也将被拒绝。

    CC攻击与DDOS的区别:

什么是DDoS攻击?

  • DDoS攻击就是分布式的拒绝服务攻击,DDoS攻击手段是在传统的DoS攻击基础之上产生的一类攻击方式。
  • 单一的DoS攻击一般是采用一对一方式的,随着计算机与网络技术的发展,DoS攻击的困难程度加大了。
  • 于是就产生了DDoS攻击,它的原理就很简单:计算机与网络的处理能力加大了10倍,用一台攻击机来攻击不再能起作用,那么DDoS就是利用更多的傀儡机来发起进攻,以比从前更大的规模来进攻受害者。

在这里补充两点

  • 第一就是DDOS攻击不仅能攻击计算机,还能攻击路由器,因为路由器是一台特殊类型的计算机;
  • 第二是网速决定攻击的好和快,比如说,如果你一个被限制网速的环境下,它们的攻击效果不是很明显,但是快的网速相比之下更加具有攻击效果。

DDOS与CC两者的区别

  • DDoS是针对IP的攻击,而CC攻击的是服务器资源。

    如何确定被攻击:

    CC攻击有一定的隐蔽性,那如何确定服务器正在遭受或者曾经遭受CC攻击呢?
    可以通过以下三个方法来确定。
  1. 命令行法
  • 一般遭受CC攻击时,Web服务器会出现80端口对外关闭的现象, 因为这个端口已经被大量的垃圾数据堵塞了正常的连接被中止了。
  • 可以通过在命令行下输入命令netstat -an来查看, “SYN_RECEIVED”是TCP连接状态标志,意思是“正在处于连接的初始同步状态 ”,表明无法建立握手应答处于等待状态。
  • 这就是攻击的特征,一般情况下这样的记录一般都会有很多条,表示来自不同的代理IP的攻击。
  1. 批处理法
  • 上述方法需要手工输入命令且如果Web服务器IP连接太多看起来比较费劲,可以建立一个批处理文件,通过该脚本代码确定是否存在CC攻击。
  • 脚本筛选出当前所有的到80端口的连接。
    当感觉服务器异常时就可以双击运行该批处理文件,然后在打开的log.log文件中查看所有的连接。
    如果同一个IP有比较多的到服务器的连接,那就基本可以确定该IP正在对服务器进行CC攻击。
  1. 查看系统日志
  • Web日志一般在C:\WINDOWS\system32\LogFiles\HTTPERR目录下,该目录下用类似httperr1.log的日志文件,这个文件就是记录Web访问错误的记录。

  • 管理员可以依据日志时间属性选择相应的日志打开进行分析是否Web被CC攻击了。

  • 默认情况下,Web日志记录的项并不是很多,可以通过ⅡS进行设置,让Web日志记录更多的项以便进行安全分析。

  • 其操作步骤是:“开始→管理工具”打开“Internet信息服务器”,展开左侧的项定位到到相应的Web站点,然后右键点击选择“属性”打开站点属性窗口,在“网站”选项卡下点击“属性”按钮,在“日志记录属性”窗口的“高级”选项卡下可以勾选相应的“扩展属性”,以便让Web日志进行记录。

  • 比如其中的“发送的字节数”、“接收的字节数”、“所用时间”这三项默认是没有选中的,但在记录判断CC攻击中是非常有用的,可以勾选。

  • 另外,如果你对安全的要求比较高,可以在“常规”选项卡下对“新日志计划”进行设置,让其“每小时”或者“每一天”进行记录。

  • 为了便于日后进行分析时好确定时间可以勾选“文件命名和创建使用当地时间”。

    CC攻击的变异品种“慢速攻击”:

    什么是慢速攻击

  • 一说起慢速攻击,就要谈谈它的成名历史了。HTTP Post慢速DoS攻击第一次在技术社区被正式披露是2012年的OWASP大会上,由Wong Onn Chee 和 Tom Brennan共同演示了使用这一技术攻击的威力。

  • 这个攻击的基本原理如下:对任何一个开放了HTTP访问的服务器HTTP服务器,先建立了一个连接,指定一个比较大的content-length,然后以非常低的速度发包,比如1-10s发一个字节,然后维持住这个连接不断开。如果客户端持续建立这样的连接,那么服务器上可用的连接将一点一点被占满,从而导致拒绝服务。

  • 和CC攻击一样,只要Web服务器开放了Web服务,那么它就可以是一个靶子,HTTP协议在接收到request之前是不对请求内容作校验的,所以即使你的Web应用没有可用的form表单,这个攻击一样有效。

  • 在客户端以单线程方式建立较大数量的无用连接,并保持持续发包的代价非常的低廉。实际试验中一台普通PC可以建立的连接在3000个以上。

  • 这对一台普通的Web server,将是致命的打击。更不用说结合肉鸡群做分布式DoS了。

  • 鉴于此攻击简单的利用程度、拒绝服务的后果、带有逃逸特性的攻击方式,这类攻击一炮而红,成为众多攻击者的研究和利用对象。

    CC攻击防御方法:

  1. 选择可靠的高防服务器,提升服务器硬件和网络带宽资源:高性能服务器硬件能力和充足的网络带宽资源可以提升系统对CC攻击的承载能力

  2. 网站页面静态化: 网站页面静态化可以较大程度的减少系统资源消耗,从而达到提高抗系统抗攻击能力;

  3. IP屏蔽限制:辨别攻击者的源IP,针对CC攻击的源IP,可以在IIS中设置屏蔽该IP,限制其访问,达到防范IIS攻击的目的;

  4. 部署高防CDN:接入高防CDN,隐藏服务器源IP,自动识别攻击流量,清洗后将正常访客流量回源到源服务器IP上,保障业务安全;

  5. 关闭不需要的端口和服务。

  6. 应对当前系统了如指掌,如系统最高负载、最高数据处理能力,以及系统防御体系的强项与弱点

  7. 历史日志的保存、分析

  8. 对当前系统进行严格安全审计

  9. 上报公安相关部分,努力追溯攻击者

  10. 网站,能静态,就一定不要动态,可采取定时从主数据库生成静态页面的方式,对需要访问主数据库的服务使用验证机制。

  11. 防御者应能从全局的角度,迅速及时地发现系统正在处于什么程度的攻击、何种攻击,在平时,应该建立起攻击应急策略,规范化操作,免得在急中犯下低级错误
    对历史日志的分析这时将会非常重要,数据可视化与统计学的方法将会很有益处:

  12. 分析每个页面的平均访问频率

  13. 对访问频率异常的页面进行详细分析 分析得到ip-页面访问频率

  14. 得到对访问异常页面的访问异常ip列表

  15. 对日志分析得到忠实用户IP白名单

  16. 一般一个页面会关联多个资源,一次对于这样的页面访问往往会同时增加多个资源的访问数,而攻击程序一般不会加载这些它不感兴趣的资源,所以,这也是一个非常好的分析突破点

防御思路:

因为CC攻击通过工具软件发起,而普通用户通过浏览器访问,这其中就会有某些区别。想办法对这二者作出判断,选择性的屏蔽来自机器的流量即可。

初级

  • 普通浏览器发起请求时,除了要访问的地址以外,Http头中还会带有Referer,UserAgent等多项信息。
  • 遇到攻击时可以通过日志查看访问信息,看攻击的流量是否有明显特征,比如固定的Referer或UserAgent,如果能找到特征,就可以直接屏蔽掉了。

中级

  • 如果攻击者伪造了Referer和UserAgent等信息,那就需要从其他地方入手。

  • 攻击软件一般来说功能都比较简单,只有固定的发包功能,而浏览器会完整的支持Http协议,我们可以利用这一点来进行防御。

  • 首先为每个访问者定义一个字符串,保存在Cookies中作为Token,必须要带有正确的Token才可以访问后端服务。

  • 当用户第一次访问时,会检测到用户的Cookies里面并没有这个Token,则返回一个302重定向,目标地址为当前页面,同时在返回的Http头中加入set cookies字段,对Cookies进行设置,使用户带有这个Token。

  • 客户端如果是一个正常的浏览器,那么就会支持http头中的set cookie和302重定向指令,将带上正确的Token再次访问页面,这时候后台检测到正确的Token,就会放行,这之后用户的Http请求都会带有这个Token,所以并不会受到阻拦。

  • 客户端如果是CC软件,那么一般不会支持这些指令,那么就会一直被拦在最外层,并不会对服务器内部造成压力。

高级

  • 高级一点的,还可以返回一个网页,在页面中嵌入JavaScript来设置Cookies并跳转,这样被伪造请求的可能性更小

Token生成算法

Token需要满足以下几点要求

  1. 每个IP地址的Token不同

  2. 无法伪造

  3. 一致性,即对相同的客户端,每次生成的Token相同

  • Token随IP地址变化是为了防止通过一台机器获取Token之后,再通过代理服务区进行攻击。一致性则是为了避免在服务器端需要存储已经生成的Token。

推荐使用以下算法生成Token,其中Key为服务器独有的保密字符串,这个算法生成的Token可以满足以上这些要求。

1
Token = Hash( UserAgent + client_ip + key )