当前位置: 首页 > 科技观察

PaloAlto近年DNS历史漏洞分析(下)

时间:2023-03-12 21:46:26 科技观察

PaloAlto近年DNS历史漏洞分析(上)递增计数器)。这种缓解措施使攻击更难执行。实际上,MAX_SIZE_OF_QUERY_ID更难。事务ID是16位,因此缓解措施使攻击比以前困难65536倍。这些缓解措施确实让攻击变得更加困难,但道高一尺,魔高一尺。16位随机密钥很大,但还不够大。让我们来计算一下。为了进行以下计算,我们需要记下一些数据:典型DNS响应的大小:100字节=800位;攻击者的带宽:1兆位/秒=1,000,000位合法响应返回解析器所需的时间:2秒;关于2秒的注意事项:如今使用现代互联网连接,DNS请求显然只需不到两秒即可完成,即使对于非缓存域也是如此。但是为了这个例子,我选择了延迟,但我也选择了过去的互联网速度:每秒1兆比特。有65536个可能的交易ID,我们有两秒的时间窗口来发送包含成功攻击的正确响应的响应。要计算每次攻击的成功率,我们需要计算出在实际合法响应到达解析器之前攻击者可以发送多少响应数据包。这很容易计算:带宽除以数据包大小乘以时间。在1Mb??it/s的带宽下,攻击者在一秒内最多可以发送1000000/800=1250个响应包,也就是说攻击者在两秒的窗口内可以发送2500个响应包。达到可能的攻击所需的尝试次数(即1Mbit/s带宽至少有50%的成功率)约为18次尝试。完整的计算是这样的,100万是我们在1mbits连接下每秒可以发送的比特数。我们将其除以800,得出每秒可以发送的响应数。因为有2秒的窗口,所以我们先乘以2再除以2的16次方,其中16是交易ID字段的大小。即单次攻击的成功率为了获得成功的攻击,我们需要在x次尝试中进行一次成功的尝试。我们的x次尝试称为“实验”,该实验所有可能结果的集合称为样本空间。击中样本空间中任何物体的概率显然是100%(这是等式中最外层的1)。为了获得可能的攻击机会,我们需要获取整个样本空间并从中减去任何没有“成功进行至少一次攻击”的东西,这是表示所有x次尝试都失败的另一种方式。一次尝试的失败是“全部(1)减去一次尝试的成功”也就是1减去成功率。然后我们告诉WolframAlpha我们正在寻找一个值大于0.5(即50%)的x。也就是说,一个带宽为1Mbit/s的攻击者仅需18次尝试,就可以在缓解攻击后获得大于50%的成功率,可见当年策划这场毁灭性攻击是多么容易。更多缓解措施回想起来选择如此弱的缓解措施似乎很奇怪,但重要的是要记住完全重新发明DNS协议是不可能的。它可能会破坏互联网,想想所有具有内置解析器的设备。他们将完全停止工作。但还有更多。如上所示,交易ID缓解措施很弱。因此,这次对源端口应用了相同的缓解措施。来自DNS客户端、解析器或名称服务器的每个DNS请求都来自一个源端口,该端口在缓解之前不是随机分配的。源端口是一个16位数字,与事务ID相同,仅用于功能目的。例如,解析器可能会尝试使用端口10650,如果该端口在之前的请求中已被使用,它将尝试使用10651,依此类推。当然,并非所有16位都可用,因为有其他用途的固定端口。源端口和事务ID一起用作DNS通信的密钥-一个32位密钥。请记住,因为这在我将进一步讨论的攻击中非常重要,所以那些额外的16位大大降低了攻击成功的可能性。之前,我们在使用1mbit/s带宽时的成功率为3.8%(您可以在WolframAlpha中查看计算)。应用源端口缓解后,使用与之前相同的数据,攻击成功的概率为0.00005821%,实现与之前相同的成功攻击所需的尝试次数为1190820。这使得攻击成功的可靠性降低,事实上,源端口随机化终结了大多数DNS缓存攻击。更高级的漏洞到目前为止,我们一直专注于单个DNS记录的缓存,www.example.com位于93.184.216.34,也称为A记录。我们将恶意软件下载到受害者自己的DNS服务器(例如路由器或Kubernetes集群)上,并通过这种方法努力攻击单个域。安全研究员DanKaminsky在2008年发现了一种更好的方法,它比我们目前为止在本文中讨论的方法更有效。这个漏洞在安全社区引起了不小的轰动,大致的执行方式和目前讨论的非常相似,也就是说我们仍然需要猜测交易ID和源端口。成功的概率差不多,但是按照卡明斯基的方法,如果我们成功了,我们可能会销毁更多的记录。NS记录顾名思义,名称服务器(NS)记录是指示哪个DNS服务器对域具有权威的DNS记录,这意味着哪个服务器包含该域的实际IP地址。在前面的示例中,example.com的NS记录将是一个服务器,其地址为www.example.com、email.example.com和任何?.example.com。攻击者的目标是攻击受害者的解析器,以便当受害者尝试访问www.example.com、email.example.com或任何?.example.com时,解析器将请求转发到攻击者的名称服务器,而不是example.com名称服务器。这样,攻击者可以控制对example.com的每个子域的访问,而不是像以前那样只控制www域。令人惊讶的是,该攻击与我们在本文中描述的攻击非常相似,但攻击者不会尝试使用A记录攻击解析器的缓存,而是尝试使用NS记录攻击缓存。攻击者首先会为他们想要攻击的域配置一个名称服务器,没有什么可以阻止任何人配置他们自己的名称服务器。但是,它通常没有意义,因为没有其他服务器会指向它。全区域攻击攻击者然后会继续向他们想要攻击的区域的子域发出DNS请求,它必须是一个没有缓存的域,这样他们就可以确保解析器将请求转发到根服务器。不仅如此,在我们的示例中,域的NS记录(example.com的权威名称服务器)也不应该被缓存。如果请求被缓存,解析器会将请求直接转发给权威名称服务器,甚至不会将请求转发给根服务器。攻击者让受害者的解析器将其请求转发给根服务器后,根服务器通常会回复一条NS记录,这大致相当于说,“我不知道答案,但你可以问那里的服务器。这里是它的IP地址。”为了成功攻击,攻击者现在需要接管根服务器并传播包含恶意软件的响应,然后再发送根服务器的响应。这是通过为所需域发送大量带有NS记录的响应来实现的,不要忘记攻击者还需要猜测事务ID(可能还有源端口)。每个NS回复都带有一个“胶水”记录,它是名称服务器的实际IP地址。使用其他方法,请求服务器将不知道在哪里可以找到名称服务器。解析器收到这条“胶水”记录,将其缓存起来,并联系“胶水”记录所指向的名称服务器,以获得所请求域的地址。如果攻击成功,从现在开始,向解析器发出的每个请求都会到达攻击者的名称服务器,该服务器不会缓存在攻击域区域(www.example.com中的example.com)下。在应用程序空间使用这种高级攻击,攻击者可以同时对大量域发起攻击。理论上,攻击者甚至可以攻击整个.com域。虽然攻击整个.com域是一项挑战,但在某些情况下,攻击者实际上会攻击整个缓存。具体例子如下:1.2015年1月26日,一个黑客组织成功将访问者重定向到马航网站,并将他们重定向到另一个显示恶意内容的网站。2.2011年11月7日,黑客设法攻击了整个互联网服务提供商的缓存,将用户重定向到安装了恶意软件的网站,然后再将他们重定向回他们请求的网站。3、2009年12月18日,一次DNS劫持攻击暂时影响了推特一个小时左右。每年都会发生数百起此类攻击。缓解措施没有实际的新缓解措施正在发生,因为这种攻击已经几乎不可能通过已经使用的事务ID和端口随机化缓解措施来执行。但是,如果攻击者设法绕过这些缓解措施,则使用此攻击而不是“常规”单A记录攻击会严重得多。和以前一样,使用交易ID和端口随机化来创建一个足够大的密钥,使攻击者难以猜测,从而起到缓解作用。最近的漏洞即使DNS协议被认为是安全的,开发人员也可能无法安全地实施它。例如,有一种常见的误解认为随机函数应该是不可预测的,因此它们可以用来生成加密密钥。但是,这些函数不用于加密或安全。不幸的是,在DNS实施的情况下,随机化功能的滥用经常发生。这仅发生在两年前,使用用于在CoreDNS中随机化事务ID的函数。开发人员选择使用math.rand,它是Golang中的非加密安全伪随机数生成器。这是个大问题。如果攻击者能够预测到交易ID,那么他们绝对可以通过本文前面描述的方式攻击CoreDNS的缓存。这意味着每个使用CoreDNS作为其DNS解析器的应用程序都容易受到恶意DNS记录的攻击。也就是说,由于CoreDNS主要用于Kubernetes,因此整个集群中每个节点的每个应用程序都容易受到这种攻击。另一个例子是几周前发现的一项新技术,它使用Internet控制消息协议(ICMP)来确定服务器上哪些端口已关闭,从而揭示哪些端口实际上是打开的。这用于DNS攻击,可以大大减少攻击者需要猜测的端口数量,从而降低前面解释的端口随机化缓解措施的有效性。当然,也有典型的与缓存无关的漏洞,比如缓冲区溢出。dnsmasq是许多Linux发行版和路由器中使用的常见DNS解析器,甚至在早期版本的Kubernetes中也使用过。近年来,人们发现dnsmasq容易受到许多内存漏洞的影响,这些漏洞可能导致拒绝服务(DoS)、远程代码执行(RCE)和其他问题。总结如果成功,本文中描述的DNS攻击将是毁灭性的。得益于现代缓解措施,攻击者不太可能发起DNS攻击,除非结合解析器应用程序中的任何其他漏洞。不幸的是,今天仍然经常发现此类漏洞。多年来,研究人员发现了缓解我们在本文中讨论的一些漏洞的缓解措施,例如用户数据报协议(UDP)碎片。尽管如此,由于当今的安全浏览和证书的使用,即使攻击者设法破坏域的DNS服务器,受害者的浏览器也很可能由于证书不匹配而无法加载页面。但是,该技术仍然可以通过使ISP的DNS解析器攻击并将请求转发到不存在的IP地址来进行大规模的DoS攻击。可以通过多种方式保护PaloAltoNetworks用户免受本文所述的攻击。PaloAltoNetworks下一代防火墙可以通过检测可疑的DNS查询和异常的DNS响应来阻止DNS攻击。与消耗或大量流量相关的攻击可以通过防火墙内置的DoS或区域保护配置文件来处理,这些保护由涵盖DNS威胁和指标的DNS安全服务补充。此外,PrismaCloud可以通过警告云中过时和易受攻击的组件以及配置错误的应用程序来保护集群。本文中描述的大多数攻击都需要破坏集群的内部网络,以便能够从内部向DNS服务器发送恶意数据包。此类攻击几乎总是通过利用过时和配置错误的应用程序来实现。本文翻译自:https://unit42.paloaltonetworks.com/dns-vulnerabilities/如有转载请注明出处。