Ddos和cc基本知识基本攻防

来自linux中国网wiki
跳到导航 跳到搜索

定义

拒绝服务攻击(英语:denial-of-service attack,缩写:DoS attack、DoS)亦称洪水攻击,是一种网络攻击手法,其目的在于使目标电脑的网络或系统资源耗尽,使服务暂时中断或停止,导致其正常用户无法访问。 当黑客使用网络上两个或以上被攻陷的电脑作为“僵尸”向特定的目标发动“拒绝服务”式攻击时,其称为分布式拒绝服务攻击(distributed denial-of-service attack,缩写:DDoS attack、DDoS)。

该类攻击也常见于部分游戏,被心怀不满的玩家或是竞争对手广泛使用。 这几天就有小伙伴遇到这个问题来请教 于是有了本文。

CC攻击(Distributed HTTP flood,分布式HTTP洪水攻击) CC攻击是DDoS攻击的一种类型,使用代理服务器向受害服务器发送大量貌似合法的请求(通常使用HTTP GET)。CC(Challenge Collapsar,挑战黑洞)根据其工具命名,攻击者创造性地使用代理机制,利用众多广泛可用的免费代理服务器发动DDoS攻击。许多免费代理服务器支持匿名模式,这使追踪变得非常困难。

CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,也是一种常见的网站攻击方法,攻击者通过代理服务器或者肉鸡向向受害主机不停地发大量数据包,造成对方服务器资源耗尽,一直到宕机崩溃。 CC攻击的攻击技术含量低,利用工具和一些IP代理,一个初、中级的电脑水平的用户就能够实施攻击。不过,如果了解了CC攻击的原理,那就不难针对CC攻击实施一些有效的防范措施。 通常防止CC攻击的方法有几种,一个是通过防火墙,另外一些网络公司也提供了一些防火墙服务,例如XX网站卫士和XX宝,还有一种方法是自己写程序预防,昨天网站遇到CC攻击,这也让我尝试了一下各种防止CC攻击方法的有效性。

防御方式

1.减少公开暴露

对于企业来说,减少公开暴露是防御 DDoS 攻击的有效方式,对 PSN 网络设置安全群组和私有网络,及时关闭不必要的服务等方式,能够有效防御网络黑客对于系统的窥探和入侵。 具体措施包括禁止对主机的非开放服务的访问,限制同时打开的 SYN 最大连接数,限制特定 IP 地址的访问,启用防火墙的防 DDoS 的属性等。

2.充足的网络带宽保证砸带宽,超过D的就好了

3. 分布式服务拒绝 DDoS 攻击

所谓分布式资源共享服务器就是指数据和程序可以不位于一个服务器上,而是分散到多个服务器。分布式有利于任务在整个计算机系统上进行分配与优化,克服了传统集中式系统会导致中心主机资源紧张与响应瓶颈的缺陷,分布式数据中心规模越大,越有可能分散 DDoS 攻击的流量,防御攻击也更加容易。

4.寻找机会应对攻击

如果用户正在遭受攻击,他所能做的抵御工作将是非常有限的。因为在原本没有准备好的情况下有大流量的灾难性攻击冲向用户,很可能在用户还没回过神之际,网络已经瘫痪。但是,用户还是可以抓住机会寻求一线希望的。 (1)检查攻击来源,通常黑客会通过很多假IP地址发起攻击,此时,用户若能够分辨出哪些是真IP哪些是假IP地址,然后了解这些IP来自哪些网段,再找网网管理员将这些机器关闭,从而在第一时间消除攻击。如果发现这些IP地址是来自外面的而不是公司内部的IP的话,可以采取临时过滤的方法,将这些IP地址在服务器或路由器上过滤掉。 (2)找出攻击者所经过的路由,把攻击屏蔽掉。若黑客从某些端口发动攻击,用户可把这些端口屏蔽掉,以阻止入侵。不过此方法对于公司网络出口只有一个,而又遭受到来自外部的DDOS攻击时不太奏效,毕竟将出口端口封闭后所有计算机都无法访问internet了。 (3)最后还有一种比较折中的方法是在路由器上滤掉ICMP。虽然在攻击时他无法完全消除入侵,但是过滤掉ICMP后可以有效的防止攻击规模的升级,也可以在一定程度上降低攻击的级别。

