OS X平台的Dylib劫持技術(下)

2021-09-11 11:20:26 字數 4588 閱讀 7703

vvun91e0n · 2015/10/11 13:57

原文:www.virusbtn.com/virusbullet…

跟著我們對os x平台下的dylib劫持知識有了基礎的理解以後,現在是時候來看看現實世界中的攻擊場景,並且提供一些實際的防禦方法。

高階的黑客知道,盡可能多的攻擊組建自動化對攻擊的重要性。這樣的自動化能提公升攻擊的規模和效率。解放攻擊者,讓攻擊者將精力集中到更高的要求或者攻擊中更複雜的方面。

圖33 自動挖掘漏洞程式

我們可以在圖33中看到,掃瞄指令碼在作者的電腦上找到了近150個漏洞二進位制檔案。有趣的是,大部分漏洞程式都屬於更加複雜的『multiple rpath』一類。由於空間侷限,完整的漏洞程式列表無法在這裡呈現。但是表1列出了幾個廣泛使用的知名程式。這些程式都被掃瞄指令碼探測到了dylib劫持漏洞。

擁有了自動挖掘程式漏洞的工具之後,下一步理所當然就是自動建立相容的劫持dylib。回顧一下之前為了成功劫持dylib必須手動更新的兩個地方。第乙個就是劫持dylib的版本號必須與合法的dylib相容。第二個(在rpath劫持的情況下)就是劫持dylib必須包含乙個re-export(lc_reexport_dylib)載入命令指向合法的dylib,並保證所有的需要的符號都被匯出。

圖34 劫持dylib的自動生成

dylib劫持可以用來實現大量的惡意行為。本文知識涉及到其中一些,包括隱秘駐留,載入時注入,安全防護繞過,甚至是繞過gatekeeper。這些攻擊雖然極具危險性,但是僅僅通過乙個簡單的植入惡意dylib就能實施,只是需要利用一下系統載入器的合法行為。正是因此,這看起來有點微不足道,所有不大可能被修補,或者是被個人安全軟體所檢測到。

利用dylib劫持來實現長期隱秘駐留是該攻擊最重要的功能之一。如果乙個漏洞程式可以在系統開機或者使用者登入的時候自動執行,那麼乙個本地攻擊者就可以利用dylib劫持來實現惡意**的開機自動執行。除了能夠實現一種新的駐留方式,這種方式還能很好的隱藏攻擊者。首先,只需要植入乙個簡單檔案,而不需要更新系統元件(比如啟動配置檔案或簽名的系統檔案)。這是很重要的,因為這些元件基本都是被安全軟體監控,或者需要簡單驗證的。其次,攻擊者的dylib將會注入到乙個可信程序裡面,這使得它很難被檢測到,因為不會表現出很大不同。

圖35  有漏洞的蘋果公司相片流工具

圖36 劫持蘋果的**流工具達到駐留的目的

關於駐留的最後乙個需要注意的地方是,如果沒有發現隨系統自動啟動的漏洞程式時,任何可以被使用者手動啟動的含有漏洞的程式(如瀏覽器,郵件客戶端等)都可以成為目標。換句話說,任何正常的程式都可以簡單的通過各種方法變為自啟動程式(比如註冊成為login item等)。然後在再進行利用。雖然這種方式增加了攻擊暴露的可能性,但是攻擊者的dylib可以避免任何介面出現在螢幕上。因為,絕大多數使用者都不會注意到乙個合法的程式在後台自動執行。

程序注入,或者強制乙個程序載入乙個動態庫是dylib劫持攻擊的另外一種很有用的攻擊方法。在本文中,『injection』代表載入時注入(程式任意時間啟動的時候)而並不是執行時注入。後者看起來應該是更有威力,但是前者更簡單,大多數時候也能造成同樣規模的破壞。

