39

创业耗费百万,为何DDoS如此要命Part 1

 5 years ago
source link: http://www.freebuf.com/articles/network/183182.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

*本文原创作者:罗永浩的迷弟,本文属FreeBuf原创奖励计划,未经许可禁止转载

0×00 多年运维,不敌攻击

从05年开始做运维到现在也有13年了,干过论坛,电商,游戏,金融,直播这些业务的运维,活很杂,什么WebServer,Database,Netfilter,Docker,Xen,KVM,OpenVZ,Ceph,iSCSI,DNS, 负载均衡等等。那么多年做运维以来最让人觉得棘手和    绝望的便是DDoS攻击了,每天晚上睡觉后都怕接到电话说服务器被DDoS了,至于为什么那么恐怖,我想做过运维的人或者被攻击过的企业都应该非常明白那是一种怎么样的体验。

0×01 噩梦初醒,惶惶不可终日

第一次和DDoS攻击打交道,那是06年的冬天,第一份工作是为一家网络广告联盟公司做服务器运维。

基本上每天的任务就是看下服务器的硬盘I/O负载,数据库负载,还有是否有错误日志,很平常。

直到06年冬季的某天,公司托管在浙江绍兴电信机房的那台Dell PowerEdge 1850服务器突然无法访问,WEB和SSH都无法访问。

老板那个急啊,客服那个急啊,真的是可以说热锅上的蚂蚁,坐立不安,要知道对于一个广告联盟来说,服务器瘫痪了,站长的收入突然没了,广告主的流量突然没了,这意味着站长和广告主会流失。

于是乎,联系了绍兴电信的网维,得知服务器当时遭受了大流量的DDoS攻击,攻击规模在2Gbps左右,电信的网维为了保护机柜内其他客户服务器正常运行,封了我们服务器的外网IP地址。

为了不影响业务,最后找绍兴电信付费做的DDoS防御服务,虽然最后服务恢复了,但是服务器的网络延迟也增加了,因为DDoS    攻击一直在持续。

从那次事件后,公司所有人谈DDoS色变。

0×02  挥金如土,只为续命

15年,视频直播爆发式地发展,全民网红,进入这家公司就职半年后,公司融资2000多万,对于视频直播行业可能不多,但是对于整个公司来说已经是走向成功的第一步了。

随着公司快速的发展,直播平台的流水和日活每天都在增长,漂亮的小姐姐也越来越多。

正当大家士气十足甚至都在幻想上市的时候,没过多久,公司就遭到了重挫。

16年9月15号,那天正是中秋节,晚上应该是全家一起吃月饼赏月的时候,可是一起蓄谋已久的DDoS攻击,让大家在    公司里度过了极为煎熬的中秋漫漫长夜。

当晚6点,刚吃完晚饭,准备和家人一起去公园赏月,还没动身,就接到公司电话,要求赶到公司处理突发情况。

赶到公司时,运维同事说平台的登陆系统服务器和主播打赏系统服务器被大规模DDoS攻击,由于攻击规模较大,CDN服务商直接将域名做了回源处理,大量的    攻击流量涌入源服务器,IDC机房直接将被攻击的IP地址做了封堵处理。

询问了IDC接入服务商本次的DDoS攻击规模,得知入向的DDoS攻击流量高达200Gbps+(IDC接入服务商表示机房总接入带宽是200Gbps,这次攻击直接将机房出口打满,为了不影响其他用户,只能将被攻击的IP地址做封堵处理。)

由于本次DDoS攻击规模超过了IDC服务商的接入带宽,IDC服务商没有能力防御,于是求助于云服务商。

最后云服务商给出的高防IP报价非常之高,按天计算,300G防御的每天费用为2.5万元,按月费用为    37万元,如果攻击超出300G,费用还需要支付额外防御费用。

但是公司业务处于瘫痪状态,为了尽快恢复业务,公司开通了按天的DDoS防御服务,在预存10万的防御费用后,当晚8点,DDoS防御服务开通。

防御开通后,经过云服务商的DDoS清洗服务,攻击流量被拦截,平台暂时恢复了正常,经过一晚上的观察和沟通,最终防御了这次DDoS攻击。

