macOS TCC Bypasses
機能別
書き込みバイパス
これはバイパスではなく、TCCの動作方法です: 書き込みからは保護されていません。ターミナルがユーザーのデスクトップを読み取る権限がない場合でも、それに書き込むことができます:
拡張属性 com.apple.macl
は、新しいファイルに追加され、作成者のアプリがそれを読む権限を与えます。
TCC ClickJacking
ユーザーが気づかずにそれを受け入れるようにするために、TCCプロンプトの上にウィンドウを配置することが可能です。PoCはTCC-ClickJackingで見つけることができます。
任意の名前によるTCCリクエスト
攻撃者は、Info.plist
で任意の名前(例:Finder、Google Chromeなど)のアプリを作成し、それをいくつかのTCC保護された場所へのアクセスをリクエストするようにします。ユーザーは、正規のアプリケーションがこのアクセスをリクエストしていると思うでしょう。
さらに、正規のアプリをDockから削除し、代わりに偽物を置くことが可能です。そのため、ユーザーが偽のアプリをクリックすると(同じアイコンを使用できる)、それは正規のアプリを呼び出し、TCCの許可を求め、マルウェアを実行することができ、ユーザーは正規のアプリがアクセスを要求したと信じることになります。
詳細とPoCは次で確認できます:
pagemacOS Privilege EscalationSSH バイパス
デフォルトでは、SSH経由のアクセスには「Full Disk Access」が必要です。これを無効にするには、それがリストされている必要がありますが、無効にする必要があります(リストから削除してもこれらの権限は削除されません):
ここでは、いくつかのマルウェアがこの保護をバイパスできた例を見つけることができます:
SSHを有効にするには、今ではFull Disk Accessが必要です
拡張子の処理 - CVE-2022-26767
属性**com.apple.macl
は、特定のアプリケーションがそれを読む権限を持つためにファイルに与えられます。この属性は、ファイルをアプリにドラッグ&ドロップするか、ユーザーがファイルをダブルクリック**してデフォルトのアプリで開くときに設定されます。
したがって、ユーザーは、すべての拡張子を処理する悪意のあるアプリを登録し、Launch Servicesを呼び出して任意のファイルを開くことができます(そのため、悪意のあるファイルはそれを読む権限が与えられます)。
iCloud
権限**com.apple.private.icloud-account-access
を使用すると、com.apple.iCloudHelper
** XPCサービスと通信することが可能で、これによりiCloudトークンが提供されます。
iMovieとGaragebandにはこの権限と他の権限が付与されていました。
その権限からiCloudトークンを取得するエクスプロイトについての詳細については、次のトークを参照してください:#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula
kTCCServiceAppleEvents / Automation
kTCCServiceAppleEvents
権限を持つアプリは、他のアプリを制御することができます。これは、他のアプリに付与された権限を悪用する可能性があることを意味します。
Apple Scriptsに関する詳細については、次を確認してください:
pagemacOS Apple Scriptsたとえば、アプリが**iTerm
に対してAutomation権限を持っている場合、この例ではTerminal
**がiTermにアクセス権を持っています:
iTerm上で
FDAを持たないTerminalは、FDAを持つiTermを呼び出し、アクションを実行するために使用することができます:
Finderを介して
または、アプリがFinderを介してアクセスできる場合、次のようなスクリプトがあるかもしれません:
アプリケーションの動作による
CVE-2020–9934 - TCC
ユーザーランドのtccdデーモンは、HOME
env変数を使用してTCCユーザーデータベースにアクセスしています: $HOME/Library/Application Support/com.apple.TCC/TCC.db
このStack Exchangeの投稿によると、TCCデーモンは現在のユーザーのドメイン内でlaunchd
を介して実行されているため、それに渡されるすべての環境変数を制御することが可能です。
したがって、攻撃者はlaunchctl
で$HOME
環境変数を設定して制御されたディレクトリを指すようにし、TCCデーモンを再起動してから、TCCデータベースを直接変更して、エンドユーザーにプロンプトを表示せずに利用可能なすべてのTCC権限を自分に与えることができます。
PoC:
CVE-2021-30761 - ノート
ノートはTCCで保護された場所にアクセスできましたが、ノートが作成されるときは保護されていない場所に作成されます。したがって、ノートに保護されたファイルをコピーするように依頼し、その後ファイルにアクセスできます:
CVE-2021-30782 - トランスロケーション
ライブラリlibsecurity_translocate
を使用したバイナリ/usr/libexec/lsd
は、com.apple.private.nullfs_allow
という権限を持っており、nullfs マウントを作成し、com.apple.private.tcc.allow
と**kTCCServiceSystemPolicyAllFiles
**を持っていました。これにより、すべてのファイルにアクセスできました。
"Library"に隔離属性を追加し、com.apple.security.translocation
XPCサービスを呼び出すことで、Libraryを**$TMPDIR/AppTranslocation/d/d/Library
にマップし、Library内のすべてのドキュメントにアクセス**できるようになりました。
CVE-2023-38571 - Music & TV
Music
には興味深い機能があります:実行中に~/Music/Music/Media.localized/Automatically Add to Music.localized
にドロップされたファイルをユーザーの「メディアライブラリ」にインポートします。さらに、次のようなものを呼び出します:rename(a, b);
ここで a
と b
は次のとおりです:
a = "~/Music/Music/Media.localized/Automatically Add to Music.localized/myfile.mp3"
b = "~/Music/Music/Media.localized/Automatically Add to Music.localized/Not Added.localized/2023-09-25 11.06.28/myfile.mp3
この**rename(a, b);
の動作は競合状態に対して脆弱であり、Automatically Add to Music.localized
フォルダに偽のTCC.dbファイルを配置し、新しいフォルダ(b)が作成されたときにファイルをコピーして削除し、~/Library/Application Support/com.apple.TCC
**/にポイントを指定することが可能でした。
SQLITE_SQLLOG_DIR - CVE-2023-32422
SQLITE_SQLLOG_DIR="path/folder"
が設定されている場合、すべてのオープンされたdbがそのパスにコピーされます。このCVEでは、この制御が悪用され、TCCデータベースを持つプロセスによって開かれるSQLiteデータベース内に書き込むことが可能であり、その後**SQLITE_SQLLOG_DIR
をファイル名にシンボリックリンクとして悪用し、そのデータベースが開かれると、ユーザーのTCC.dbが開かれたもので上書き**されました。
詳細はこちらの解説 およびこちらのトーク にあります。
SQLITE_AUTO_TRACE
環境変数**SQLITE_AUTO_TRACE
が設定されている場合、ライブラリlibsqlite3.dylib
はすべてのSQLクエリをログ**し始めます。多くのアプリケーションがこのライブラリを使用していたため、すべてのSQLiteクエリをログに取ることが可能でした。
いくつかのAppleアプリケーションは、TCCで保護された情報にアクセスするためにこのライブラリを使用していました。
MTL_DUMP_PIPELINES_TO_JSON_FILE - CVE-2023-32407
この環境変数は、Metal
フレームワークで使用されます。これは、Music
などのさまざまなプログラムの依存関係であり、FDAを持っています。
次のように設定します:MTL_DUMP_PIPELINES_TO_JSON_FILE="path/name"
。path
が有効なディレクトリである場合、バグがトリガーされ、fs_usage
を使用してプログラム内で何が起こっているかを確認できます:
open()
されるファイルは、path/.dat.nosyncXXXX.XXXXXX
(Xはランダム)と呼ばれます。1つ以上の
write()
がファイルに内容を書き込みます(これは制御できません)。path/.dat.nosyncXXXX.XXXXXX
がrename()
されてpath/name
になります。
これは、セキュリティが確保されていない **rename(old, new)
**に続く一時ファイルの書き込みです。
これは、古いパスと新しいパスを別々に解決する必要があるため、時間がかかり、競合状態に対して脆弱になる可能性があるため、安全ではありません。詳細については、xnu
関数renameat_internal()
を確認してください。
つまり、特権プロセスがコントロールしているフォルダから名前を変更する場合、RCEを獲得して異なるファイルにアクセスしたり、このCVEのように特権アプリが作成したファイルを開いてFDを保存したりできます。
名前を変更しているフォルダにアクセスし、ソースファイルを変更したりFDを持っている場合、宛先ファイル(またはフォルダ)をシンボリックリンクに指すように変更できるため、いつでも書き込むことができます。
このCVEでの攻撃は次のとおりです:例えば、ユーザーのTCC.db
を上書きするには:
/Users/hacker/ourlink
を/Users/hacker/Library/Application Support/com.apple.TCC/
を指すように作成します。ディレクトリ
/Users/hacker/tmp/
を作成します。MTL_DUMP_PIPELINES_TO_JSON_FILE=/Users/hacker/tmp/TCC.db
を設定します。この環境変数を使用して
Music
を実行してバグをトリガーします。/Users/hacker/tmp/.dat.nosyncXXXX.XXXXXX
(Xはランダム)のopen()
をキャッチします。ここでも、このファイルを書き込み用に
open()
し、ファイルディスクリプタを保持します。/Users/hacker/tmp
を/Users/hacker/ourlink
にループ内でアトミックに切り替えます。これは、競合ウィンドウが非常に狭いため、成功する可能性を最大化するために行いますが、競争に負けるとほとんどデメリットがあります。
少し待ちます。
運が良ければテストします。
そうでない場合は、最初からやり直します。
詳細はhttps://gergelykalman.com/lateralus-CVE-2023-32407-a-macos-tcc-bypass.htmlで確認できます。
今、環境変数MTL_DUMP_PIPELINES_TO_JSON_FILE
を使用しようとすると、アプリが起動しなくなります。
Apple Remote Desktop
rootとしてこのサービスを有効にすると、ARDエージェントはフルディスクアクセスを持ち、ユーザーが新しいTCCユーザーデータベースをコピーすることができます。
NFSHomeDirectoryによる
TCCは、ユーザーのHOMEフォルダ内のデータベースを使用して、ユーザー固有のリソースへのアクセスを制御します。したがって、ユーザーが$HOME環境変数を異なるフォルダを指すように再起動できる場合、ユーザーは**/Library/Application Support/com.apple.TCC/TCC.db**に新しいTCCデータベースを作成し、TCCに任意のTCC権限を任意のアプリに付与するようにトリックをかけることができます。
Appleは、NFSHomeDirectory
属性内に格納された設定を使用して、$HOME
の値を取得します。したがって、この値を変更する権限(kTCCServiceSystemPolicySysAdminFiles
)を持つアプリケーションを侵害すると、このオプションをTCCバイパスとして兵器化することができます。
CVE-2021-30970 - Powerdir
最初のPOCは、dsexportとdsimportを使用して、ユーザーのHOMEフォルダを変更します。
ターゲットアプリケーションの_csreq_ブロブを取得します。
必要なアクセス権限と_csreq_ブロブを持つ偽の_TCC.db_ファイルを配置します。
dsexportを使用してユーザーのDirectory Servicesエントリをエクスポートします。
ユーザーのホームディレクトリを変更するためにDirectory Servicesエントリを変更します。
dsimportを使用して変更されたDirectory Servicesエントリをインポートします。
ユーザーの_tccd_を停止し、プロセスを再起動します。
2番目のPOCは、/usr/libexec/configd
を使用し、com.apple.private.tcc.allow
がkTCCServiceSystemPolicySysAdminFiles
の値を持っていることでした。configd
を-t
オプションで実行すると、攻撃者はカスタムバンドルをロードできました。したがって、この脆弱性は、ユーザーのホームディレクトリを変更する**configd
コードインジェクションでdsexport
およびdsimport
**メソッドを置き換えることができました。
詳細については、元のレポートを確認してください。
プロセスインジェクションによる
プロセス内にコードをインジェクトし、そのTCC権限を悪用するさまざまな技術があります:
pagemacOS Process Abuseさらに、TCCをバイパスするための最も一般的なプロセスインジェクションは、**プラグイン(ライブラリの読み込み)**を介して行われます。 プラグインは通常、ライブラリまたはplist形式の追加コードであり、メインアプリケーションによって読み込まれ、そのコンテキストで実行されます。したがって、メインアプリケーションがTCC制限ファイルにアクセス権限(許可された権限または権限)を持っている場合、カスタムコードもそれを持つことになります。
CVE-2020-27937 - Directory Utility
アプリケーション/System/Library/CoreServices/Applications/Directory Utility.app
は、**kTCCServiceSystemPolicySysAdminFiles
の権限を持ち、.daplug
**拡張子のプラグインを読み込み、ハード化されていなかったランタイムを持っていました。
このCVEを兵器化するために、NFSHomeDirectory
が変更され(前述の権限を悪用)、TCCをバイパスするためにユーザーのTCCデータベースを乗っ取ることができるようになりました。
詳細については、元のレポートを確認してください。
CVE-2020-29621 - Coreaudiod
バイナリ /usr/sbin/coreaudiod
には、com.apple.security.cs.disable-library-validation
と com.apple.private.tcc.manager
の権限がありました。最初の権限は コードインジェクションを許可 し、2番目の権限は TCCの管理権限を与えていました。
このバイナリは、/Library/Audio/Plug-Ins/HAL
フォルダから サードパーティプラグインを読み込むことを許可していました。そのため、この PoC を使用して プラグインを読み込み、TCCの権限を悪用 することが可能でした:
詳細については、元のレポートをチェックしてください。
デバイス抽象化レイヤー(DAL)プラグイン
Core Media I/Oを介してカメラストリームを開くシステムアプリケーション(**kTCCServiceCamera
**を持つアプリ)は、/Library/CoreMediaIO/Plug-Ins/DAL
にあるこれらのプラグインをプロセス内にロードします(SIPで制限されていません)。
そこに一般的なコンストラクタを持つライブラリを保存するだけで、コードをインジェクトすることができます。
これに対していくつかのAppleアプリケーションが脆弱でした。
Firefox
Firefoxアプリケーションには、com.apple.security.cs.disable-library-validation
およびcom.apple.security.cs.allow-dyld-environment-variables
の権限がありました。
詳細な情報については、元のレポートをチェックしてください。
CVE-2020-10006
バイナリ /system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl
には、com.apple.private.tcc.allow
と com.apple.security.get-task-allow
の権限があり、これによりプロセス内にコードを注入して TCC 権限を使用することができました。
CVE-2023-26818 - Telegram
Telegram には、com.apple.security.cs.allow-dyld-environment-variables
と com.apple.security.cs.disable-library-validation
の権限があり、これによりカメラでの録画などのような権限にアクセスすることが可能でした。ライトアップ内にペイロードを見つけることができます。
環境変数を使用してライブラリをロードする方法に注目し、カスタム plist を作成してこのライブラリを注入し、launchctl
を使用して起動する方法について説明します:
オープン呼び出しによるバイパス
サンドボックス化された状態でも**open
**を呼び出すことが可能です
ターミナルスクリプト
技術者が使用するコンピュータでは、ターミナルに**Full Disk Access (FDA)を与えることが一般的です。そして、それを使用して.terminal
**スクリプトを呼び出すことが可能です。
**.terminal
スクリプトは、以下のようなCommandString
**キーで実行するコマンドが含まれるplistファイルです:
アプリケーションは、/tmpなどの場所にターミナルスクリプトを書き込んで、次のようにコマンドを使って起動する可能性があります:
マウントによる
CVE-2020-9771 - mount_apfs TCC バイパスと権限昇格
どんなユーザー(特権を持たないユーザーでも)がタイムマシンのスナップショットを作成し、マウントし、そのスナップショットのすべてのファイルにアクセスできます。
必要な特権は、使用されるアプリケーション(例:Terminal
)がFull Disk Access(FDA)アクセス(kTCCServiceSystemPolicyAllfiles
)を持つ必要があり、これは管理者によって許可される必要があります。
より詳しい説明は元のレポートにあります。
CVE-2021-1784 & CVE-2021-30808 - TCCファイルをマウントする
TCC DBファイルが保護されていても、新しいTCC.dbファイルをディレクトリにマウントすることが可能でした:
asr
ツール**/usr/sbin/asr
**は、TCC保護をバイパスしてディスク全体をコピーし、別の場所にマウントすることができました。
位置情報サービス
/var/db/locationd/clients.plist
には、位置情報サービスにアクセスを許可されたクライアントを示すサードパーティのTCCデータベースがあります。
フォルダ/var/db/locationd/
はDMGマウントから保護されていなかったため、独自のplistをマウントすることが可能でした。
起動アプリによる
pagemacOS Auto Startgrepによる
いくつかの場合、ファイルには電子メール、電話番号、メッセージなどの機密情報が非保護の場所に保存されています(これはAppleの脆弱性としてカウントされます)。
合成クリック
これはもはや機能しませんが、過去には機能しました:
CoreGraphics イベントを使用した別の方法:
参考
Last updated