Linux

getaddrinfo() 的 Glibc 漏洞緩解

  • March 1, 2016

今天遇到了一個針對 glibc 的漏洞利用,它涉及到 getaddrinfo() 呼叫以進行 DNS 解析。我在兩個面向網際網路的 Bind9 機器上執行 Ubuntu 12.04。我不確定我是否完全理解這個漏洞,但它似乎是由來自惡意 DNS 伺服器的大量回復引起的。緩解措施之一是*“防火牆丟棄 UDP DNS 數據包 > 512 字節”*,因此我在 DNS 伺服器上配置了 netfilter 以丟棄來自或去往埠 53 的任何 UDP > 512 字節: -A INPUT -i lo -j ACCEPT -A INPUT -p udp --sport 53 -m length --length 511:65535 -j DROP -A INPUT -p udp --dport 53 -m length --length 511:65535 -j DROP -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

有沒有更好的方法來使用綁定設置或任何東西?我已經用 scapy 測試了該規則,它確實阻止了在埠 53 上拋出的大於 512 的 UDP 數據包。

根據回復更新: -A INPUT -i lo -j ACCEPT -A INPUT -p udp --sport 53 -m length --length 949:65535 -j DROP -A INPUT -p udp --dport 53 -m length --length 949:65535 -j DROP -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

和*/etc/bind/named.conf.options*

options {
  ...
  // 2016-02-17 - tmb - glibc exploit mitigation
  edns-udp-size 900 ;
  max-udp-size 900 ;
};

更新 2 :正如下面atdre所指出的,Cloudflare 嘗試了上述技術,雖然無法傳輸整個有效負載,但記憶體損壞仍然存在。我想我會調查Unbound

如果你在本地執行 bind,這會給你一個測試:

dig @127.0.0.1 tcf.rs.dns-oarc.net txt

如此處所述:https ://www.dns-oarc.net/oarc/services/replysizetest 。

你會得到這樣的回复:

root@myhost:~# dig @127.0.0.1 tcf.rs.dns-oarc.net txt

; <<>> DiG <<>> @127.0.0.1 tcf.rs.dns-oarc.net txt
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61575
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 26, ADDITIONAL: 27

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1024
;; QUESTION SECTION:
;tcf.rs.dns-oarc.net.           IN      TXT

;; ANSWER SECTION:
tcf.rs.dns-oarc.net.    60      IN      CNAME   tcf.x981.rs.dns-oarc.net.
tcf.x981.rs.dns-oarc.net. 59    IN      CNAME   tcf.x986.x981.rs.dns-oarc.net.
tcf.x986.x981.rs.dns-oarc.net. 58 IN    CNAME   tcf.x991.x986.x981.rs.dns-oarc.net.
tcf.x991.x986.x981.rs.dns-oarc.net. 57 IN TXT   "Tested at 2016-02-17 15:44:36 UTC"
tcf.x991.x986.x981.rs.dns-oarc.net. 57 IN TXT   "xx.xx.xx.xx DNS reply size limit is at least 991"

你可以添加綁定選項

options {
 ...
 edns-udp-size 1024 ;
 max-udp-size 1024 ;
};

在名為.conf 的文件中

如此處所述:https ://labs.ripe.net/Members/anandb/content-testing-your-resolver-dns-reply-size-issues 。

我也會將它與其他緩解措施結合使用。

引用自:https://serverfault.com/questions/757645