5.检查访问者的来源

使用Unicast Reverse Path Forwarding等通过反向路由器查询的方法检查访问者的IP地址是否是真,如果是假的,它将予以屏蔽。

通过缩短 SYN 半连接的 time out 时间也能有效防止 DDoS 攻击


拒绝服务攻击的防御方式通常为 侵检测,流量过滤和多重验证,旨在堵塞网络带宽的流量将被过滤,而正常的流量可正常通过。 可以买相关的网络设备


6 nginx防止DDOS攻击配置

限制每秒请求数 ngx_http_limit_req_module 限制IP连接数 ngx_http_limit_conn_module 白名单设置

Nginx限制访问速率和最大并发连接数模块--limit (防止DDOS攻击)

安装 DDoS deflate

DDoS deflate的原理是通过netstat命令找出 发出过量连接的单个IP,并使用iptables防火墙将这些IP进行拒绝。由于iptables防火墙拒绝IP的连接远比从Apache层面上来得高效,因此iptables便成了运行在Apache前端的“过滤器”。同样的,DDoS deflate也可以设置采用APF(高级防火墙)进行IP阻止。

安装配置apf

APF(Advanced Policy Firewall)是 Rf-x Networks 出品的Linux环境下的软件防火墙,被大部分Linux服务器管理员所采用,使用iptables的规则,易于理解及使用。

简单配置vps,防ddos攻击

手工写脚本自动添加到iptables

Linux系统防CC攻击自动拉黑IP增强版Shell脚本

防火墙

路由器

黑洞引导

流量清洗


如果你的网站是使用的是Nginx做的反向代理,那么可以利用Nginx原生的limit_req模块来针对请求进行限制,[ ngx_http_limit_req_module 模块 http://nginx.org/en/docs/http/ngx_http_limit_req_module.html]


1、单独或较少的攻击源可以直接deny。 2、大规模的攻击速度快、请求提交频率高,可以通过安全策略现在请求提交的频率。 根据攻击情况灵活掌握,关键在与你对现有资源的理解和运用能力。


所以,回答就是:没有啥好办法,耐心等待吧。看了其他几个回答提供的方案,分别分析一下:1、拼带宽:或者说拼软妹币,这不是一点点钱能搞定的,果壳网彼时只买了不足100M带宽,所在早期机房总带宽也不足40G,攻击带宽都没见过低于10G的(机房的人后来告诉我的)。假设某便宜机房(肯定不在北上广深),带宽价格为100元/M*月,每月按峰值计费。则要买10G带宽顶一下,需要的月费是100万,100万……2、流量清洗&封IP:如前述,要这么做的前提是攻击包至少要到你的机房。而机房自保的措施导致了数据包根本到不了机房,无解3、CDN服务:现代CDN提供商还没有完善的动态网页加速技术,所以结果就是,你充其量利用CDN保住静态化的主页可以访问,其他任何动态网站功能就只能呵呵了。

知道DDOS的目标是什么吗?是所有服务吗? 不是,是你的system内的设计不好的服务,是要合理将服务单元划分,服务和服务之间设计时就要将耦合度降到最低,牵一发而动全身的system,怎么去做defence。

出了问题,能第一时间对脆弱服务提出解决方案。出了问题,能第一时间攻击源有定位。一个企业/政府单位/事业机构被DDOS,是技术问题?图样图森破。果断报警吧,小伙子。--------------------------------------------------------------------------总结一次:1)DDOS发生前可能永远都无法预知,因此,应急方案一定要有。2)DDOS发生后可能短时间无法完全防御,因此要有保证最小服务的生存的意思。3)DDOS攻击源可能很难定位,甚至无计可施,但是最接近你的一级的入口流量,你完全可以控制。首先求自己,然后求别人。4)商场似战场,但是不是战场,在灾难最重要的是对你用户负起责任。


  实际上,不使用网站卫士类的服务,直接通过分析网站日志,还是很容易分辨出哪个IP是CC攻击的,因为CC攻击毕竟是通过程序来抓取网页,与普通浏览者的特性区别还是很大的,例如普通浏览者访问一个网页,必定会连续抓取网页的HTML文件、CSS文件、JS文件和图片等一系列相关文件,而CC攻击者仅仅只会抓取一个URL地址的文件,不会抓取其他类型的文件,其User Agent也大部分和普通浏览者不同,这就可以在服务器上很容易分辨出哪些访问者是CC攻击了,既然可以判断出攻击者的IP,那么预防措施就很简单,只需要批量将这些IP屏蔽,即可达到防范CC攻击的目的。

  最终,我花了半个小时写了一段小程序,运行之后自动屏蔽了数百个IP,网站才算正常,从而证明,防火墙对于CC攻击的防御并不有效,最有效的方法还是在服务器端通过程序自动屏蔽来预防。

  看来CC攻击的门槛还真低啊,搞个几百个代理或者肉鸡就能攻击别人了,其成本非常低,但效果比较明显,如果攻击者流量巨大的话,通过耗费带宽资源的方式都可以进行攻击。但是,CC攻击也有明显的技术缺陷,就是攻击者的IP并不是海量的,通常就是几百数千的级别,并且是真实访问了网站页面,这就使得网站可以通过程序过滤的方式,轻松获取到这些攻击者IP,批量进行屏蔽,那么这种CC攻击就会得到预防。

  对于站长来说,通过程序来过滤CC攻击门槛较高,要有一定的编程技术,因此还是建议使用第三方网站提供的预防CC的服务,目前主要的网站有:360网站卫士、百度加速乐、安全宝等。


