浅谈DDoS攻击 1 - 多IP防护的新思路

随着物联网的发展, DDoS 攻击变得愈来愈广泛. 站长们或多或少都据说过或实际被 DDoS 攻击过. 本文经过我这几年应对 DDoS 的经验, 来给你们描述一个开销比较小的 DDoS 防护思路, 但愿可以抛砖引玉.web

分类

常见的 DDoS 攻击从流量真实性 (流量是否真正做用到了业务上) 上来说, 显而易见只有两种:跨域

- 真实流量 DDoS缓存

- 假流量 DDoS服务器

咱们先看真实流量 DDoS. 真实流量 DDoS 实际上是很难防护的, 尤为是对站点资源真实请求的攻击, 将会对运维带来极大压力.网络

好比利用网络上公开的 web 反向代理站点发起的攻击, 这种攻击与正经常使用户访问高度类似, 很难解决.负载均衡

又或者注入了大流量网站, 将大流量网站的请求跨域请求到了受害者的站点.运维

但这种攻击成本高, 并且收益不高, 因此对于中小型站点是不多见的.memcached

接下来是假流量 DDoS.网站

从攻击成本, 流量放大倍数等因素综合来看, 基于非 TCP 协议的反射型 DDoS 攻击仍然是如今针对中小站点小规模 DDoS 攻击的最佳选择.代理

所以, 站点所受攻击大几率也是反射型的假流量 DDoS 攻击.

想要完成这样的攻击, 须要如下条件:

- 能够修改 Packet Header 来将流量导向受害者.

- 可利用的反射节点存在反射.

咱们来依次讲解:

可修改 Packet Header 指, 因为 UDP 等协议是非面向链接的, 所以伪造 Source IPv4 Address 是很容易的, 这样就能够把 Source IPv4 Address 设置为受害者的 IPv4 地址.

反射节点指, 利用上面的可篡改的协议访问一些特定暴露在网络上的服务时, 这些服务返回的数据比请求所需的数据大, 而且大不少倍. 越大攻击效果越好.

例如 Memcached 协议漏洞, 假设有一些 Memcached 服务器没有加任何保护措施就放在了公网上, 咱们甚至能够自由操做这些 Memcached 服务器. 那么咱们只需在 Memcached 里面 SET 一个巨大的数据, 而后发起一个对 Memcache 的请求, 该请求的 Source IPv4 Address 填写为攻击目标的 IPv4 地址. 这样就完成了攻击.

这样的攻击足足能够把流量放大 10,000 - 51,200 倍, 毕竟请求的 Payload 就是一个 GET {key} 的二进制数据. 但返回的倒是咱们以前 SET 到里面的一大坨数据. 假设咱们控制的僵尸网络能够发起 50Mbps 的请求, 那么通过 Memcached 协议漏洞的放大, 咱们获得的攻击带宽就是 50Mb * 51,200 = 2.44Tb. 这是多么可怕的结果. 要知道历史上最大的 DDoS 带宽也才 1.35Tb.

这样的攻击的成本是至关低的. 现现在家用宽带的上行都有不少甚至能达到 30Mb 的带宽, 而家用物联网设备也愈来愈多. 咱们能够想象到, 一旦家里有存在漏洞的设备, 那么这些漏洞颇有可能被利用. 最典型的就是一些家用路由器的 SSDP 漏洞, 路由器刚好又是插在宽带的入口上的. 若是能被访问到, 这将是很可怕的后果.

云服务商的防御服务

普通对于反射式 DDoS 攻击最好的防护方式固然仍是交给云服务商去作. 但云服务商提供的高防 IP 或 DDoS 防御服务也有如下缺点:

- 售价高

下面是国内某云服务商的最低档高防 IP 服务的售价:

线路资源: 八线BGP, 地域: 中国大陆, 保底防御带宽: 30Gb, 弹性防御带宽: 30Gb, 业务带宽: 100 M, 功能套餐: 标准功能, 防御域名数: 50, 业务QPS: 3000, 端口数: 50, 购买数量: 1, 购买时长: 1个月, 配置费用: 20,800.00 CNY

30Gb, 每个月 2 万块. 能够负责任的说, 这个防御带宽人家想打垮你简直是欺负幼儿园小朋友. 但这个价格可不是通常中小型站点能接受的.

- 延时不理想

接入高防后, 用户流量会先到高防, 而后回源到你的业务.

可是, IDC 的高防设备须要巨大的带宽接入, 所以高防设备为了节省带宽等费用, 所在的 IDC 颇有可能不在一线城市. 这就带来了第二个问题, 延时会增长许多. 这对用户体验是伤害性的.

- 回源 IP 不慎泄露

这个严格来说不是高防服务商的问题, 而是自身的问题. 因为回源 IP 不慎泄露, 致使 DDoS 仍是直接打在了本身的业务对应的 IP 上.

