扣丁書屋

攻擊者思維 - iOS 攝像頭指示燈不亮,就真的沒事了么?

從 iOS 14 開始,系統右上角新增了兩個點:一個綠點和一個橙點。當訪問攝像頭或麥克風時,這些指示燈會點亮發出信號。

當沒有綠色/橙色圓點時,我們就不那么擔心手機能聽到我們說話了。

我們知道像 NSO/Pegasus 這樣的惡意軟件能夠監聽麥克風。NSO Group 和數百名其他針對移動設備的威脅軟件能否在攝像頭指示器關閉時拍攝我們的視頻呢?

讓我們來看看此功能是否對攻擊者構成任何挑戰。

邏輯問題

我們先想一想。每次訪問攝像頭或麥克風時,指示燈是否真的亮起?我們很快就會想到 Siri。如果麥克風指示燈沒有一直亮起,手機如何知道我們何時說“嘿 Siri”?手機一定在監聽某種正確的聲音。

“嘿Siri”

/System/Library/PrivateFrameworks/CoreSpeech.framework/corespeechd 依賴 VoiceTrigger.framework 來持續監聽用戶的聲音,然后在聽到關鍵字時激活 Siri。

輔助功能 -> 語音控制

語音控制允許您使用語音命令與設備交互。

/System/Library/PrivateFrameworks/SpeechRecognitionCore.framework/XPCServices/com.apple.SpeechRecognitionCore.brokerd.xpc/XPCServices/com.apple.SpeechRecognitionCore.speechrecognitiond.xpc/com.apple.SpeechRecognitionCore.speechrecognition

負責訪問麥克風。

輔助功能 -> 切換控制

SwitchControl 功能的一部分是檢測用戶頭部的運動以與設備進行交互。很酷的功能!由以下模塊處理:

/System/Library/PrivateFrameworks/AccessibilityUI.framework/XPCServices/com.apple.accessibility.AccessibilityUIServer.xpc/com.apple.accessibility.AccessibilityUIServer

/System/Library/CoreServices/AssistiveTouch.app/assistivetouchd

這些功能必須訪問麥克風或攝像頭才能運行。但是,這些功能不會觸發綠色/橙色視覺指示器。這意味著移動惡意軟件也可以這樣做。

這意味著通過將惡意線程注入 com.apple.accessibility.AccessibilityUIServer / com.apple.SpeechRecognitionCore.speechrecognitiond 守護進程,攻擊者可以啟用對麥克風的靜默訪問。相機訪問需要額外的補丁,我們稍后會討論

繞過 TCC 提示

TCC 代表“透明度、同意和控制”。iOS 用戶經常會遇到這樣的提示:

TCC 的核心是一個名為 tccd 的系統守護進程,它管理對敏感數據庫的訪問以及從輸入設備(包括但不限于麥克風和攝像頭)收集敏感數據的權限。

你可知道?TCC 提示僅適用于具有 UI 界面的應用程序。在后臺運行的任何東西都需要特殊的操作權限。權限如下圖所示。只需 kTCCServiceMicrophone 就足以訪問麥克風。

相機訪問稍微復雜一些。除了 tccd 之外,還有另一個名為 mediaserverd 的系統守護進程確保沒有后臺運行狀態的進程可以訪問攝像頭。

到目前為止,當用戶與另一個前臺應用程序交互時,似乎需要一個額外的步驟(例如修補 mediaserverd)來在后臺訪問相機。

禁用麥克風、攝像頭訪問的可視指示器

第一種方法比較粗糙,使用 Cycript 向 SpringBoard 注入代碼,導致指標突然消失。

com.apple.SpeechRecognitionCore.speechrecognitiondcom.apple.accessibility.AccessibilityUIServer 的啟發,這是一種非常適合我們目的的私有權限 (com.apple.private.mediaexperience.suppressrecordingstatetosystemstatus)!不幸的是,此方法不適用于相機訪問。

通過修補“mediaserverd”在后臺訪問相機

mediaserverd 是一個監控媒體捕獲會話的守護進程。想要訪問攝像頭的進程必須得到 tccdmediaserverd 的批準。它是 tccd 之后的額外安全層。當它檢測到應用程序不再在前臺運行時,它還會終止相機訪問。

值得注意的是,mediaserverd 配備了一個特殊的權限(get-task-allow)來防止代碼注入。