三、 攻击症状   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的攻击。


1、借用第三方力量+以其人之D还治其人之机 @ 127.0.0.1


2、最实用的杀手锏:网段封杀最常见有效的防御办法,我想应该就是杀 IP 了吧,因为网站访问量也不是特别高,所以我会在服务器上做 crontab ,用 iptables 每分钟取 IP 的 B段、 C 段 的连接数,超过一定数量就直接 DROP。一旦有新 IP 被 DROP 就会邮件我自己,方便得知以后后续操作。3、既然 TCP 已经握手了,那么只能从应用层封杀了因为攻击者的 IP 段巨广、无法 DROP 的 IP 还是会进到应用层的,整个网站都是 PHP 的,绝不能让这些请求进入 PHP 运行的环节。于是,我们需要从之前拿到的 UA 、 HOST 、 URL 入手,去封杀了!!!kangle 是一款国产的 webserver,据说是跑静态文件比 nginx 要强。我也没具体测过 kangle 的性能,但是光有 web 管理面版 + 支持 .htaccess,改了配置根本就不需要人工 reload ,在易用层面是要比 nginx 上了一个档次。(我真不是五毛!!!只是最早用于生产环境的一批用户,用了很多年了,生产环境下 windows 下跑 PHP 真心推荐!!!)---- 咳咳,回到题主上来。kangle 的 web 管理面版里有一个非常实用的功能叫做:请求控制 + 回写数据。



2 封ip,宁可错杀一千,不放过一个; 3 搞定实施D你的组织(一般不是竞争对手),让他停止D; 4 把服务器搞到让组织D你的人的(比如竞争对手)同一个机房。


1、拼带宽:或者说拼软妹币,这不是一点点钱能搞定的,果壳网彼时只买了不足100M带宽,所在早期机房总带宽也不足40G,攻击带宽都没见过低于10G的(机房的人后来告诉我的)。假设某便宜机房(肯定不在北上广深),带宽价格为100元/M*月,每月按峰值计费。则要买10G带宽顶一下,需要的月费是100万,100万……2、流量清洗&封IP:如前述,要这么做的前提是攻击包至少要到你的机房。而机房自保的措施导致了数据包根本到不了机房,无解



