◆羅晨 孫海波
(1.中國廣播電視網絡有限公司 北京 100037;2.國家廣播電視總局廣播電視科學研究院 北京 100866)
當今社會,計算機網絡已深入到人們生活和工作的方方面面,承擔著重要的角色。截至2020年6月,我國IPv4 地址數量為38907萬個,IPv6 地址數量為50903 塊/32。我國國家和地區頂級域名“.CN”數量為2304 萬個,較2019年底增長2.8%[1]。互聯網承載著許多重要業務和敏感信息,難免會被不法分子所覬覦。近年來,網站服務器或用戶端被惡意攻擊者造成藍屏死機,導致業務系統崩潰中斷的事件常有發生,造成嚴重后果。筆者長期從事網絡安全工作,現就近期微軟披露的“Windows TCP/IP遠程執行代碼”漏洞進行分析,淺談如何做好計算機網絡安全問題的防范,探析加強安全防護的方法措施,保障重要服務器以及終端計算機的安全。
微軟官網發布的2020年10月份月度補丁公告中,提到了“Windows TCP/IP遠程執行代碼”漏洞,影響范圍非常廣泛。針對該漏洞,筆者對單位內部的服務器做了相關的漏洞掃描驗證,發現存在該漏洞。漏洞詳細情況如下:漏洞名稱為“Windows TCP/IP遠程執行代碼”;漏洞數量1 個;漏洞等級為高危;漏洞服務器IP 地址為192.168.83.28;漏洞描述為Windows TCP/IP 協議棧在處理ICMPv6(Internet Control Managemet Protocol Version 6,即互聯網控制信息協議版本六)路由廣告包時,存在遠程代碼執行漏洞(CVE-2020-16898),攻擊者通過發送特制的ICMPv6 路由廣告包到目標Windows 主機上,可實現遠程代碼執行。
為了進一步確認該漏洞的危害程度,筆者進行了進一步的驗證工作,詳細過程如下。
(1)構建攻擊機。漏洞驗證的前提是攻擊機與受害機能夠正常進行IPv6 通信,需要開啟IPv6 的入站規則協議。筆者使用的是VMware 虛擬機,創建Win10 1909 版本、32 位操作系統,并在虛擬機中NAT 設置一個子網,啟用IPv6 協議,如圖1所示。

圖1 開啟IPv6 地址設置
(2)獲得攻擊和受害機IPv6 地址。在攻擊機和受害機上分別打開命令提示框窗口,執行ipconfig 命令,查閱IPv6 地址,以便后續構造攻擊代碼,如圖2所示。受害機IPv6 地址是fe80::4c08:452:39c9:27b1%4,攻擊機IPv6 地址是fe80::8db2:3e6f:1b76:fcef%5。

圖2 受害機IPv6 地址
(3)構建攻擊POC 代碼。根據第2 步中獲取的攻擊機和受害機IPv6 地址信息,替換POC 代碼中的v6_dst 和v6_src 數值,其中v6_dst代表受害機的IPv6 信息,v6_src 代表攻擊機的IPv6 信息。e.dns 中構造了一個Windows TCP/IP 堆棧不能正確處理的ICMPv6 的路由器廣告包,如圖3所示。當攻擊機向受害機發送此廣告包時,若受害機藍屏死機,即說明受害機存在“Windows TCP/IP遠程執行代碼”漏洞。

圖3 構造攻擊POC 代碼
(4)實施攻擊。攻擊機上安裝Python 運行環境,筆者使用的編譯工具是PyCharm Professional 2020.3。通過編譯工具執行第3 步中編譯好的攻擊POC 代碼,攻擊則將構造好的特定IPv6 數據包發送給受害機,如圖4所示。由于受害機TCP/IP 堆棧無法處理攻擊機發送的數據包,造成自身藍屏死機。因此,我們判定受害機存在“Windows TCP/IP遠程執行代碼”漏洞。