利用dylib劫持來強制乙個外部程序載入乙個惡意dylib是一種既隱秘又威力十足的技術。和其他大的dylib劫持攻擊技術比起來,它不需要任何對作業系統元件或程式進行修改(例如對目標程序檔案打補丁)。同時,因為植入的dylib都會在目標程序每次啟動的時候自動隱秘的載入到程序中,攻擊者也不需要任何監視器元件(來發現目標程序是否啟動,然後注入惡意庫)。因為攻擊者僅僅只需要植入惡意劫持dylib,比複雜的執行時注入要簡單的多。最後,因為注入技術是使用的作業系統載入器的合法功能,所以不容易被安全軟體探測到(安全軟體通過監視『inter-process』api來阻止遠端程序注入)。

xcode是蘋果公司的整合開發環境(ide)。開發者使用它來開發os x和ios程式。因此,它是高階黑客喜歡的目標,高階黑客也許希望注入**到ide中然後悄悄的感染開發者的產品(例如,作為乙個創新的自動惡意軟體傳播模式)。xcode和幾種它的輔助工具都存在dylib劫持攻擊的漏洞。特別是,run-path-dependent dylibs,比如dvtfoundation就沒有在xcode的第乙個run-path搜尋目錄裡面,見圖37。

圖37 蘋果ide xcode的漏洞

像ken thompson在他的文章『reflections on trusting trust』中寫到的一樣,當你不能信任你的編譯器的時候,你都不能信任你自己編寫的**。

圖38 通過dylib劫持來程序注入。

除了隱秘駐留和載入時注入,dylib劫持還可以用於個人安全軟體的繞過。具體是通過dylib劫持,攻擊者可以使乙個受信任的程序自動載入惡意**,然後在執行一些之前被阻止或警告的行為,現在就不會被檢測到了。

個人安全產品(psps)通過特徵碼,啟發式行為分析來探測惡意**,或者簡單的在使用者執行某個動作時彈出以乙個警告。因為dylib劫持是乙個比較新的利用系統合法功能的技術,基於特徵碼和基於啟發的產品都能輕易的被繞過。像防火牆一類的安全產品,警告使用者任何從乙個未知程序發起的出口連線,會對攻擊者造成一些挑戰。dylib劫持也可以輕易的擊敗這類產品。

個人防火牆在os x平台上很流行。它們通常使用一些演算法,完全信任從已知程式發出的出口網路連線,對未知和不信任程序的網路活動向使用者給出警告。這確實對以探測基礎的惡意軟體很有效,但是高階黑客可以輕鬆的找到它們的弱點:信任。之前提到了,一般來說這類產品都擁有乙個預設的配置規則,允許使用者建立新的規則給已知的受信的程序(例如:允許任何來自程序x的出口連線)。但是這要求合法的功能不能被破壞,如果乙個攻擊者可以植入惡意**到乙個可信程序裡,這些**就繼承了程序的信任屬性,因此防火牆將允許它的出口連線。

gpg工具是乙個os x平台下的資訊加密工具,提供金鑰管理,傳送加密郵件,或者通過外掛程式,提供加密服務到任意程式。不幸的是,它也存在dylib劫持漏洞。

圖39 gpg工具集中存在漏洞的keychain程式

因為gpg keychain要求各種internet功能(比如從金鑰伺服器獲取金鑰),所有基本上它會擁有一條『允許任意出口連線』的規則。見圖40。

圖40 gpg keychain的訪問規則

使用dylib劫持,攻擊者可以將惡意的dylib載入到gpg keychain程式的位址空間中。所以該dylib將會繼承和程序一樣的信任等級,因此就可以發起出口連線而不引起任何警報。測試結果說明了劫持dylib可以無限制的訪問internet。見圖41。

圖41 通過dylib劫持繞過個人防火牆(littlesnitch)

一些有防禦意識的人會準確的指出,在這種情況下,可以讓防火牆針對gpg keychain規則的更加嚴格,以此來抵禦攻擊。只允許出口連線到特定的遠端埠(比如已知的金鑰伺服器)。然而,還存在很多的漏洞程式,它們可以被劫持,然後同樣無限制的訪問網路。或者,在本例中,little snitch防火牆預設允許任意程序連線到icloud.com的埠,此規則在系統層面都不能被刪除。只需這一條已經足夠來進行繞過防火牆了(比如,用乙個遠端的icloud idrive作乙個c&c伺服器)。