cdn CDN服务:现代CDN提供商还没有完善的动态网页加速技术,所以结果就是,你充其量利用CDN保住静态化的主页可以访问,其他任何动态网站功能就只能呵呵了。


不要让自己成为别人的肉鸡 一定要设置强密码,并定期更换;

2. 至少做到每周检查SSH日志,了解是否有人在暴力破解自己的云主机。


CC主要是用来攻击页面的。 CC就是充分利用了这个特点,模拟多个用户(多少线程就是多少用户)不停的进行访问(访问那些需要大量数据操作,就是需要大量CPU时间的页面).这一点用一个一般的性能测试软件就可以做到大量模拟用户并发。


  

2018补充

网络层 DDoS 防御
网络层的 DDoS 攻击究其本质其实是无法防御的,我们能做得就是不断优化服务本身部署的网络架构,以及提升网络带宽。当然,还是做好以下几件事也是有助于缓解网络层 DDoS 攻击的冲击:

网络架构上做好优化,采用负载均衡分流。
确保服务器的系统文件是最新的版本,并及时更新系统补丁。
添加抗 DDos 设备,进行流量清洗。
限制同时打开的 SYN 半连接数目,缩短 SYN 半连接的 Timeout 时间。
限制单 IP 请求频率。
防火墙等防护设置禁止 ICMP 包等。
严格限制对外开放的服务器的向外访问。
运行端口映射程序或端口扫描程序,要认真检查特权端口和非特权端口。
关闭不必要的服务。
认真检查网络设备和主机/服务器系统的日志。只要日志出现漏洞或是时间变更,那这台机器就可能遭到了攻击。
限制在防火墙外与网络文件共享。这样会给黑客截取系统文件的机会,主机的信息暴露给黑客,无疑是给了对方入侵的机会。
加钱堆机器。。
报警。。

应用层 DDoS
应用层 DDoS 攻击不是发生在网络层,是发生在 TCP 建立握手成功之后,应用程序处理请求的时候,现在很多常见的 DDoS 攻击都是应用层攻击。应用层攻击千变万化,目的就是在网络应用层耗尽你的带宽,下面列出集中典型的攻击类型。

CC 攻击

当时绿盟为了防御 DDoS 攻击研发了一款叫做 Collapasar 的产品,能够有效的防御 SYN Flood 攻击。黑客为了挑衅,研发了一款 Challenge Collapasar 攻击工具(简称 CC)。

CC 攻击的原理,就是针对消耗资源比较大的页面不断发起不正常的请求,导致资源耗尽。因此在发送 CC 攻击前,我们需要寻找加载比较慢,消耗资源比较多的网页,比如需要查询数据库的页面、读写硬盘文件的等。通过 CC 攻击,使用爬虫对某些加载需要消耗大量资源的页面发起 HTTP 请求。

DNS Flood

DNS Flood 攻击采用的方法是向被攻击的服务器发送大量的域名解析请求,通常请求解析的域名是随机生成或者是网络世界上根本不存在的域名,被攻击的DNS 服务器在接收到域名解析请求的时候首先会在服务器上查找是否有对应的缓存,如果查找不到并且该域名无法直接由服务器解析的时候,DNS 服务器会向其上层 DNS 服务器递归查询域名信息。域名解析的过程给服务器带来了很大的负载,每秒钟域名解析请求超过一定的数量就会造成 DNS 服务器解析域名超时。

根据微软的统计数据,一台 DNS 服务器所能承受的动态域名查询的上限是每秒钟 9000 个请求。而我们知道,在一台 P3 的 PC 机上可以轻易地构造出每秒钟几万个域名解析请求,足以使一台硬件配置极高的 DNS 服务器瘫痪,由此可见 DNS 服务器的脆弱性。

