一種針對DNS緩存服務器的杠桿式攻擊
筆者發現一臺國內的機器流量異常,檢查發現這臺機器上運行的DNS緩存服務被人用作了攻擊的放大杠桿,這里簡單記一下。
發現流量異常,首先當然是檢查服務器上的TCP會話,發現了一些不太正常的東西,關閉之后流量減少,但仍然沒有回到正常水平。
于是聽包。這一聽發現一大片:
07:39:53.271744 IP 158.XX.XX.238.53019 > XX.XX.XX.XX.53: 56854+ [1au] ANY? isc.org. (36)
07:39:53.271772 IP 158.XX.XX.238.53019 > XX.XX.XX.XX.53: 56854+ [1au] ANY? isc.org. (36)
07:39:53.271784 IP 158.XX.XX.238.53019 > XX.XX.XX.XX.53: 56854+ [1au] ANY? isc.org. (36)
07:39:53.271792 IP 158.XX.XX.238.53019 > XX.XX.XX.XX.53: 56854+ [1au] ANY? isc.org. (36)
07:39:53.274225 IP 92.XX.XX.148.31650 > XX.XX.XX.XX.53: 23600+ [1au] ANY? isc.org. (36)
07:39:53.274252 IP 92.XX.XX.148.31650 > XX.XX.XX.XX.53: 23600+ [1au] ANY? isc.org. (36)
07:39:53.274262 IP 92.XX.XX.148.31650 > XX.XX.XX.XX.53: 23600+ [1au] ANY? isc.org. (36)
07:39:53.274270 IP 92.XX.XX.148.31650 > XX.XX.XX.XX.53: 23600+ [1au] ANY? isc.org. (36)
07:39:53.291822 IP 158.XX.XX.238.13616 > XX.XX.XX.XX.53: 56854+ [1au] ANY? isc.org. (36)
07:39:53.291850 IP 158.XX.XX.238.13616 > XX.XX.XX.XX.53: 56854+ [1au] ANY? isc.org. (36)
07:39:53.291860 IP 158.XX.XX.238.13616 > XX.XX.XX.XX.53: 56854+ [1au] ANY? isc.org. (36)
07:39:53.291869 IP 158.XX.XX.238.13616 > XX.XX.XX.XX.53: 56854+ [1au] ANY? isc.org. (36)
07:39:53.291877 IP 92.XX.XX.148.56278 > XX.XX.XX.XX.53: 23600+ [1au] ANY? isc.org. (36)
顯然,這樣來自同一個 IP 地址,在短時間內反復查詢同一個域名的現象是不正常的。為什么會是 isc.org?暫時不清楚,但是這樣的行為,顯然是利用這臺機器作為放大攻擊的杠桿。攻擊者發出偽造成最終受害者為源 IP 地址的DNS查詢包(這類包的尺寸較回應來說要小的多)到受害的DNS緩存服務器,而這些緩存服務器由于在本地已經有了查詢到的域名信息副本(這些域名是存在的),會立即向最終的受害者發出回應。這樣,攻擊者就能夠用較小的帶寬代價占滿最終受害者的下行帶寬,實現 DDoS 攻擊了。
由于是DDoS,在防御一方的角度看,阻止這類攻擊并不容易。不過,在傳統的網絡設計中,DNS緩存服務器是放在DMZ 里的,因此可以通過在路由上直接過濾掉全部來自外部的 DNS 回應包來緩解這類攻擊造成的影響。在運行DNS緩存服務器的管理員方面,則應限制對自己運行的DNS緩存服務器的訪問,例如只在內網接口上監聽DNS查詢請求,而外網接口只用來發出DNS請求和接收這些請求的回應,避免被壞人利用成為DDoS的杠桿。