Palo Alto 對近些年 DNS 歷史漏洞的整理分析(下)
Palo Alto 對近些年 DNS 歷史漏洞的整理分析(上)
新緩解措施
已實(shí)現(xiàn)的明顯緩解措施是為每個請求隨機(jī)分配事務(wù)ID(而不是使用升序計(jì)數(shù)器)。這種緩解措施使攻擊更加難以執(zhí)行。其實(shí),MAX_SIZE_OF_QUERY_ID更難。事務(wù)ID為16位,因此緩解措施使攻擊變得比以前困難65536倍。
這些緩解措施著實(shí)使攻擊犯難了,不過道高一尺魔高一丈。 16位隨機(jī)密鑰雖然很大,但還不夠大。讓我們來算算。
- 為了進(jìn)行以下計(jì)算,我們需要記下一些數(shù)據(jù):
- 典型DNS響應(yīng)的大小:100字節(jié)= 800位;
- 攻擊者的帶寬:每秒1兆位= 1000000位
- 合法響應(yīng)返回解析器所需的時間:2秒;
有關(guān)2秒的注意事項(xiàng):如今,使用現(xiàn)代互聯(lián)網(wǎng)連接,即使對于未緩存的域,顯然也只需不到兩秒即可完成DNS請求。但是出于示例的考慮,我選擇了延遲,不過我還選擇了過去的網(wǎng)速:每秒1兆位。
有65536個可能的事務(wù)ID,我們有兩秒的時間窗口發(fā)送一個響應(yīng),其中包含成功攻擊的正確響應(yīng)。為了計(jì)算每次攻擊的成功率,我們需要計(jì)算出在實(shí)際的合法響應(yīng)到達(dá)解析器之前,攻擊者可以發(fā)送多少響應(yīng)包。這很容易計(jì)算:帶寬除以數(shù)據(jù)包大小乘以時間。
憑借1 Mbit / s的帶寬,攻擊者可以在一秒鐘內(nèi)發(fā)送多達(dá)1000000 / 800 = 1250個響應(yīng)數(shù)據(jù)包,這意味著攻擊者在兩秒鐘的窗口中可以發(fā)送2500個響應(yīng)數(shù)據(jù)包。達(dá)到可能的攻擊所需的嘗試次數(shù)(即1 Mbit / s帶寬至少50%的成功率)約為18次嘗試。
完整的計(jì)算是這樣的,100萬是我們用1mbits的連接每秒可以發(fā)送的位數(shù)。我們將其除以800,這就是產(chǎn)生了每秒可以發(fā)送的響應(yīng)數(shù)量。由于2秒的窗口,我們將其乘以2,然后將其除以除以2的16次方,16是事務(wù)ID字段的大小。即單次攻擊的成功率為了獲得成功的攻擊,我們需要在x次嘗試中成功進(jìn)行一次嘗試。我們的x次嘗試稱為“實(shí)驗(yàn)”,該實(shí)驗(yàn)所有可能結(jié)果的集合稱為樣本空間。擊中樣本空間中任何物體的概率顯然是100%(這是方程中最外層的1)。為了獲得可能的攻擊的機(jī)會,我們需要獲取整個樣本空間并從中減去任何不能“成功地進(jìn)行至少一次攻擊”的內(nèi)容,也就是所有x次嘗試都失敗的另一種說法。一次嘗試的失敗就是“所有的(1)減去一次嘗試的成功”也就是1減去成功率。然后,我們告訴Wolfram Alpha,我們正在尋找一個x,該x的值將大于0.5(即50%)。
換句話說,只有18次嘗試,帶寬為1 Mbit / s的攻擊者在緩解攻擊后,通過此攻擊可以獲得的成功率大于50%,可見當(dāng)年策劃這場毀滅性的攻擊有多容易。
更多緩解措施
回過頭來看選擇如此弱的緩解措施似乎有些奇怪,但重要的是要記住,完全重新發(fā)明DNS協(xié)議是根本不可能的。它可能會毀了互聯(lián)網(wǎng),想想所有的設(shè)備都有一個內(nèi)置的解析器。他們會完全停止工作。但還有更多的事情要做。如上所示,事務(wù)ID緩解很弱。因此,這次對源端口使用了相同的緩解措施。來自DNS客戶端、解析器或名稱服務(wù)器的每個DNS請求都來自一個源端口,在緩解之前,該端口并未被隨機(jī)分配。
源端口為16位數(shù)字,與事務(wù)ID相同,僅用于功能目的。例如,解析器可能嘗試使用端口10650,如果先前請求中正在使用該端口,則它將嘗試使用10651,依此類推。當(dāng)然,并非所有16位都可用,因?yàn)橛杏糜谄渌猛镜墓潭ǘ丝凇?/p>
源端口和事務(wù)ID一起用作DNS通信的密鑰-32位密鑰。請記住,因?yàn)檫@在攻擊中將非常重要,我將進(jìn)一步討論,多出來的這16位大大降低了成功攻擊的可能性。
以前,使用1mbit /s帶寬時,我們的成功率為3.8%(你可以在Wolfram Alpha中查看相關(guān)計(jì)算)。使用源端口緩解措施后,如果使用與以前相同的數(shù)據(jù),則成功攻擊的可能性為0.00005821%,實(shí)現(xiàn)與以前相同的成功攻擊所需的嘗試次數(shù)為1190820。這使得攻擊的成功不夠可靠,實(shí)際上,源端口隨機(jī)化終結(jié)了大多數(shù)DNS緩存攻擊。
更高級的漏洞
到目前為止,我們主要關(guān)注單個DNS記錄的緩存,www.example.com位于93.184.216.34,也稱為A記錄。我們在受害者自己的DNS服務(wù)器(如路由器或Kubernetes集群)上下載惡意軟件,通過這種方法,我們努力進(jìn)行攻擊以攻擊單個域。
安全研究員Dan Kaminsky在2008年發(fā)現(xiàn)了一種更好的方法,它比我們迄今為止在此文中討論的方法更加有效。這個漏洞在安全界引起了軒然大波,通用執(zhí)行方法與到目前為止討論的方法非常相似,這意味著我們?nèi)匀恍枰聹y事務(wù)ID和源端口。成功的可能性幾乎相同,但是按照卡明斯基的方法,如果我們成功了,我們可能會毀掉更多的記錄。
NS記錄
顧名思義,名稱服務(wù)器(NS)記錄是DNS記錄,指示哪個DNS服務(wù)器對域具有權(quán)威性,這意味著哪個服務(wù)器包含域的實(shí)際IP地址。在前面的示例中,example.com的NS記錄將是一臺服務(wù)器,其中包含www.example.com,email.example.com和任何?.example.com的地址。
攻擊者的目標(biāo)是攻擊受害者的解析器,使受害者在嘗試訪問www.example.com,email.example.com或任何?.example.com時,解析器會將請求轉(zhuǎn)發(fā)給攻擊者的名稱服務(wù)器,而不是example.com名稱服務(wù)器。
這樣,攻擊者就可以控制對example.com的每一個子域的訪問,而不是像以前那樣僅控制www域。
令人驚訝的是,該攻擊與我們在本文中描述的攻擊非常相似,但是攻擊者沒有嘗試使用A記錄來攻擊解析器的緩存,而是會嘗試使用NS記錄來攻擊緩存。
攻擊者首先會為他們想要攻擊的域配置一個名稱服務(wù)器,沒有什么可以阻止任何人配置他們自己的域名服務(wù)器。然而,它通常毫無意義,因?yàn)闆]有其他服務(wù)器會指向它。

