据外媒消息,美国东部时间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 攻击。
- 准备足够多的带宽。
- 使用第三方的服务来保护你的网站。
参考资料 DDOS攻击之统计分析常见的反射/放大攻击 反射型 DDoS 攻击的原理和防范措施 防范 DDoS 攻击的 15 个方法