歡迎來到 黑吧安全網 聚焦網絡安全前沿資訊,精華內容,交流技術心得!

看我如何繞過macOS的隱私控制

來源:本站整理 作者:佚名 時間:2019-11-07 TAG: 我要投稿

寫在前面的話
在當前的紅隊研究項目中,我們經常會遇到各種各樣的蘋果設備。因此當每一個新的macOS版本引入了隱私或安全方面的更新時,我們都需要利用一些實用技術來瀏覽和了解蘋果做了哪些修改。
2018年底,蘋果推出了macOS Mojave,并引入了一種隱私限制機制,旨在應用程序請求訪問敏感數據(如相機、麥克風、通訊簿和日歷等)時向用戶發出警告提示。而且通常情況下,紅隊研究人員參與的項目其核心之一就是在實現滲透的過程中不被檢測到,因此我媽們就需要繞過這些安全控制來避免用戶發現我們的行為,所以我們最不想看到的就是系統給用戶彈出下面這種警告對話框:

在這篇文章中,我們將給大家介紹一種繞過macOS隱私控制以及其他保護訪問限制(例如Keychain等)的技術。
macOS隱私控制機制概覽
此前我就一直在想辦法繞過Mojave的隱私控制機制,而且我也在思考第三方應用程序訪問日歷和通訊簿等功能時,操作系統是如何向用戶顯示隱私提示警告框的。更重要的是,我想知道蘋果簽名的應用程序如何能夠訪問這些功能而無需征得用戶同意。
其實我想要尋找的答案都在TTC那里。TTC,即透明、許可和控制服務。除了沙箱之外,TTC還負責監控程序訪問請求,并在請求受限資源時向用戶發出警報。
我們可以看看下列行為:
ls ~/Library/Calendars
除非你之前已經同意過讓Terminal.app訪問日歷程序的話(可以使用命令“ttcutil reset Calendar”來重置許可),否則系統將彈出下列警告框:

點擊“不允許”后,你將會在控制臺中看到請求應用錯誤的提示:

查看控制面板中的“安全&隱私”配置項,你將會看到:

有趣的是,在這個配置面板中,我們并沒有看到Calendar.app的身影,我們使用codesign工具查看Calendar.app的權限時,信息如下:
com.apple.private.tcc.allow
    kTCCServiceReminders
    kTCCServiceCalendar
    kTCCServiceAddressBook
這里,我們可以看到com.apple.private.tcc.allow的權限,如果應用該權限,我們就可以在不提示的情況下訪問受保護的資源了。因此,每個需要訪問的資源需要列在這個授權列表中,此時的Calendar.app就可以直接訪問提醒、日歷和通訊簿等功能了,而TCC不會向用戶顯示任何的隱私警告框。
不幸的是,我們不能直接用這種權限來給我們的應用程序簽名,并添加到com.apple.private權限列表中,因為它們只對蘋果簽名的二進制文件有效,因此我們還需要尋找另一種方法。
如何實現?
自macOS Mojave發布以來,網上已經有很多帖子討論過這方面的內容了,其中的大部分方法都依賴于使用某種方式來控制那些以在該權限列表里的應用程序,但我們更傾向于使用其他方法來在目標應用程序中執行代碼。
在本文中,我們將注意力放在macOS自帶的imagent.app身上,這個應用程序位于/System/Library/PrivateFrameworks/IMCore.framework/imagent.app。查看該應用程序的權限之后,我們會發現一個非常有趣的事情。首先,我們看到它可以在無需提醒用戶的情況下訪問通訊簿:
com.apple.private.tcc.allow.overridable
        kTCCServiceAddressBook
另外,我們還可以看到這個應用程序能夠訪問多個Keychain訪問組:
keychain-access-groups
        ichat
        apple
        appleaccount
        InternetAccounts
        IMCore
接下來,我們需要使用codesign工具來驗證代碼關聯的驗證標識:
codesign -d --entitlements :- /System/Library/PrivateFrameworks/IMCore.framework/imagent.app -vv
執行之后,我們可以看到如下所示的嵌入式元數據:
CodeDirectory v=20100 size=4066 flags=0x0(none) hashes=120+5 location=embedded
在找到合適的代理應用時需要注意的標識是library-validation,它代表只有由蘋果簽名的dylib或應用程序組ID才能被加載。運行時標識代表應用程序使用了強化的運行時環境,而這種情況降不允許我們將任意dylib加載到進程中。
如果這兩個標識都不存在,我們就不必處理這些限制了。現在你可能在想,“我可以用dyldinsert庫來加載我的dylib嗎?”.嗯….不可以!蘋果當然考慮過這一點,如果您查看https://opensource.apple.com/source/dyld/dyld-655.1.1/src/dyld.cpp.auto.html上的源代碼,你
將看到,當存在授權時,通過環境變量加載dylib的任何嘗試都會受到限制。
那么我們還有什么其他選擇嗎?通過分析imagent.app的結構,我們會看到一個PlugIns目錄,它是為了在程序運行時加載擴展插件而設計的。由于我們的目標應用程序不需要用到已簽名的dylib,因此我們有可能通過它來向已簽名的進程中加載任意代碼。
接下來,我們需要對二進制文件進行反編譯,然后看看PlugIns目錄是如何被使用的。

[1] [2]  下一頁

【聲明】:黑吧安全網(http://www.fhetww.live)登載此文出于傳遞更多信息之目的,并不代表本站贊同其觀點和對其真實性負責,僅適于網絡安全技術愛好者學習研究使用,學習中請遵循國家相關法律法規。如有問題請聯系我們,聯系郵箱[email protected],我們會在最短的時間內進行處理。
  • 最新更新
    • 相關閱讀
      • 本類熱門
        • 最近下載
        江西十一选五走势图爱彩乐