十个简单的方法缓解基于 DNS的DDoS攻击
发布日期:2016-09-07 作者:(none) 来源: 中国信息安全博士网 点击:
十个简单的方法缓解基于DNS的DDoS攻击
研究人员发现,攻击者常常会在基于海量带宽的DDoS攻击(分布式拒绝服务攻击)中使用UDP泛洪攻击(UDP floods)。因为UDP协议是一种无连接的协议,攻击者可以轻松地利用脚本来生成UDP数据包。
DNS主要使用的是UDP协议,但是在某些特殊情况下,DNS也会根据网络环境选择使用TCP协议。因为攻击者在对目标服务器进行分布式拒绝服务攻击的过程中,非常喜欢使用UDP/DNS协议。
由于DNS协议是一个十分重要的网络协议,对于网络从业人员而言,其高可用性是最重要的考虑因素。为了打破该协议的可用性,恶意攻击者可以向DNS解析器发送大量伪造的查询请求。值得注意的是,目前互联网中存在着上百万开放的DNS解析器,其中还有很多属于家庭网关。DNS解析器会认为这些伪造的查询请求是真实有效的,并且会对这些请求进行处理,在处理完成之后,便会向请求源返回DNS响应信息。如果查询请求的数量非常的多,DNS服务器很有可能会发送大量的DNS响应信息。这也就是我们常说的放大攻击,因为这种方法利用的是DNS解析器中的错误配置。如果DNS服务器的配置出现错误,那么DNS解析器很可能会在接收到一个非常小的DNS查询请求之后,向目标主机返回大量的payload。在另一种类型的攻击中,攻击者还可以通过向DNS服务器发送不符合规则的查询请求来进行攻击。
为此,我们将会在这篇文章中给大家介绍十个非常简单而实用的方法。大家可以利用这些方法来缓解DNS泛洪攻击所带来的影响,以便更好地保护DNS基础设施。
一、屏蔽主动发送的DNS响应信息
一个典型的DNS交换信息是由请求信息组成的。DNS解析器会将用户的请求信息发送至DNS服务器中,在DNS服务器对查询请求进行处理之后,服务器会将响应信息返回给DNS解析器。但值得注意的是,响应信息是不会主动发送的。
攻击者需要在请求信息抵达DNS解析器之前部署FortiDDoS,它可以作为一个开放的DNS解析器,或者作为DNS查询请求的查询服务器。
这是一种内嵌于网络中的设备,它每秒可以处理数百万次查询请求,而且还可以将查询信息和相对应的响应信息记录在内存表之中。
如果服务器在没有接收到查询请求之前,就已经生成了对应的响应信息,那么服务器就应该直接丢弃这一响应信息。这种机制能够有效地缓解反射攻击所带来的影响。
二、丢弃快速重传数据包
即便是在数据包丢失的情况下,任何合法的DNS客户端都不会在较短的时间间隔内向同一DNS服务器发送相同的DNS查询请求。
因此,如果从相同源地址发送至同一目标地址的相同查询请求发送频率过高,那么服务器必须将这些请求数据包丢弃。
三、如果DNS服务器已经将响应信息成功发送了,那么就应该禁止服务器在较短的时间间隔内对相同的查询请求信息进行响应-启用TTL
对于一个合法的DNS客户端而言,如果它接收到了响应信息,那么它就不会再次发送相同的查询请求。
如果数据包的TTL生存时间到了,那么系统应该对每一个响应信息进行缓存处理。
当攻击者通过大量查询请求来对DNS服务器进行攻击时,我们就可以屏蔽掉不需要的数据包了。
四、丢弃未知来源的DNS查询请求和响应数据
通常情况下,攻击者会利用脚本来对目标进行分布式拒绝服务攻击(DDoS攻击),而且这些脚本通常针对的都是软件中的漏洞。因此,如果我们能够在服务器中部署简单的匿名检测机制,我们就可以限制传入服务器的数据包数量了。
五、如果你此前从未见过这类DNS请求,请立刻丢弃这一数据包
这类请求信息很可能是由伪造的代理服务器所发送的,或者是由于客户端配置错误,也有可能是开发人员用于调试的请求信息。但是我们应该知道,这也有可能是攻击者发送的。所以无论是哪一种情况,都应该直接丢弃这类数据包。
创建一个白名单,在其中添加允许服务器处理的合法请求信息。
白名单可以屏蔽掉非法的查询请求信息以及此前从未见过的数据包。
这种方法能够有效地保护你的服务器不受泛洪攻击的威胁。
除此之外,这种方法也可以保证合法的域名服务器只对合法的DNS查询请求进行处理和响应。
六、要求DNS客户端证实其合法性
身份伪造/欺骗是DNS攻击中常用的一种技术。
如果服务器能够要求DNS客户端出示相应的凭证,并证明其合法性,那么服务器就可以避免接收到泛洪的数据包。
FortiDDoS也采用了这种反欺骗技术。
七、对响应信息进行缓存处理,以防止DNS服务器因过载而导致的宕机
FortiDDoS在产品中内嵌了高性能的DNS缓存工具,再加上硬件的逻辑处理,它每秒钟可以处理上百万条DNS查询请求。
如果某一查询请求对应的响应信息已经存在于服务器的DNS缓存之中,那么缓存就可以直接对请求进行处理。这样可以有效地防止服务器因过载而发生宕机。
八、使用ACLs
有的时候,你可能不希望服务器对查询请求中的某些信息进行处理。而我们可以通过其他的方式轻松地屏蔽掉这些信息。比如说,如果你不希望外部IP地址发送查询请求,那么你可以直接将这类请求数据包丢弃。
九、利用ACLs,BCP38,以及IP地址合法性来对查询请求进行过滤
每一个架设了DNS服务器的企业都应该限制其用户的凭证数量。
当服务器接收到了伪造的攻击数据包时,只需要设置一个简单的过滤器,就可以防止来自全世界各个地区的攻击向量对服务器进行攻击。
还有一种情况,某些伪造的数据包也许是由网络内部的地址所发送的。利用BCP38来对数据包进行过滤,也可以防止服务器接收来自于未知来源地址所发送的数据包。
如果服务提供商还为客户提供了DNS解析服务,那么提供商就可以利用BCP38来防止服务器接收来自于其客户或者内部地址的攻击数据包。
十、提供过量的可用带宽
如果服务器日常需要处理的DNS通信量达到了X Gbps,请确保你所提供的服务带宽不要超过一定的范围。如果你所提供的带宽超出了服务器所需要使用的,那么攻击者就有可能对你的服务器进行泛洪攻击。
总结
在本文中,我们给广大用户提供了十个非常简单的方法,这些方法可以有效地帮助你缓解基于DNS的DDoS攻击,并保证你所提供的服务可以满足客户的使用需求。