如何讓macOS的使用者互動安全屏障瞬間變成“馬奇諾防線”(一)
假設你是一個攻擊者或正在使用惡意軟體發起攻擊,那在你成功的獲得了對Mac的訪問後,你會做什麼呢?一般來說,攻擊者最想得到的是以下5方面內容:
1.轉儲使用者的鑰匙串;
2.確定攻擊裝置目前所在的位置,即獲取GEO檔案;
3.列舉使用者裝置裡的聯絡人;
4.載入核心擴充套件,即獲取kext檔案,kext檔案是一個Mac OS X核心擴充套件,常見於Hackintosh(PC上的黑Apple)。它們通常用於裝置驅動程式,運行於系統的核心基底;
5.繞過第三方安全防護措施;
不過Apple也意識到了這些問題,所以在最新版本的macOS上,一些新的安全機制會阻止以上這些操作。現在,這些新的安全機制將會針對此類非法操作,向用戶發出警報,以提醒使用者。根據Apple的安全設計,只有使用者才可以與這些警報進行互動,例如批准操作是否繼續。
應該說,Apple的這個安全機制做的非常好,一切都是以使用者為中心的。不過,一旦攻擊者能夠找到一種通過程式化方式或其他方式,來模擬使用者與這些警報互動的方式。那就意味著,攻擊者可以一舉繞過所有的安全機制,讓所有的設防都成為“馬奇諾防線”。這意味著,如果存在這樣的攻擊,使用者介面就會成為單點故障(Single Point of Failure,SPoF)。
本文就深入探討了macOS上,發生這樣的攻擊的可能性,從濫用這些功能的惡意軟體到未修補的新0 day漏洞攻擊,我都會講到。這讓小編想到了,今年的DEF CON大會期間,來自Digita Security的首席研究官Patrick Wardle就披露了一個macOS中存在的0 day漏洞,攻擊者可以通過模擬使用者的點選繞開macOS核心程式碼簽名驗證,載入系統核心擴充套件。具體詳情,請點此瞭解。
譯者注:Single Point of Failure(SPoF)是指一個系統的這樣一個部件,如果它失效或停止運轉,將會導致整個系統不能工作。我們當然不希望看到,在一個要求高度可用性的系統中存在這樣的部分,但這種情況在網路,軟體應用以及其它工業系統中都存在。
各種攻擊的可能性
為了達到惡意目的,而以各種方式與UI進行互動的想法,並不是什麼新奇的東西,讓我們看一下使用此類想法的惡意軟體。
注意:本文中描述的攻擊在最新版本的macOS上是被阻止的。然而,在本文的末尾,我將披露一些即使在最新發布的Apple作業系統版本上也能工作的0 day漏洞。
OSX.FruitFly是十多年前就被編寫的後門,但在2017年初才被發現。我之前寫過一篇關於這個惡意軟體的研究報告 ofollow,noindex">“攻擊性惡意軟體分析:通過自定義C&C伺服器解析OSX.FruitFly.B” ,當時我就注意到它有控制滑鼠和鍵盤的能力。
Fruitfly是一個後門,攻擊者可利用其對受感染系統的進行完全控制,實現眾多監視操作。Fruitfly可以捕捉螢幕截圖、按鍵、網路攝像頭影象,並從受感染Mac偷取資料。
Patrick Wardle(Synack首席安全研究員和前NSA分析師)對Fruitfly的樣本進行了分析,搭建了自定義命令和控制伺服器,對FruitFly後門進行檢查,它能執行shell命令、截圖、控制滑鼠動作、結束程序、甚至會在使用者使用Mac時為攻擊者發出警示資訊。
以上是一個簡潔的GIF說明過程,說明遠端攻擊者如何通過OSX.FruitFly遠端關閉(鑰匙串)安全訪問提示。
另一塊利用這個想法的Mac惡意軟體是OSX.DevilRobber。與其他的惡意軟體一樣,DevilRobber也有很多別名,例如Miner-D和OSX.Coinbitminer等等。實際上,Intego的研究人員在2011年10月份首次檢測到了DevilRobber,而DevilRobber也是當時為數不多的Mac端惡意軟體之一。在2017年5月份,DevilRobber只佔所有檢測到的macOS惡意軟體數量的2.4%,但是很快它就一舉成為了全球活躍度排名第二的macOS惡意軟體。
DevilRobber主要通過感染第三方網站的Mac應用軟體來進行傳播,由於當時DevilRobber的傳播範圍實在太大,所以Apple公司也不得不釋出緊急更新補丁來降低DevilRobber的影響,而DevilRobber只是通過幾個簡單的AppleScript命令繞過使用者的鑰匙串安全訪問提示。
惡意廣告軟體也會利用此想法,例如,OSX.Genieo將自己偽裝成瀏覽器擴充套件誘導使用者進行安裝。但是,為了實現此目的,OSX.Genieo必須繞過安全提示,該安全提示試圖阻止程式安裝瀏覽器擴充套件。那此時,廣告軟體是如何繞過此警報的呢?很簡單,就是傳送模擬的滑鼠點選過程即可。
具體來說,就是通過jtool(功能非常強大的iOS分析工具)轉儲OSX.Genieo的方法,我們可以看到一個名為SafariExtensionInstaller的類。
想知道clickOnInstallButton按鈕的功能是什麼嗎?看看下面就知道了。
首先,它通過呼叫一個名為getPopupPosition的方法獲取彈出警報視窗的位置。然後它通過CGEventCreateMouseEvent和CGEventPost API傳送一些模擬滑鼠點選確認的過程。可以看到 0x5是滑鼠移動事件,而0x1和0x2對應於左鍵單擊事件,然後惡意廣告軟體就能夠解除警報,並將自身偽裝成瀏覽器擴充套件。
此類模擬事件的防範措施
在最近的macOS版本中,Apple已經實施了各種防禦來阻止這種模擬攻擊事件。但是,這些防禦措施並不是通用的,而是僅保護某些UI元件,例如某些安全性或訪問提示。
在High Sierra系統上,如果有人嘗試傳送經過程式化的滑鼠事件,例如傳送鑰匙串訪問提示,則作業系統將檢測並阻止此操作。
具體來說,macOS將檢查生成的滑鼠事件的程序是否已發生了輔助訪問(assistive access)。因為,輔助訪問提示也可以防止此類攻擊。
請注意,“輔助訪問”的設定必須手動完成,在系統的安全設定中新增要防護的應用程式,這樣你才可以檢視應用程式的具體程序。或者,你可以轉儲受SIP保護的系統隱私資料庫——/ Library / Application Support / com.Apple.TCC / TCC.db:
這樣,通過CoreGraphics API生成的滑鼠模擬事件現在也被發現和阻止了。不過這僅發生在目標UI元件被明確保護時,可以在以下系統日誌輸出中看到。
如果我們使用 grep搜尋"Sender is prohibited from synthesizing events"字串,就會在核心庫中的post_filtered_event_tap_data函式中找到它。
正如我們在上面的反編譯中所看到的那樣,如果CGXSenderCanSynthesizeEvents函式返回0(false/NO),則會記錄此錯誤訊息。如果sandbox_check_by_audit_token方法失敗,就會發生這種情況。
正如其名稱所提示的那樣,sandbox_check_by_audit_token函式檢查傳送“synthetic”事件的程序是否具有hid-control許可權。這個檢查似乎是在核心中執行的,具體來說,就是在mpo_iokit_check_hid_control_t函式中。
防護措施是如何失效的?
如果我是一名黑客,那我的目標很簡單,就是利用上述所講的這種模擬點選的方法在系統上與任何UI上的提示進行互動,比如設計安全性,隱私,訪問等的提示。我的最終目的就是像使用者一樣,隨意處理這些提示資訊,然後就可以進行我的各種操作,比如轉儲鑰匙串,或批准載入核心擴充套件。
在下一篇,我會具體講解防護措施是如何失效的?請繼續關注。