作為“get-task-allow”權限的結果,動態調試器依賴于獲取任務端口,如 cycript,frida 在 mediaserverd 守護進程上不起作用。當 mediaserverd 沒有響應時,它也會經常被系統殺死,即使是很短的時間。這并不常見:這些跡象告訴我們 mediaserverd 負責一些重要的事情。

當進程切換到后臺時,mediaserverd 將收到通知并撤銷對該特定進程的相機訪問權限。我們需要想辦法讓mediaserverd在檢測到進程在后臺運行時什么都不做。

經過簡短的研究,我們發現可以通過 hook 到 Objective-C 方法 -[FigCaptureClientSessionMonitor _updateClientStateCondition:newValue:] 來防止 mediaserverd 撤銷相機訪問權限,因此不需要代碼覆蓋。

為了注入 mediaserverd,我們使用了 lldb。 lldb 不依賴于任務端口,而是調用內核進行代碼注入。實際上,已經具有內核代碼執行能力的操控者可以替代 mediaserverd 的“權限”來執行此類注入。

POC 源代碼可在此處獲得 https://github.com/ZecOps/public/tree/master/hidden_cam_mic_demo。

在 Mac 上呢?

根據 2015 年之前的實驗,Mac 上前置攝像頭旁邊的綠燈不能僅使用軟件關閉。修改 AppleCameraInterface 驅動程序并上傳自定義網絡攝像頭固件沒有解決問題。綠燈無法關閉,因為它在相機開機時亮起。只要有電,燈就會一直亮著。從隱私角度來看,基于硬件的指標是理想的選擇。我們尚未在最近的 Mac 版本/硬件上對此進行驗證。

演示

我們做了一個演示,從后臺進程訪問攝像頭/麥克風,使用RTMP協議流式傳輸視頻/音頻,步驟:

  1. 設置RTMP服務器
  2. 編譯 mediaserver_patch,將代碼注入 mediaserverd
  3. 編譯 ios_streaming_cam,使用以下權限重新簽署二進制文件并在后臺運行
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.private.security.container-required</key>
    <false/>
    <key>platform-application</key>
    <true/>
    <key>com.apple.private.tcc.allow</key>
    <array>
        <string>kTCCServiceMicrophone</string>
        <string>kTCCServiceCamera</string>
    </array>
    <key>com.apple.security.iokit-user-client-class</key>
    <array>
        <string>IOSurfaceRootUserClient</string>
        <string>AGXDeviceUserClient</string>
    </array>
    <key>com.apple.private.mediaexperience.suppressrecordingstatetosystemstatus</key>
    <true/>
    <key>com.apple.private.mediaexperience.startrecordinginthebackground.allow</key>
    <true/>
    <key>com.apple.private.avfoundation.capture.nonstandard-client.allow</key>
    <true/>
</dict>
</plist>

https://mp.weixin.qq.com/s/pD8RuovB4Gw-Z4VoQSYlVQ

最多閱讀

iOS 性能檢測新方式?——AnimationHitches 8月以前  |  18061次閱讀
快速配置 Sign In with Apple 2年以前  |  5484次閱讀
APP適配iOS11 3年以前  |  4436次閱讀
App Store 審核指南[2017年最新版本] 3年以前  |  4262次閱讀
所有iPhone設備尺寸匯總 3年以前  |  4184次閱讀
使用 GPUImage 實現一個簡單相機 3年以前  |  3916次閱讀
開篇 關于iOS越獄開發 3年以前  |  3794次閱讀
在越獄的iPhone設置上使用lldb調試 3年以前  |  3719次閱讀
給數組NSMutableArray排序 3年以前  |  3642次閱讀
使用ssh訪問越獄iPhone的兩種方式 3年以前  |  3346次閱讀
UITableViewCell高亮效果實現 3年以前  |  3344次閱讀
關于Xcode不能打印崩潰日志 3年以前  |  3242次閱讀
使用ssh 訪問越獄iPhone的兩種方式 3年以前  |  3083次閱讀
為對象添加一個釋放時觸發的block 3年以前  |  2857次閱讀
使用最高權限操作iPhone手機 3年以前  |  2828次閱讀

手機掃碼閱讀
18禁止午夜福利体验区,人与动人物xxxx毛片人与狍,色男人窝网站聚色窝
<蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>