HTTP 慢速连接攻击

针对 HTTP 协议,先建立起 HTTP 连接,设置一个较大的 Conetnt-Length,每次只发送很少的字节,让服务器一直以为 HTTP 头部没有传输完成,这样连接一多就很快会出现连接耗尽。

应用层 DDoS 防御
判断 User-Agent 字段(不可靠,因为可以随意构造)
针对 IP + cookie,限制访问频率(由于 cookie 可以更改,IP 可以使用代理,或者肉鸡,也不可靠)
关闭服务器最大连接数等,合理配置中间件,缓解 DDoS 攻击。
请求中添加验证码,比如请求中有数据库操作的时候。
编写代码时,尽量实现优化,并合理使用缓存技术,减少数据库的读取操作。
加钱堆机器。。
报警。。
应用层的防御有时比网络层的更难,因为导致应用层被 DDoS 攻击的因素非常多,有时往往是因为程序员的失误,导致某个页面加载需要消耗大量资源,有时是因为中间件配置不当等等。而应用层 DDoS 防御的核心就是区分人与机器(爬虫),因为大量的请求不可能是人为的,肯定是机器构造的。因此如果能有效的区分人与爬虫行为,则可以很好地防御此攻击。

其他 DDoS 攻击
发起 DDoS 也是需要大量的带宽资源的,但是互联网就像森林,林子大了什么鸟都有,DDoS 攻击者也能找到其他的方式发起廉价并且极具杀伤力的 DDoS 攻击。

利用 XSS

举个例子,如果 12306 页面有一个 XSS 持久型漏洞被恶意攻击者发现,只需在春节抢票期间在这个漏洞中执行脚本使得往某一个小站点随便发点什么请求,然后随着用户访问的增多,感染用户增多,被攻击的站点自然就会迅速瘫痪了。这种 DDoS 简直就是无本万利,不用惊讶,现在大站有 XSS 漏洞的不要太多。

来自 P2P 网络攻击

大家都知道,互联网上的 P2P 用户和流量都是一个极为庞大的数字。如果他们都去一个指定的地方下载数据,成千上万的真实 IP 地址连接过来,没有哪个设备能够支撑住。拿 BT 下载来说,伪造一些热门视频的种子,发布到搜索引擎,就足以骗到许多用户和流量了,但是这只是基础攻击。
高级的 P2P 攻击,是直接欺骗资源管理服务器。如迅雷客户端会把自己发现的资源上传到资源管理服务器,然后推送给其它需要下载相同资源的用户,这样,一个链接就发布出去。通过协议逆向,攻击者伪造出大批量的热门资源信息通过资源管理中心分发出去,瞬间就可以传遍整个 P2P 网络。更为恐怖的是,这种攻击是无法停止的,即使是攻击者自身也无法停止,攻击一直持续到 P2P 官方发现问题更新服务器且下载用户重启下载软件为止。

最后总结下,DDoS 不可能防的住,就好比你的店只能容纳 50 人,黑社会有 100 人,你就换一家大店,能容纳 500 人,然后黑社会又找来了 1000 人,这种堆人头的做法就是 DDoS 本质上的攻防之道,「道高一尺,魔高一丈,魔高一尺,道高一丈」,讲真,必要的时候就答应勒索你的人的条件吧,实在不行就报警吧。



参考

cc

Nginx Lua Redis防止CC攻击

Linux系统防CC攻击自动拉黑IP增强版Shell脚本

常见 Web 安全攻防总结

拒绝服务攻击

在Linux下CC攻击检查

常用的七个入侵检测工具推荐


网站被cc攻击了该如何应对

互联网创业公司如何防御 DDoS 攻击?

防止 DDoS 攻击的五个「大招」

如何防止DDos攻击

cc攻击 nginx防止DDOS攻击配置


Nginx防CC攻击


[ http://www.williamlong.info/archives/3181.html 网站防止CC攻击的方法]