此后我们遭受了更大规模的DDoS攻击,每天黑客都会发起数小时的攻击,这使得我们按天支付DDoS防御费用非常不划算,最终公司购买了    37万每月的DDoS保底防御服务。

这次案例告诉我们,有钱真的是可以为所欲为。

0×03  这世上有很多悲哀,仅仅是因为没钱

曾经在猫眼社区上看到一篇帖子,让我感触很深,那帖子标题叫做《我的老婆没钱治病,死了》

当人处于真正的底层时,连选择继续生存的资格都没有,谈什么机会去创造奇迹。

创业公司不也是如此吗?大量的创业公司在遭遇DDoS攻击的时候如同生病,来的那么突然,那么措手不及,但有多少创业公司能那么轻松的负担每月高达数十万的DDoS防御费用呢?

有多少人怀着创业梦想,创造奇迹,想改变行业,但是遇到DDoS攻击,连选择继续生存的资格都没有,这不是很可悲的事情吗?

因为DDoS防御成本太高,加上对DDoS攻击的不了解,往往会出现病急乱投医。

这是非常可怕的,犹如患了重病,而三甲医院费用极高,而选择那些号称能根治但并不靠谱的    私人和莆田系医院,最后往往因为错误的治疗和时间上的拖延导致病重,最后人财两空。

0×04  细说DDoS攻击

下面进入正题,说一下我遇到的各种DDoS攻击类型和一些缓解手段,还有防止李鬼,骗子,垃圾高防服务商的一些经验,以及教大家如何分辨高防服务的    真假和水分。

SYN Flood攻击和防御方式

老生常谈的一种DDoS攻击类型,从早期的利用TCP三次握手原理,伪造的IP源,以小博大,难以追踪,堪称经典的攻击类型。

大量的伪造源的SYN攻击包进入服务器后,系统会产生大量的SYN_RECV状态,最后    耗尽系统的SYN Backlog,导致服务器无法处理后续的TCP请求,导致服务器瘫痪。

quAvQ3F.jpg!web

就和上面的图片一样,服务器资源被耗尽,用户无法和服务器建立连接,攻击者目的达到。

那如何防御SYN Flood攻击呢(其实是缓解,提高一下系统的处理能力,但是只限于小攻击)?

方式1:软件防火墙和系统参数优化 (适用于SYN Flood攻击流量小于服务器接入带宽,并且服务器性能足够)

【Windows系统: 可以修改注册表来提高SYN数据包的处理能力】

进入注册表的[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]项目

 1. 启用syn攻击防护模式 (可以显著提高Windows的SYN处理能力)
 SynAttackProtect=2 [dword]
 2. 加大TCP半开连接数的队列数量
 TcpMaxHalfOpen=10000 [dword]
 3. 启用动态Backlog队列长度
 EnableDynamicBacklog=1 [dword]

通过修改这三处注册表信息可以防止一些小规模并且较为简单的SYN Flood攻击

【Linux系统: 修改sysctl内核参数提高SYN数据包的处理能力】

 1. 开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies来处理
 net.ipv4.tcp_syncookies = 1
 2. 增加SYN Backlog队列长度
 net.ipv4.tcp_max_syn_backlog = 65535
 3. iptables限制SYN频率,每秒钟只允许每个源IP发起2个SYN数据包,超出则丢弃
 iptables -N syn-flood
 iptables -A INPUT -p tcp –syn -j syn-flood
 iptables -A syn-flood -p tcp -m limit –limit 2/s –limit-burst 50 -j RETURN
 iptables -A syn-flood -j DROP

方式2: 购买专业的DDoS云清洗和云防御服务 (适用于SYN Flood攻击流量较大,强度较高的场景)

购买专业的DDoS云清洗服务之前可以咨询一下服务商采用的SYN Flood防御算法和模式,这个非常重要,SYN    Flood防御算法和模式对于不同业务产生的影响是完全不同的。错误的SYN Flood防御算法和模式虽然可以防御SYN Flood攻击,但是也会导致业务无法正常访问。

常见的SYN Flood防御算法有:

SYN Cookies
SYN Proxy
SYN Reset
SYN SafeGuard

