| CVE編號 | CVE-2018-5732 CVE-2018-5733 CVE-2018-5734 |
|---|---|
| 影響產品 | DHCP 4.1.0 ~ 4.1-ESV-R15 /DHCP 4.2.0 ~ 4.2.8/ DHCP 4.3.0 ~ 4.3.6/ DHCP 4.4.0/ BIND 9.10.5-S1 ~ 9.10.5-S4 /BIND 9.10.6-S1 ~ 9.10.6-S2 |
| 解決辦法 | (1)在server設定參數servfail-ttl為0,停用SERVFAIL cache,防止SERVFAIL rcode成為可用途徑,自然不會發生badcache.c程式碼assertion failure。 (2)查看http://www.isc.org/downloads/,展開BIND及ISC DHCP軟體區,直接選擇所需項目,目前供應版本如下: BIND 9.9.11-P1 |
| 張貼日 | 2018-03-06 |
| 上稿單位 | TWCERT/CC |
●概述:
非營利的網路系統協會(ISC:Internet Systems Consortium),發展幾項關鍵技術,如BIND、ISC DHCP及Kea,兼具全球13個DNS root server其中之F-root營運者身分。始於1980年代於加州柏克萊大學發展的Berkeley Internet Name Domain,簡稱BIND,若SERVFAIL cache啟用,且接收處理特殊型態之request,會觸發badcache.c斷言異常,加上遞迴影響,讓重複性邏輯錯誤干擾正常功能;另Dynamic Host Configuration Protocol網路服務,其dhclient service處理內含特製DHCP選項之response,將觸發buffer overflow,同樣地dhcpd service面對數十億以上封包數,造成reference counter累加超過32 bit所能負荷而溢位,亦耗盡記憶體,DHCP、BIND兩者漏洞均屬遠端觸發型DoS,ISC已提供安全更新,俾供自行安裝修補。
●編註:
(1)DHCP 緩衝區溢位
(1-1)因DHCP設計缺陷,對於處理DHCP options時所在緩衝區,缺乏記憶體越界檢查,若惡意伺服器(或任意假託server的實體設備),送出一個response封包,內含特別構成之DHCP選項,導致程式運算DHCP options觸發buffer overflow,此際存取記憶體將瓦解dhclient服務,作業系統採用ALSR(address space layout randomization)算是較佳防護方案,但無法確保完全抑制buffer overflow。
(1-2)DHCP使用長度32 bit之參照計數器(reference counter),換算十進位約可累進40億次,只要攻擊者有能力送出超過數十億的鉅量封包給受害server,讓counter值大於40億,32 bit不敷使用而產生溢位現象,引發dhcpd service耗盡記憶體資源,結局就是crash。
(2)BIND 斷言邏輯錯誤
(2-1)以C語言編譯的開源軟體BIND發展較早,在當時程式設計中,斷言(assertion)是一種放在程式中的一階邏輯,目的是驗證程式結果是否如預期,當程式執行到斷言位置時,若斷言不為真則程式中止,並發出錯誤警訊,現行主流程式語言則沒有斷言檢查機能,出錯時程式也不中止。
(2-2)本次BIND弱點有二前提,系統運作”遞迴”且”SERVFAIL cache”屬性設定啟動,然主體邏輯瑕疵仍在badcache.c原始設計上,當BIND接收到特定型態之request封包,會誤擇SERVFAIL rcode而非正常的FORMERR rcode,既然循SERVFAIL rcode的支線推進處理程序,receiving view功能又涉及”SERVFAIL cache”時,且惡意request並未包含完整必要資訊,此際會觸發badcache.c的斷言(assertion)異常,囿於遞迴程式處理失序,後續衍生DoS,癥結固然在badcache.c程式邏輯,但停用”SERVFAIL cache”,可避免踏出錯誤的第一步。
