網路安全

DNS 放大攻擊(DNS amplification)

假設你能讓一聲輕語從別人的嘴裡變成一聲大喊,對準你的受害者射出。這就是 DNS 放大背後的把戲:攻擊者送出微小的請求,觸發大得多的回應,並安排讓那些大回應落在受害者身上。它結合了兩個想法——反射(把流量從無辜的第三方伺服器彈出去,使它看起來不像來自攻擊者)與放大(把小請求變成大回應)——來廉價地發動一場強大的分散式阻斷服務洪泛。

逐步來看:DNS 用 UDP,而 UDP(不像 TCP)不需要交握,所以伺服器會回應「封包宣稱來自誰」的那個對象——不做驗證。攻擊者送一個小小的 DNS 查詢(也許 60 個位元組)給許多開放的 DNS 解析器,但把來源 IP 位址偽造成受害者的。每個解析器都盡責地把它的答案送出去——送給受害者。最關鍵的是,攻擊者挑那些答案很大的查詢(要求一個網域的所有記錄,可能回傳比查詢大上許多倍的回應)。於是一個微小的偽造請求產生一個瞄準受害者的大回應;乘上數千個解析器,受害者就被它從未要求過的流量埋了,而攻擊者自己的頻寬仍然很小。

為什麼重要:放大讓攻擊者能以小搏大——比方說 50 倍的放大係數,意味著攻擊者不大的上傳變成 50 倍的流量痛擊受害者。DNS 不是唯一的放大器(NTP 等也行);共通的成分是一個「對小小的偽造請求給出大回應」的 UDP 服務。防禦針對的就是這些成分:網路應該過濾偽造的來源位址(讓封包無法謊稱自己來自哪裡),而 DNS 營運者不應運行「開放」、會回應任何人的解析器。這個攻擊是兩個誠實事實的直接後果——UDP 不驗證發送者,而網際網路歷來沒有阻止來源位址偽造。

攻擊者送一個 60 位元組的 DNS 查詢給數千個開放解析器,把受害者的 IP 偽造成來源,並要求一組會回傳 3000 位元組答案的記錄。每個解析器把它的大答案寄給受害者——50 倍的放大。受害者淹沒在回應裡;攻擊者卻幾乎沒費什麼力氣。

小小的偽造查詢進去、大大的回應出來——對準受害者。

放大之所以有效,只是因為 UDP 不驗證發送者、而來源位址偽造沒被擋下。解法在上游:過濾偽造的來源 IP、不要運行開放解析器——這不是受害者一己之力能阻止的。

又称
DNS amplification attackDNS reflection attackDNS 放大攻擊DNS 反射攻擊