一种新思路

那么, 咱们本次就讨论如何去经过一些其余的思路去防护相似这样的攻击.

咱们先分析攻击者的整个操做流程.

首先, 攻击者须要肯定攻击目标, 由于攻击数据包的协议是 4 层协议, 因此攻击者须要的信息只有一个, IP 地址.

可能他接到的就是个IP地址, 也有可能他接到的是个域名, 或者URL. 这时候他就要经过 DNS 把域名转换到 IP 地址.

而后它把 IP 地址, 或一堆 IP 地址 (好比你的域名负载均衡到了多个IP). 填写到他的攻击程序中. 而后剩下就是运行程序, 开始攻击了.

咱们能够想到, 攻击者控制的发起带宽确定不是无限的, 能够用的反射资源也不是无限的, 所以, 若是同时攻击的目标越多, 每一个目标分摊的攻击带宽就越小.

好的, 这就是咱们防护的第一个核心思路: 经过多 IP 来减小每 IP 的被攻击带宽.

另外, 在我对攻击过程的观察中, 发现有的攻击对 IP 的变化是不敏感的.

好比, 你遭到攻击的 IP 被 IDC 下线了, 这时候你换了个新 IP, 攻击有时并不会马上来攻击你的新 IP.

这种要么是你实际上是无辜的, 对面攻击的是一个 IP 范围, 你只是刚好被波及了. 这种状况常见于跟别人复用服务器的状况.

另外的可能就是攻击者没有及时跟进变化或者放弃了攻击.

那么, 咱们能够经过以上的思路, 去构建咱们的防护体系.

首先咱们须要买一个服务, 叫作 CNAME 负载均衡.

应用了 CNAME 负载均衡后, 用户访问你的域名, 首先会请求 DNS, 获得目标域名对应的 CNAME 域名, 而后经过 CNAME 域名去获取真实的目标 IP.

CNAME 负载均衡的优点是, DNS 切换 CNAME 记录比切换 A 记录生效更快, 客户端缓存比较容易获得更新 (固然这要看 DNS 服务商和客户端的具体设置和实现).

生效快缓存容易更新就意味着, 发生攻击时, 经过切换 IP 来让正经常使用户继续访问这个过程会代价更小.

那么不妨咱们来计算一下. 假设我 CNAME 负载均衡后面对应了 50 个 IP. 那么一波300Gb的攻击, 若是被均摊, 每 IP 受到攻击的平均带宽是 300Gb / 50 = 6Gb. 这个攻击带宽颇有可能会包含在购买 IP 时赠送的防护带宽以内了.

那么, 50 个 IP 的成本是怎样的呢? 每 IP 的租用均价 (按流量付费,流量费用另计) 大概是 0.020 CNY/h, 50 个 IP 一个月就是 0.02 x 24 x 30 x 50 = 720CNY. 是否是很便宜?

甚至咱们还能再屯它 50 个 IP, 被打了的时候就挨个换, 跟他玩, 看谁先没耐心.

进阶防护

有了多 IP 后, 咱们甚至能够再弄一些更复杂的防护策略.

咱们刚才假定的都是每 IP 的流量是均分的. 但实际上站点用户在地理位置上不是均匀分布的. 所以有些 IP 必然正常流量会大一些. 那么针对这些IP, 咱们能够买一些便宜的防御服务. 经过变相降级的方式, 让大部分用户遭到攻击时, 仍然能够继续访问. 因为攻击者跟咱们信息不对等, 所以他若是想知道哪些 IP 是大流量 IP 而转去攻击的话, 仍是很难的. 这样也算变相节省了防护部分的费用.

若是咱们能接入云服务商的 OpenAPI, 甚至咱们能够经过程序去动态的更换IP, 进一步下降运维压力.

总结

以上所讲的防护方式, 对于无状态业务是最有效的, 例如网站.

但对于有状态业务, 例如游戏服务器, 是很难的. 游戏服务器不管是什么协议, 很难去切换IP. 由于一但切换, IP 对应的全部客户端就要从新链接服务器, 这对一些实时性很高的游戏是难以忍受的. 但对于自己就用 HTTP 的一些实时性较低的游戏, 例如棋牌类游戏, 是能够考虑的.

多屯点 IP 没坏处, 毕竟一个 IP 放着一个月也才 14 块.

上述方案在我接近 3 年的实际应用期间, 起到了不小的做用, 对于 100Gb 如下的攻击, 基本在发现被攻击 15 分钟以内, 就可让大部分用户继续正常访问了. 但对于 500Gb 以上的攻击, 更多的比的是耐心, 尤为是在买不起高防的状况下, 只能人工防护, 尽可能减少损失了.

本文仅是我的经验, 欢迎各位大佬不吝斧正.

Reference

相关文章
相关标签/搜索