macOS root賬戶登錄憑據驗證錯誤(CVE-2017-13872)漏洞分析
0x01 漏洞概述
開發者 Lemi Orhan Ergin 發現 MacOS High Sierra系統重大安全漏洞。攻擊者可以在普通用戶許可權下獲得管理員許可權。
objective-see 網站上 Why <blank> Gets You Root 文章從代碼層面對漏洞細節做了詳細刨析。該漏洞出現在PlistFile 二進位文件的od_verify_crypt_password 函數中,因為該函數使用攻擊者指定的密碼更新原賬戶的密碼,並沒有檢查賬戶是否啟用,導致憑據校驗失敗。在補丁中Apple 增加了對strcmp函數校驗密碼的安全性,並且對od_verify_crypt_password函數的參數做了進一步校驗,後文會詳細介紹漏洞原理。
0x02 漏洞細節
CVECVE-2017-13872漏洞描述MacOS High Sierra 系統無密碼登錄管理員賬戶影響範圍macOS High Sierra 10.13、 10.13.1、10.13.2 beta危害本地提權,獲取root許可權補丁https://support.apple.com/en-us/HT208315模塊opendirectoryd載入的PlistFile 二進位文件類型登陸憑據驗證邏輯漏洞
0x03 漏洞驗證
第一種利用:
- 打開系統偏好設置
- 進入用戶&群組
- 在用戶名中輸入 root
- 點擊密碼輸入框,並不需要輸入任何內容
- 點擊解鎖,這樣就可以獲得添加新管理員賬戶的許可權了。
第二種利用:
- 在登錄界面選擇 其他用戶
- 在用戶名處輸入』root』
- 密碼留空,直接登錄
此方法登錄會給root用戶創建一個圖形化賬戶。
0x04 漏洞修復
如果您需要使用root賬戶,您需要修改root用戶密碼,修改root用戶密碼可以阻止攻擊者利用此漏洞。
- 通過命令: sudo passwd root
- 通過 目錄實用工具 app ->編輯->更改root 密碼,也可以重新設置root密碼
更多信息參考Apple:https://support.apple.com/zh-cn/HT204012。
值得注意的是即使停用root用戶該漏洞還是可以被利用。
Apple 對該漏洞的公告:
0x05 漏洞原理分析
關於該漏洞的新聞已經在網路上炸開了鍋,但是還一直沒看到比較好的中文版的基於代碼的分析報告,這裡會介紹Why<blank>Gets You Root 這篇文章中關於漏洞代碼的分析,再加上自己的理解。
從上層來分析攻擊的過程。當一個用戶(或是攻擊者)試圖登錄進一個未啟用的賬戶時,系統會創建該賬戶使用用戶輸入的任意密碼,哪怕是空密碼也行。這就是我們在UI界面上可以攻擊成功的原因,你必須要點擊2次 unlock。
當一個用戶(或者攻擊者)嘗試認證一個帳號時,opendirectory 守護進程(opendirectoryd)會進行處理。跳過分析過程,直接查看調用棧:
opendirectoryd 進程收到一個XPC 消息,就會調用 odm_RecordVerifyPassword函數,該函數再調用od_verify_crypt_password函數。這兩個函數都在PlistFile 二進位文件中,該文件通過/System/Library/OpenDirectory/Modules/PlistFile.bundle 包載入到opendirectoryd進程中。
開始分析odm_RecordVerifyPassword函數,該函數內部會調用sub_4f73函數,sub_4f73負責讀取準備登錄的用戶的 shadowhash 數據,如果目標用戶啟用了,那麼sub_4f73函數可以讀取成功。
shadowhash 數據可以通過 dscl . -read /Users/<user> 命令讀取,也可以直接從/private/var/db/dslocal/nodes/Default/users/<user>文件讀取。
如果目標賬戶沒有啟用,比如root賬戶作為目標, shadowhash 信息不存在, 讀取會失敗 (沒有AuthenticationAuthority 欄位)。
當shadow hash 信息沒有找到,會調用od_verify_crypt_password函數。
od_verify_crypt_password 函數會驗證用戶(攻擊者)輸入的密碼,第三個參數傳入用戶輸入(假設是「hunter2」)的密碼, 第二個參數是root 賬戶(未啟用)的密碼」*」 。
od_verify_crypt_password 最後返回0x1。 這就有趣了,因為返回非0值,繼續執行調用_os_log_impl 函數列印日誌,從日誌可以看出user-record 加密密鑰會被更新為shadowhash 或者 securetoken。
「found crypt password in user-record – upgrading to shadowhash or securetoken」
然而,我們跟蹤更新操作的輸入發現正是使用我們提供的hunter2來更新加密密鑰。
這個新密碼(實際是shadow/securetoken)被保存到賬戶(root賬戶)中,因此,用戶(攻擊者)可以登錄成功。
總結:
- 目標賬戶是 未啟用狀態,MacOS 系統回嘗試做一次更新密鑰
- 更新過程中od_verify_crypt_password 返回非0值,並且錯誤代碼沒有被檢查
- 攻擊者指定的密碼會用來更新原賬戶的密碼
Apple 已經修復了漏洞,該漏洞類型是登錄憑據驗證存在邏輯錯誤。
patch 代碼升級了憑據驗證流程,od_verify_crypt_password 函數內使用strcmp 檢查密碼, 如果一樣會將第四個參數 (var_54)設置為0,在od_verify_crypt_password 上層不僅會檢查返回值,而且增加了對參數var_54 的檢查。
更多相關諮詢:https://objective-see.com/blog/blog_0x24.html
0x06 遠程利用此漏洞
如果有漏洞的MacOS High Sierra系統開啟了「屏幕共享」功能,那麼攻擊者就可以通過屏幕共享功能利用此漏洞達到遠程代碼執行的能力。
攻擊環境:
- 一台Mac電腦
- 在VMWare 虛擬機中安裝MacOS High Sierra 10.13 以上版本系統
- MacOS High Sierra 10.13 系統開啟屏幕共享功能
藉助漏洞使用root 用戶免密碼登錄, 輸入root用戶名,直接點擊連接即可成功登錄。
登錄成功以後,可以看到2種登錄模式:
- 請求許可權模式,會提醒受害者有人遠程連接
- 以本人身份模式,不會提醒受害者
使用第一種模式:請求許可權模式登錄,會給用戶彈窗提示「共享屏幕請求」。
使用第二種模式:本人身份模式登錄,攻擊者遠程監控受害者屏幕。
以上攻擊過程可以穩定利用,並且攻擊成本非常低,但是再精心設計的攻擊過程也會露出馬腳,下面介紹利用 屏幕共享攻擊的缺點。
屏幕共享軟體是Mac 系統預裝的應用,並且和Mac系統使用同一套賬戶系統,所以上述遠程攻擊中使用的root用戶在屏幕共享軟體中也存在。當遠程用戶(攻擊者)通過了驗證以後,在受害者系統的菜單欄會多出一個提示圖標,當受害人發現菜單欄 右上角桌面共享提示,可以主動斷開遠程連接阻斷攻擊者的連接。
攻擊者一側會自動斷開屏幕共享。
以上我們介紹了攻擊者該如何利用此漏洞遠程攻擊Mac電腦,並且介紹了 受害人該如何發現自己是否被攻擊的方法。以上都是演示環境可能並不能滿足攻擊者的慾望,假想經驗豐富的攻擊者可能會用更高級的手法達到長期監控的目的,比如:先通過屏幕共享以「本人身份root」登錄,進入目標系統以後快速修改root密碼,然後可以植入後門程序或者開啟ssh 服務達到長期隱秘監控的目的。我們再次建議受影響的用戶趕快在App Store中升級最新的系統安全更新。
參考:
https://objective-see.com/blog/blog_0x24.html
https://support.apple.com/en-us/HT208315
登錄 安全客 - 有思想的安全新媒體,或下載安全客APP來獲取更多最新資訊吧~
推薦閱讀:
※以DLink為例教你如何挖掘漏洞
※如何看待谷歌在微軟發布補丁之前公布並演示相關漏洞?
※Dirty Cow, CVE-2016-5195漏洞的危害大概怎麼樣,有沒有修復方案建議?
TAG:Mac | 苹果公司AppleInc | 漏洞 |