整個區(qū)域攻擊
然后攻擊者會繼續(xù)向他們想要攻擊的區(qū)域的子域發(fā)出DNS請求,它必須是一個沒有緩存的域,這樣他們就可以確定解析器會將請求轉(zhuǎn)發(fā)給根服務(wù)器。不僅如此,在我們的示例中,該域名的NS記錄(example.com的權(quán)威域名服務(wù)器)也不應(yīng)該被緩存。如果緩存了請求,解析器將直接將請求轉(zhuǎn)發(fā)給權(quán)威名稱服務(wù)器,甚至不需要將請求轉(zhuǎn)發(fā)給根服務(wù)器。
攻擊者使受害者的解析器將其請求轉(zhuǎn)發(fā)到根服務(wù)器后,根服務(wù)器通常會以NS記錄進(jìn)行回復(fù),這大致相當(dāng)于說:“我不知道答案,但是您可以在那兒詢問該服務(wù)器。這是它的IP地址。”
為了成功進(jìn)行攻擊,攻擊者現(xiàn)在需要在發(fā)送根服務(wù)器的響應(yīng)之前超越根服務(wù)器并傳播包含有惡意軟件的響應(yīng)。這是通過發(fā)送帶有所需域的NS記錄的大量響應(yīng)來實(shí)現(xiàn)的,別忘了攻擊者還需要猜測交易ID(可能還有源端口)。
每個NS回復(fù)都帶有一個“glue”記錄,這是名稱服務(wù)器的實(shí)際IP地址。如果采用其他方法,則請求服務(wù)器將不知道在哪里可以找到名稱服務(wù)器。解析器接收此“glue”記錄,對其進(jìn)行緩存并與“glue” 記錄指向的名稱服務(wù)器聯(lián)系,以獲取所請求域的地址。
如果攻擊成功,從現(xiàn)在開始,每一個向解析器發(fā)出的請求都將到達(dá)攻擊者的域名服務(wù)器,該域名在攻擊域區(qū)域(www.example.com中的example.com)下沒有緩存。
應(yīng)用空間
使用這種高級攻擊,攻擊者可以同時對大量域發(fā)起攻擊。理論上,攻擊者甚至可以攻擊整個.com域。
盡管攻擊整個.com域?qū)⑹且粋€挑戰(zhàn),但在某些情況下,攻擊者實(shí)際上會攻擊整個緩存。具體示例如下:
1.2015年1月26日,一個黑客組織設(shè)法將訪問者重定向至馬來西亞航空網(wǎng)站,并將其重定向到另一個顯示惡意內(nèi)容的網(wǎng)站。
2.2011年11月7日,黑客設(shè)法攻擊了整個互聯(lián)網(wǎng)服務(wù)提供商的緩存,將用戶重定向到安裝了惡意軟件的網(wǎng)站,然后再將他們重定向回他們要求的網(wǎng)站。
3.2009年12月18日,DNS劫持攻擊使Twitter暫時受到約一個小時的影響。
每年都會發(fā)生數(shù)百起此類攻擊。
緩解措施
沒有實(shí)際的新緩解措施發(fā)生,因?yàn)槭褂靡呀?jīng)使用的事務(wù)ID和端口隨機(jī)化緩解措施幾乎已經(jīng)無法執(zhí)行此攻擊。但是,如果攻擊者設(shè)法繞過了這些緩解措施,那么使用這種攻擊而不是“常規(guī)的”單A記錄攻擊將會嚴(yán)重得多。
與前面一樣,使用事務(wù)ID和端口隨機(jī)化一起創(chuàng)建一個足夠大的密鑰,使攻擊者難以猜測,從而起到緩解作用。
最近的漏洞
即使DNS協(xié)議被認(rèn)為是安全的,開發(fā)人員也可能無法安全地實(shí)現(xiàn)它。
例如,存在一個普遍的誤解,即隨機(jī)函數(shù)應(yīng)該是不可預(yù)測的,因此可以將其用于生成加密密鑰。但是,這些函數(shù)并不用于密碼學(xué)或安全性。不幸的是,在DNS實(shí)現(xiàn)的情況下經(jīng)常會發(fā)生隨機(jī)化函數(shù)的誤用。
僅在兩年前,使用用于隨機(jī)化CoreDNS中事務(wù)ID的函數(shù)就發(fā)生了這種情況。開發(fā)人員選擇使用math.rand,它是Golang中非加密安全的偽隨機(jī)數(shù)生成器。這是一個大問題。如果攻擊者可以預(yù)測交易ID,則他們絕對能夠按照本文前面所述的方式攻擊CoreDNS的緩存。這意味著每個使用CoreDNS作為其DNS解析器的應(yīng)用程序都容易受到惡意DNS記錄的攻擊。換句話說,由于CoreDNS主要用于Kubernetes,因此整個集群中每個節(jié)點(diǎn)中的每個應(yīng)用程序都容易受到此攻擊。
另一個示例是幾周前才發(fā)現(xiàn)的一項(xiàng)新技術(shù),該技術(shù)使用Internet控制消息協(xié)議(ICMP)來確定服務(wù)器上哪些端口已關(guān)閉,從而揭示了哪些端口實(shí)際上是打開的。這在DNS攻擊中使用,可以大大減少攻擊者需要猜測的端口數(shù)量,從而降低了前面解釋的端口隨機(jī)緩解措施的有效性。
當(dāng)然,還有一些與緩存不相關(guān)的典型漏洞,例如緩沖區(qū)溢出。 dnsmasq是許多Linux發(fā)行版和路由器中使用的常見DNS解析器,甚至在Kubernetes的早期版本中也使用過。近年來,發(fā)現(xiàn)dnsmasq易受眾多內(nèi)存漏洞的影響,這些漏洞可能導(dǎo)致拒絕服務(wù)(DoS),遠(yuǎn)程代碼執(zhí)行(RCE)等問題。
總結(jié)
本文中描述的DNS攻擊如果成功,將是毀滅性的。由于有了現(xiàn)代的緩解措施,攻擊者不太可能發(fā)動DNS攻擊,除非與解析器應(yīng)用程序中的任何其他漏洞結(jié)合在一起。不幸的是,這樣的漏洞至今還經(jīng)常被發(fā)現(xiàn)。
多年來,研究人員發(fā)現(xiàn)了可以緩解我們在本文中討論的一些緩解漏洞的措施,例如,用戶數(shù)據(jù)報(bào)協(xié)議(UDP)分段。
盡管如此,隨著當(dāng)今安全瀏覽和證書的使用,即使攻擊者設(shè)法攻擊某個域的DNS服務(wù)器,由于證書不匹配,瀏覽器的受害者很可能不會加載該頁面。但是,通過使ISP的DNS解析器攻擊并將請求轉(zhuǎn)發(fā)到不存在的IP地址,該技術(shù)仍然可以用于巨大的DoS攻擊。
Palo Alto Networks的用戶可以通過多種方式免受本文所述的攻擊,Palo Alto Networks下一代防火墻可以通過檢測可疑DNS查詢和異常DNS響應(yīng)來阻止DNS攻擊。與消耗或大量通信量有關(guān)的攻擊可通過防火墻內(nèi)置的DoS或區(qū)域保護(hù)配置文件來處理,這些保護(hù)是通過DNS安全服務(wù)覆蓋DNS威脅和指示器的補(bǔ)充。
此外,Prisma Cloud可以通過警告過時和易受攻擊的組件以及云中配置錯誤的應(yīng)用程序來保護(hù)集群。本文描述的大多數(shù)攻擊都要求破壞集群的內(nèi)部網(wǎng)絡(luò),以便能夠從內(nèi)部向DNS服務(wù)器發(fā)送惡意數(shù)據(jù)包,此類漏洞幾乎總是通過利用過時且配置錯誤的應(yīng)用程序而發(fā)生。
本文翻譯自:https://unit42.paloaltonetworks.com/dns-vulnerabilities/如若轉(zhuǎn)載,請注明原文地址。