到此,dylib劫持方法都已經介紹了。可以看到他們是如此的有威力,優雅,並且隱秘。但是它們都需要接觸到使用者的電腦。然而,dylib劫持技術同樣可以被遠端攻擊者使用,用來協助更加容易的控制一台遠端電腦。

圖42 偽裝過的惡意內容

蘋果也意識到了這些攻擊的危害,從版本os x lion(10.7.5)開始,mac電腦都內建了一款安全軟體gatekeeper,用來直接抵禦攻擊。

圖46 gatekeeper執行

不幸的是,使用dylib劫持技術可以讓攻擊者繞過gatekeeper來執行未簽名的惡意**,就算使用者設定將設定設為僅允許來自蘋果商店並簽名的**。這就重新開啟之前講述攻擊方式的大門,將os x使用者又置於危險之中。

理論上,通過dylib劫持繞過gatekeeper是合乎邏輯的。雖然gatekeeper完全驗證正在執行的軟體包的內容(例如,應用程式包中的每乙個檔案),但是它不驗證「外部」元件。

圖47 理論上dmg和zip檔案都能繞過gatekeeper

因為gatekeeper只驗證內部內容,如果乙個蘋果簽名或來之蘋果商店的程式包含乙個相對外部的可以劫持的dylib,攻擊者就可以繞過gatekeeper。具體的,攻擊者可以生成(或者在傳輸途中感染)乙個.dmg或.zip檔案,該檔案有必要的資料夾結構以滿足在外部相對的位置來包含惡意dylib。當合法程式被可信使用者執行時,gatekeeper將會驗證程式包然後允許它執行。在程序載入階段,dylib劫持會被觸發,相關的外部惡意dylib會被載入,即使gatekeeper被設定為只允許執行來自蘋果商店的程式!

圖49 惡意.dmg檔案

圖50 最終版的惡意.dmg檔案。

圖51 通過dylib劫持繞過gatekeeper

dylib劫持對於os x平台來說是一種新型的有威力的攻擊技術,提供給本地和遠端攻擊者廣泛的惡意攻擊方法。不幸的是儘管和蘋果公司聯絡多次,他們也沒有對此問題表示出任何興趣。而且,也沒有簡單的辦法來解決dylib劫持的核心問題,因為這是利用的作業系統的合法功能。無論如何,gatekeeper的作者應該修補一下gatekeeper來防止未簽名的惡意**執行。

圖52 objective-see的dhs掃瞄器

參考dylibhijackscanner.py & createhijacker.py. github.com/synack/.

技術平台與業務平台的區別

技術平台有效降低了軟體公司的開發成本,技術平台的優劣,直接體現了乙個軟體公司的核心競爭力的優劣。沒有自己技術平台或技術平台不夠先進的軟體公司就像沒有核心競爭力的公司那樣,最終被淘汰出局,因為客戶永遠追求物美價廉的產品。什麼是業務平台?技術平台畢竟是 技術 平台,無論怎麼完善和拓展也只是乙個 技術 平...

歸檔技術的平台支援

奢侈品對傳統有很深的情結。時尚界的 老佛爺 卡爾 拉格菲爾德曾借用德國作家 詩人歌德的話來描述他對品牌傳統的理解 在過去的基礎上,創造更好的未來。對於傳統的不間斷記錄形成了今天有據可查的奢侈品檔案。因此,企業需要認清歸檔和備份之間的差異,才能找到將這些核心功能整合到乙個具有合力的整體資料管理結構中的...

指標體系的平台技術實現

指標體系的平台技術實現 合規性管理的指標體系各有不同,一般根據符合性要求來制定評價指標。例如以下介紹的4a結合sox的符合性要求和等級保護的符合性要求,相應的評價通過平台的技術方式來實現。隨著企業業務網發展,其內部使用者數量持續增加,網路規模迅速擴大,安全問題不斷出現。而每個業務網系統分別維護一套使...