据外媒消息, 美国东部时间 2018 年 2 月 28 日下午 12 点 15 分左右, GitHub 遭遇了可能是迄今为止最大的 DDoS 攻击, 最高访问量为 1.35Tbps
当地时间 2 月 28 日起, GitHub 经历了两次间歇性不可访问攻击发生 10 分钟后, GitHub 向 CDN 服务商 Akamai 请求协助, 访问 GitHub 的流量交由后者接管攻击在 Akamai 介入 8 分钟后结束, GitHub 确认该网站上用户数据的机密性或完整性未受到威胁
什么是 DDoS 攻击
分布式拒绝服务 (DDoS:Distributed Denial of Service) 攻击, 是指攻击者利用大量肉鸡对攻击目标发动大量的正常或非正常请求耗尽目标主机资源或网络资源, 从而使被攻击的主机不能为正常用户提供服务
做一个形象的比喻, 我们可以把攻击者视为无赖, 被攻击者视为商场无赖为了让一家商场无法正常营业, 无赖们扮作普通客户一直拥挤在商场, 赖着不走, 真正的购物者却无法进入; 或者总是和营业员有一搭没一搭的东扯西扯, 让工作人员不能正常服务客户; 也可以为商铺的经营者提供虚假信息, 商铺的上上下下忙成一团之后却发现都是一场空, 最终跑了真正的大客户, 损失惨重一个无赖去胡闹, 就是 DoS 攻击, 而一群无赖去胡闹, 就是 DDoS 攻击
DoS(拒绝服务, Denial of Service)就是利用合理的服务请求来占用过多的服务资源, 从而使合法用户无法得到服务的响应这是早期非常基本的网络攻击方式
在信息安全的三要素保密性完整性和可用性中, DoS(Denial of Service)针对的目标正是可用性该攻击方式利用目标系统网络服务功能缺陷或者直接消耗其系统资源, 使得该目标系统无法提供正常的服务一般来说, DDoS 攻击可以具体分成两种形式: 带宽消耗型以及资源消耗型它们都是透过大量合法或伪造的请求占用大量网络以及器材资源, 以达到瘫痪网络以及系统的目的其中, DDoS 带宽消耗攻击可以分为两个不同的层次: 洪泛攻击或放大攻击
当服务器被 DDos 攻击时, 一般会出现以下现象:
被攻击主机上有大量等待的 TCP 连接;
网络中充斥着大量的无用的数据包;
受害主机无法正常和外界通讯;
受害主机无法处理所有正常请求;
严重时会造成系统死机
对于用户来说, 在常见的现象就是网站无法访问
反射型 DDoS 攻击
本次是 GitHub 遭受攻击的手段是 DDos 攻击手段中的反射型 DDoS 攻击反射型 DDos 攻击也被称为放大攻击攻击者并不直接攻击目标服务 IP, 而是利用互联网的某些特殊服务开放的服务器, 通过伪造被攻击者的 IP 地址向有开放服务的服务器发送构造的请求报文, 该服务器会将数倍于请求报文的回复数据发送到被攻击 IP, 从而对后者间接形成 DDoS 攻击
执行反射攻击, 需要具备四个因素:
一个服务器: 用于执行 IP 地址欺骗;
一个脆弱的易于反射 / 放大的协议: 任何设计不完善的基于 UDP 请求的协议都可能被利用;
反射服务器列表: 支持脆弱协议的服务器;
一个目标 IP 地址: 受害者的 IP 地址
攻击的整体思路如下:
攻击者发送虚假的 UDP 请求;
伪造源 IP 地址: 将请求包中的源 IP 地址替换成受害者的 IP 地址, 这些请求包中通常不会出现攻击者自己的 IP 地址;
每个请求包都发往一个随机的反射服务器;
经过伪造的数据包通过网络传输最终到达反射服务器;
反射服务器接收到这些虚假的请求包, 遵从约定的协议规则, 发送响应; 无疑, 这些响应都是针对受害目标的
如图所示, 攻击者不直接把攻击包发给受害者, 而是冒充受害者给放大器发包, 然后通过放大器再反射给受害者受害目标最终会收到大量的响应包, 而这些包都不是它请求的在攻击足够大的情况下, 受害目标可能会发生网络拥塞或中断风暴
传送给受害目标的响应可能远远大于伪造的请求, 这就是这类攻击被称为放大攻击的原因经过精心设计, 攻击者可以利用有限的资源, 有效的扩大 DDOS 攻击的流量
在反射型攻击中, 攻击者利用了网络协议的缺陷或者漏洞进行 IP 欺骗, 主要是因为很多协议 (例如 ICMP,UDP 等) 对源 IP 不进行认证同时, 要达到更好的攻击效果, 黑客一般会选择具有放大效果的协议服务进行攻击总结一下就是利用 IP 欺骗进行反射和放大, 从而达到四两拨千斤的效果
针对 GitHub 的攻击
上面介绍提到过, 想要完成攻击, 需要有一个开放服务的支持 UDP 协议的服务器, 而本次针对 GitHub 的攻击利用的是我们 Java 开发人员很熟悉的 Memcached
什么是 Memcached ?
Memcached 是一个高性能的分布式内存对象缓存系统, 用于动态 web 应用以减轻数据库负载它通过在内存中缓存数据和对象来减少读取数据库的次数, 从而提高动态数据库驱动网站的速度经过 Memcached 缓存技术处理的动态网页应用可以减轻网站数据库的压力, 让网站管理员可以进一步提升网站的性能, 世界上很多大型网站, 例如 Facebook, Flickr, Twitter, Reddit, YouTube, Github 都使用了这种技术
为什么是 Memcached ?
由于 Memcache(版本低于 1.5.6)默认监听 UDP, 天然满足反射 DDoS 条件
很多用户将服务监听在 0.0.0.0, 且未进行 iptables 规则配置, 这导致可以被任意来源 IP 请求
Memcache 作为企业应用组建, 其业务特性保证了具有较高上传带宽
Memcache 不需要认证即可进行交互
Memcached 反射的倍数达到数万倍, 非常利于用于放大报文倍数行成超大流量的 DDoS 攻击
本次针对 GitHub 的攻击, 其实是攻击者把自己的 IP 地址伪装成 GitHub 的 IP 地址, 然后向 Memcached 缓存服务器的 UDP 端口 11211, 发出大量假请求, Memcached 对请求回应大量的并发回应报文汇聚到被伪造的 IP 地址源(也就是 GitHub), 形成反射型分布式拒绝服务攻击
如何避免自己的 Memcached 被利用?
将服务器放置于可信域内
一定要放置有外网时不要监听 0.0.0.0
有特殊需求可以设置 acl 或者添加安全组
禁用或限制 11211 的 UDP 端口号
如何避免被 Memcached DDoS 反射攻击?
对于网络安全防护, 其实没有任何办法能够彻底避免被攻击, 网站维护者能做的其实都只是在提高攻击者的攻击成本而已对于 DDoS 反射攻击, 可以做以下事情:
使用高性能的负载均衡软件, 使用多台服务器, 并部署在不同的数据中心
优化资源使用提高 web server 的负载能力
启用路由器或防火墙的反 IP 欺骗功能
使用高可扩展性的 DNS 设备来保护针对 DNS 的 DDOS 攻击
准备足够多的带宽
使用第三方的服务来保护你的网站
PS: 本文参考了很多业内安全手册及文章, 由于公众号限制无法增加链接, 参考资料请前往原文查看
来源: https://mp.weixin.qq.com/s/SrJBynh5dyOtyaNcQMZyhA