如果您咨询的高防服务商无法回答或者不专业的话基本都是代理商和一些骗子。

以上都是我做运维和各种DDoS防护服务商接触后总结的关于SYN Flood防御的经验,上述的算法都有缺点,所以需要根据业务选择合适的SYN Flood防御算法。

DDoS防御服务和其他网络安全防御服务不一样,由于DDoS攻击大小一切由服务商说了算,用户无法核实DDoS攻击的实际大小,导致了这个行业鱼龙混杂,    以次充好的占据95%以上。后面会重点教会大家如何辨识真假高防!

(ACK RST PSH FIN) Flood攻击和防御方式

ACK Flood / RST Flood / PSH Flood / FIN Flood 这类攻击本质上不如SYN Flood危害那么大,    但是也足够轻松的导致服务器瘫痪。

ANfUJzf.jpg!web

如上图,这类攻击虽然不会导致服务器系统中出现大量的SYN_RECV,但是会出现服务器向伪造源IP发送大量的RST报文。

举个例子:

如果你的服务器接入带宽有1Gbps,并假设服务器OS的PPS处理能力达到1.4Mpps,并且OS设计非常牛逼,没有导致大量的中断和锁的开销为前提。

那么你遭受500Mbps的ACK Flood攻击时,你的服务器也会出现上行带宽用到500Mbps左右。

这可非常不划算,而且正常情况下,服务器OS根本没办法处理大量的ACK Flood攻击。

所以针对这种攻击,我建议直接上DDoS云清洗和云防御服务,没必要调整系统,因为没什么意义。

UDP Flood攻击和防御方式

UDP Flood攻击目前来说越来越普遍,得益于各种软件设计缺陷和UDP协议的无连接特性,这让UDP Flood攻击非常容易发起,并且可以得到数十倍数千倍的攻击放大。

我简单做了一张图,大家可以看下UDP放大攻击的原理

BbA3Qzi.jpg!web

对于网站业务来说,是用不到UDP协议的,所以防御这种攻击只需要拥有足够大的接入带宽(只要接入带宽比DDoS攻击更大),你只需要一条ACL策略    丢弃UDP协议便可以防御这种攻击。

但是对于游戏业务和视频直播业务来说,那就是噩梦了,因为很大一部分的游戏和视频直播业务都是基于UDP协议开发的,因为UDP协议的传输速度和    效率比TCP协议更高,延迟也更低,这是UDP的优点,但是也是导致UDP攻击极难防御的关键原因。

恰好我之前在的公司是做视频直播的,在这方面和DDoS防护服务商接触的蛮多,我可以非常负责的说,目前国内能给基于UDP协议的业务防御这种UDP攻击的    DDoS防护服务商不超过5家。

为什么那么难?

因为UDP数据到了防火墙上的时候,防火墙是不知道这个UDP数据包是好的还是坏的,也没办法通过一些类似TCP攻击的防御算法来做源的可信认证。

不过也不是完全没办法解决,之前的视频直播公司是采用了云服务商提供的端云联动方式做的UDP Flood攻击防御,效果非常理想。

但是能做这种端云联动的防御算法的服务商没几家,因为大部分DDoS云清洗和云防御服务商都是买的硬件防火墙,没有实质性的    研发能力和技术实力来驱动这种端云联动的防御算法。而只有真正拥有完全自研DDoS防御算法能力的服务商才可以做到这点。

所以遇到UDP攻击,恰好你是用UDP协议承载业务的,别想多,准备好钱(每个月至少10万起步了),然后    找一家非常专业的DDoS云清洗服务商给你做保护吧。

DNS Query攻击和防御方式

DNS Query攻击是我从业10多年来,最具备威胁的攻击方式,普遍存在于棋牌游戏,私服,菠菜,AV等暴利,竞争不是你死就是我活的行业。

虽然我没遇到过,但是没吃过猪肉,也见过猪跑。

攻击的原理示意图如下:

3aQfUz3.jpg!web

