為何發生Zerologon漏洞?軟體實作不當

在今年9月,有研究人員揭露了Zerologon漏洞,引發關注,這是微軟在8月的修補,是關於Windows Netlogon遠端協定的漏洞。

其實,微軟當時已經指出,此漏洞的CVSS 3.0風險達到滿分10分,並表示與網域控制器(Domain Controller)有關,不過,隨著研究人員的揭露,指出該漏洞可讓駭客輕易掌控AD網域,並解釋漏洞成因,不僅再次引發外界對此漏洞的重視,同時,相關的修補說明與警示也不斷成為新聞焦點。

這個已經使用多年的協定到底有何問題?我們根據首度揭露這項漏洞的資安公司Secura的資安報告,同時也請臺灣資安業者奧義智慧協助,深入說明這次漏洞的細節、根因與利用方式。

漏洞在Netlogon認證交握過程

關於這次Netlogon遠端協定漏洞的成因,我們先從協定運作原理開始說起。

簡單來說,Windows Netlogon遠端協定是一個RPC(Remote Procedure Call)介面,作用於AD網域控制器與Windows網域中電腦之間。舉例來說,以NTLM協定將使用者登入伺服器,就是它的功能之一,其他還包括讓網域內的電腦,以及網域控制器,可以相互驗證身分,特別是還可更新網域中電腦的密碼。

從原理來看,依據Windows Netlogon遠端協定,當用戶端(已加入網域的電腦)連至伺服器端(網域控制器)時,必須先經過認證交握(Authentication handshake)的過程。在此階段中,第一步驟是由用戶端開始,會先傳送一個Client Challenge,然後第二步驟是伺服器端也傳送回一個Server Challenge,此時,將透過一個金鑰衍生函式KDF(Key Derivation Function),以便相互確認彼此,並產生後續通訊都可用於驗證的Session Key。

第三步驟,同時也就是這次漏洞發生的地方。在用戶端通知產生Session Key時,該Session Key將包含secret與Challenge,secret是帳號密碼,並會將前述的Client Challenge加密,當傳送至伺服器端時,加密的結果就會被放入NetrServerAuthentication3的credential參數中,提供給Server進行確認。

一般而言,也就是在沒有漏洞的情況下,攻擊者在此情境中,由於不知道密碼,就無法計算出Session Key,也無法成功算出Client Credential。但是,攻擊者若是不知道Session Key,卻有辦法計算出Client Credential,等於成功繞過這裡的身分驗證。而這次的漏洞,就是這裡的加密過程中,沒有正確使用AES-CFB8加密模式而導致。

從軟體開發的角度來看,這次漏洞突顯了什麼樣的問題?是因為AES-CFB8不夠安全?還是軟體實作上出了什麼問題?

奧義智慧資深研究員陳仲寬的看法是,這個漏洞首先顯示出軟體在安全性及效能上的權衡。他認為,AES-CFB8是一個針對效能的變種演算法,雖常用於實務上,但並未仔細地接受理論上的分析驗證,儘管也沒有人證明其不安全。

而這個漏洞最主要的重點,就是沒有正確實作AES-CFB8加密模式,違反IV數值應為隨機數值。因為在此實作上,將AES-CFB8成立所需要的一項安全屬性- IV數值,寫死為一連串的0,造成當攻擊者將前述Client challenge同樣設定成一連串0時,造成連鎖效應,就有相當高的機率(1/256),導致得到的運算結果也是一連串0。

也因此,攻擊者能夠利用Zerologon漏洞偽造身分,與網域控制站溝通,並且有很高的機率,可以向伺服器端驗證自己的身分,之後,將能藉由Netlogon協定中內建的設定密碼功能,更改網域控制站的電腦帳號與密碼,再以DCSync等攻擊方式,進而控制整個網域。

對此,陳仲寬推測,實作此部分軟體的人,可能並不熟悉密碼學,也沒有深入去探討固定IV的風險,因此造成此次漏洞。他認為,即使是一般程式設計師,也需要有基本資安的概念。

 

資料來源: iThome 為何發生Zerologon漏洞?軟體實作不當 https://www.ithome.com.tw/news/140582

You may also like...

發佈留言