圖4 Python 環境下執行攻擊腳本
CVE-2020-16898 被稱為“壞鄰居”漏洞,造成該漏洞的原因是,當Windows TCP/IP 協議棧不能正確處理ICMPv6 路由廣告包時,導致遠程代碼執行漏洞。具體過程為,當Windows TCP/IP 協議堆棧不能正確處理使用選項類型為25(遞歸DNS 服務器選項)且長度字段值為偶數的ICMPv6 路由器廣告數據包時,存在此漏洞。DNS 服務器在使用選項類型為25 時,長度以8 個字節為增量進行計數,因此長度為3 的遞歸DNS 服務器選項的總長度應為24 個字節。DNS 服務器在使用選項類型為25 時,該選項本身包含五個字段:IPv6 遞歸DNS 服務器的類型、長度、保留、生存時間、地址。前四個字段始終總長度為8 個字節,但最后一個字段可以包含可變數量的IPv6 地址,每個IPv6 地址均為16 個字節。當提供一個偶數長度值的ICMPv6 路由器廣告數據包時,Windows TCP/IP 堆棧錯誤地將網絡緩沖區的前進量減少了8 個字節。這是因為堆棧在內部以16 字節為增量進行計數,因此無法解決使用非RFC 兼容長度值的情況。這種不匹配導致堆棧將當前選項的最后8 個字節解釋為第二個選項的開始,最終導致緩沖區溢出,從而導致此漏洞[2]。
由此可知,CVE-2020-16898 是一個與IPv6 協議有關,類型為棧溢出的漏洞,危害嚴重。攻擊者可通過向受影響主機發送特制ICMPv6 路由廣告包,進而在目標服務器或客戶端上執行代碼。該漏洞影響范圍較廣,包括Windows 10、Windows Server 2019 等至少23 個操作系統。
針對“Windows TCP/IP遠程執行代碼”漏洞,建議采用微軟官方解決方案及緩解方案來防護此漏洞。
Windows 系統默認啟用 Microsoft Update,當檢測到可用更新時,將會自動下載更新,并在下一次啟動時安裝。還可通過以下步驟快速安裝更新:
(1)點擊“開始菜單”或按Windows 快捷鍵,點擊進入“設置”。
(2)選擇“更新和安全”,進入“Windows 更新”(Windows 8、Windows 8.1、Windows Server 2012 以及Windows Server 2012 R2 可通過控制面板進入“Windows 更新”,步驟為“控制面板”-> “系統和安全”->“Windows 更新”)。
(3)選擇“檢查更新”,等待系統自動檢查并下載可用更新。
(4)重啟計算機,安裝更新。
系統重新啟動后,可通過進入“Windows 更新”->“查看更新歷史記錄”查看是否成功安裝了更新。對于沒有成功安裝的更新,可以點擊該更新名稱進入微軟官方更新描述鏈接,點擊最新的SSU 名稱并在新鏈接中點擊“Microsoft 更新目錄”,然后在新鏈接中選擇適用于目標系統的補丁進行下載并安裝。
另外,對于不能自動更新的系統版本(如Windows 7、Windows Server 2008、Windows Server 2008 R2),可以到微軟官網自行下載對應系統版本的2020年10月補丁并安裝。
可以使用下面的PowerShell命令禁用ICMPv6 RDNSS(Recursive DNS Server,遞歸域名服務器),以防止攻擊者利用此漏洞。此解決方案僅適用于Windows 1709 及更高版本。
netsh int ipv6 set int *INTERFACENUMBER*rabaseddnsconfig=disable
注意:此變更無需重啟系統
可以使用下面的PowerShell 命令恢復:
netsh int ipv6 set int *INTERFACENUMBER*rabaseddnsconfig=enable
注意:此變更無需重啟系統。
隨著互聯網技術的迅猛發展,網絡安全漏洞也越來越多。2020年上半年,國家信息安全漏洞共享平臺收集整理信息系統安全漏洞11073 個,較2019年同期(5853 個)增長89.2%[1]。這次發現的“Windows TCP/IP遠程執行代碼”漏洞,也只是眾多網絡安全漏洞中的一個,雖然只是在本單位局域網內發生,但是仍然存在著巨大的威脅隱患。對于計算機內網安全來講,按照安全級別從高到低,可以分為主機系統的應用服務安全、文件系統安全、系統服務安全、操作系統內核安全、主機系統的物理安全[3],所以計算機內網在許多方面都是存在安全隱患的,絕不能忽視。網絡安全,重在防范。在制定企業內部網絡安全防范措施時,應該充分分析企業內部網絡安全的威脅因素,要做到最大限度保證網絡安全,做到重點數據重點防范,重點人物重點監測,將管理、監測和控制有機地結合;將網絡安全防范手段包括防火墻、物理隔離和網絡安全監測手段集成與融合,變被動防范為主動防范,變制度防范為技術防范[4]。防止企業內部人員利用類似于“Windows TCP/IP遠程執行代碼”這樣的安全漏洞,使得單位內部計算機造成入侵破壞。