这种攻击最大的威胁便是,通过随机构造并查询被攻击域名的二级域名,绕过递归DNS服务器的解析记录缓存,    各地区地市的递归DNS服务器向权威DNS服务器发起大量的DNS查询请求,如果被攻击域名所在的权威DNS服务器        性能和带宽无法支撑查询所需要的带宽,那么就会直接瘫痪,并影响这个权威DNS服务器上的其他域名。

所以防御这种DNS Query攻击,不但难度极大,而且成本极高,并且还不一定是100%防御。

尤其是递归DNS服务器压力过大的时候,运营商可以直接封禁被攻击的域名,就算权威DNS服务器能够支撑,此时你的域名还是无法解析,等于说服务瘫痪。

怎么防御?

这种只能找专业的DNS服务商和运营商配合来做,否则都是无效的,费用也应该是天价了。

HTTP(s) Flood攻击(CC攻击)和防御方式

HTTP(s) Flood攻击和SYN Flood攻击一样非常棘手,但是也非常经典,攻击效果非常显著,而防御难度却比SYN Flood攻击高出几个数量级!

UBniAbi.jpg!web

攻击发起看似非常简单,实则暗藏玄机!

HTTP(s) Flood攻击早在08年的时候,防御还是较为简单的,因为浏览器单一(大部分都是IE浏览器),通常硬件防火墙会采用JS-Redirect算法来做CC防御,效果非常    显著,但是99%的DDoS硬件防火墙是不支持HTTPS场景防御的。

到了12年移动互联网高度发达的时候,传统的硬件防火墙对于CC攻击的防御早已力不从心(根本防不住),各种浏览器百花齐放,PC端的360浏览器,Chrome,FireFox,IE,手机端的UC浏览器,QQ浏览器,Chrome,Firefox浏览器等。

同时攻击软件也日新月异,各种攻击模式,很大一部分的攻击软件甚至都可以完全模拟用户行为,使用headless浏览器攻击网站,真真假假很难分辨。

针对CC攻击的防御,也是分攻击规模的。

如果攻击规模不大的,可以考虑将被攻击的页面静态化,避开数据库查询,和动态语言。

如果攻击规模巨大,每秒QPS高达数万以上的CC攻击,有两种办法。

方法1: 购买大量的服务器和带宽,以及专业的硬件负载均衡设备做负载均衡,将WEB服务器和数据库服务器做成集群和高可用架构,这样可以极大的提高CC攻击的防御能力。但是这个成本可能会很高。

方法2: 购买专业的DDoS云清洗和云防御服务商的服务,专业的事情交给专业的人去做。

这里我友情提示一下,CC攻击防御难度很高,建议让防御服务商免费提供1-3天的防御试用,如果三天期间防御效果不满意可以换一家,而不至于被骗。

慢请求攻击和防御方式

慢请求攻击是这几年新兴的攻击方式,通过大量的肉鸡发起大量的请求,每个肉鸡每秒只请求1次,大量肉鸡会导致服务器遭受大量的攻击请求,但每个源IP看着却    没有异常行为。

慢请求型的CC攻击危害较大,但是发起的难度和成本也会高一些,通常攻击者为了利用有限的肉鸡打出较大的攻击,通常会将单个肉鸡的每秒查询速度设定到较大的值,例如每秒5到10次,这种攻击方式往往可以通过源IP频率限制等方式拦截,而慢请求型的CC攻击反其道而行,攻击者往往有足够多的肉鸡资源。

例如攻击者有10万肉鸡在线量,那么每个肉鸡每秒只发起一次请求,10万个肉鸡也可以发起10万每秒的请求,这对于WEB服务器来说压力是巨大的,尤其是中小型企业,没有那么多预算去做Web集群和数据库集群,以及动态可伸缩的Web和MySQL,一旦面临这种慢连接和慢请求CC攻击,基本上都会直接出现数据库过载瘫痪,Web服务器瘫痪。

慢请求攻击示意图:

Vv2ArmV.jpg!web

防御方式:

方案1:主要是扩展后端业务服务器规模来死扛这种攻击,成本极高,但是能解决。

部署数据库集群,支持横向扩展,应对超大的CC攻击带来的数据库查询压力。

部署WEB服务器集群,支持横向扩展,对应超大CC攻击带来的CPU和内存以及内核连接数瓶颈压力。

业务熔断机制和算法,需要自行研发业务熔断保护算法,在遭受超大攻击的时候能够对业务进行熔断和降级保护,防止所有业务全线崩溃。

方案2:寻找专业的云安全服务提供商,解决这种攻击。

脉冲型攻击和防御方式

还有一种攻击我们叫做脉冲型的攻击,啥叫脉冲型,就是攻击流量不持续,每秒发动数次,并且可以及时停止,及时发起,这种攻击的危害非常巨大,基本上所有防御服务商都不愿意防御这种攻击,原因我下面会详细讲解。

先放一张之前看到的脉冲型DDoS攻击的PPS图:

IraMFfJ.jpg!web

这种攻击可以在短时间内发起多次DDoS攻击,并且快速停止,快速打击,这对于很多云安全防御服务商来说就是噩梦。

为啥那么说呢?我们先来梳理一下云安全服务商和IDC服务商的DDoS硬件防火墙的部署模式。

模式A: 串联模式(In-line)

bE7FBfU.jpg!web

串联模式部署的DDoS防御系统对于攻击流量检测和防御可以非常及时,通常可以在1秒左右检测到DDoS攻击并启用防御,最快的可以做到毫秒级别。

只要带宽足够,对付这种脉冲型DDoS攻击还是比较轻松,但是对于黑洞牵引检测来说是有威胁的,因为脉冲型攻击的快起快落会让采样准确率会下降,非常容易出现不能及时封堵这种DDoS攻击,如果瞬间攻击流量超过IDC出口,但黑洞牵引系统没有如此高效的检测,就会出现    服务断断续续,影响整个IDC出口下的服务。

模式B: 旁路模式(Out-of-path)

mAJZnyA.jpg!web

旁路部署模式需要由DDoS清洗设备和DDoS检测设备组成,通常90%的云安全服务商和IDC机房是采用旁路部署模式,这种部署需要DDoS检测设备检测到DDoS攻击后才可以将被攻击IP地址的路由    牵引到DDoS清洗设备上。

通常DDoS检测设备大都采用采样方式检测,而不是全量检测,采样检测的效率较低,响应时间会比较高,通常需要攻击持续一段时间,而脉冲型DDoS攻击每次持续时间可能就数秒,这种情况下,旁路部署的防御服务基本会失效,需要防御服务商手工牵引到DDoS清洗设备上进行流量清洗。

脉冲型攻击还可以实现Bypass Mitigation的攻击方式,足量的肉鸡和足够快的脉冲攻击频率,只需要100G-200G的攻击流量即可瘫痪T级别的防御,并且防御难度极高,对于DDoS清洗设备的压力和可靠性要求巨大。

防御脉冲型攻击确实没办法自己解决,只能依靠专业的云安全服务商解决,并且是有足够强大的研发能力和技术支撑能力的。

混合矢量(Multi-Vector )攻击方式和防御方式

其实也不用那么高大上的叫混合矢量攻击,接地气的名字叫做混合DDoS攻击,这种DDoS攻击通常只存在于利润巨大,竞争巨大,并且有着血海深仇对手的攻击。

这种攻击通常会利用所有可利用的攻击方式来攻击目标,初期的目的是让DDoS硬件防火墙处理不过来,但现在的DDoS硬件防火墙根本不在怕的(除非这家ddos防火墙的代码和业务逻辑有问题),唯一要担心的是你防御算法能否精细的过滤掉这些恶意流量,否则多种攻击方式混合,但凡漏了一些攻击流量进入后端服务器,那就是灾难性的。

关于这种攻击的配图,也没什么好的配图,所以我就随便来一张吧

FBBrqm6.jpg!web

由于篇幅有限,我就先写到这里,这篇文章我偏重对于DDoS攻击方式和危害性的科普,下篇文章来详细说明DDoS防御商的那些小算盘和防御方式,因为笔者今年和运营商打了蛮多交道,也了解了一些DDoS防御商的做法和防御方式,下篇文章将会详细讲解。敬请期待!

*本文原创作者:罗永浩的迷弟,本文属FreeBuf原创奖励计划,未经许可禁止转载


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK