macOS Auto Start
このセクションは、ブログシリーズBeyond the good ol' LaunchAgentsに大きく基づいており、目標はAutostart Locationsを追加(可能であれば)、最新バージョンのmacOS(13.4)で動作しているテクニックを示し、必要な権限を指定することです。
サンドボックス回避
ここでは、サンドボックス回避に役立つ起動場所を見つけることができます。これにより、ファイルに書き込んで、非常に一般的な アクション、特定の時間、または通常ルート権限が必要ないサンドボックス内で実行できるアクションを待機**することができます。
Launchd
場所
/Library/LaunchAgents
トリガー:再起動
ルート権限が必要
/Library/LaunchDaemons
トリガー:再起動
ルート権限が必要
/System/Library/LaunchAgents
トリガー:再起動
ルート権限が必要
/System/Library/LaunchDaemons
トリガー:再起動
ルート権限が必要
~/Library/LaunchAgents
トリガー:再ログイン
~/Library/LaunchDemons
トリガー:再ログイン
説明と悪用
launchd
は、OX Sカーネルによって起動時に最初に実行され、シャットダウン時に最後に終了するプロセスです。常にPID 1を持っている必要があります。このプロセスは、ASEP plistsに示された構成を読み取り、実行します。
/Library/LaunchAgents
:管理者によってインストールされたユーザーごとのエージェント/Library/LaunchDaemons
:管理者によってインストールされたシステム全体のデーモン/System/Library/LaunchAgents
:Appleによって提供されるユーザーごとのエージェント/System/Library/LaunchDaemons
:Appleによって提供されるシステム全体のデーモン
ユーザーがログインすると、/Users/$USER/Library/LaunchAgents
および/Users/$USER/Library/LaunchDemons
にあるplistsがログインユーザーの権限で開始されます。
エージェントとデーモンの主な違いは、エージェントはユーザーがログインすると読み込まれ、デーモンはシステムの起動時に読み込まれることです(システムにアクセスする前にsshなどのサービスが実行される必要があるため)。また、エージェントはGUIを使用できますが、デーモンはバックグラウンドで実行する必要があります。
いくつかのケースでは、ユーザーがログインする前にエージェントを実行する必要がある場合があります。これらはPreLoginAgentsと呼ばれます。たとえば、これはログイン時に支援技術を提供するのに役立ちます。/Library/LaunchAgents
にも見つけることができます(こちらを参照)。
新しいデーモンやエージェントの構成ファイルは、次回の再起動後またはlaunchctl load <target.plist>
を使用してロードされます。.plist
の拡張子なしで.plist
ファイルをロードすることも可能ですが、(ただし、これらの.plist
ファイルは再起動後に自動的にロードされません)。
launchctl unload <target.plist>
でアンロードすることも可能です(それを指すプロセスは終了します)。
エージェントまたはデーモンが実行されるのを妨げる(オーバーライドなど)何もないことを確認するには、次のコマンドを実行します:sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.smdb.plist
現在のユーザーによってロードされているすべてのエージェントとデーモンをリストアップします:
もしplistがユーザーに所有されている場合、それがデーモンシステムワイドフォルダにあっても、タスクはユーザーとして実行され、rootとして実行されません。これにより特権昇格攻撃を防ぐことができます。
シェル起動ファイル
解説: https://theevilbit.github.io/beyond/beyond_0001/ 解説 (xterm): https://theevilbit.github.io/beyond/beyond_0018/
ロケーション
~/.zshrc
,~/.zlogin
,~/.zshenv.zwc
,~/.zshenv
,~/.zprofile
トリガー: zshでターミナルを開く
/etc/zshenv
,/etc/zprofile
,/etc/zshrc
,/etc/zlogin
トリガー: zshでターミナルを開く
root権限が必要
~/.zlogout
トリガー: zshでターミナルを終了する
/etc/zlogout
トリガー: zshでターミナルを終了する
root権限が必要
他にもあるかもしれない:
man zsh
~/.bashrc
トリガー: bashでターミナルを開く
/etc/profile
(動作せず)~/.profile
(動作せず)~/.xinitrc
,~/.xserverrc
,/opt/X11/etc/X11/xinit/xinitrc.d/
トリガー: xtermでトリガーされると予想されていますが、インストールされていません。インストール後もこのエラーが表示されます: xterm:
DISPLAY is not set
説明と悪用
zsh
やbash
などのシェル環境を初期化するとき、特定の起動ファイルが実行されます。macOSは現在、デフォルトシェルとして/bin/zsh
を使用しています。このシェルは、Terminalアプリケーションが起動されたときやデバイスがSSH経由でアクセスされたときに自動的にアクセスされます。bash
やsh
もmacOSに存在しますが、使用するには明示的に呼び出す必要があります。
man zsh
で読むことができるzshのmanページには、起動ファイルの詳細な説明があります。
再オープンされたアプリケーション
指定された悪用の設定とログアウト、ログイン、または再起動を行っても、アプリを実行することができませんでした。(アプリが実行されていなかった可能性があります。これらのアクションが実行されるときに実行される必要があるかもしれません)
Writeup: https://theevilbit.github.io/beyond/beyond_0021/
位置
~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
トリガー: アプリケーションの再オープンを再起動
説明と悪用
再オープンするすべてのアプリケーションは、plist ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
内にあります。
したがって、再オープンされるアプリケーションに自分のアプリを起動させるには、アプリをリストに追加するだけです。
UUIDは、そのディレクトリをリストアップするか、ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'
で見つけることができます。
再オープンされるアプリケーションを確認するには、次の操作を行います:
このリストにアプリケーションを追加するには、次の方法を使用できます:
ターミナルの設定
位置
~/Library/Preferences/com.apple.Terminal.plist
トリガー: ターミナルを開く
説明と悪用
~/Library/Preferences
には、アプリケーションのユーザーの設定が保存されています。これらの設定の一部には、他のアプリケーション/スクリプトを実行する構成が含まれることがあります。
たとえば、ターミナルは起動時にコマンドを実行できます:
この設定は、ファイル ~/Library/Preferences/com.apple.Terminal.plist
に次のように反映されます:
Japanese translation:
ターミナルスクリプト / その他のファイル拡張子
位置
どこでも
トリガー: ターミナルを開く
説明と悪用
**.terminal
**スクリプトを作成して開くと、ターミナルアプリケーションが自動的に起動され、そこで指定されたコマンドが実行されます。ターミナルアプリに特別な権限(TCCなど)がある場合、その特別な権限でコマンドが実行されます。
以下で試してみてください:
オーディオプラグイン
解説: https://theevilbit.github.io/beyond/beyond_0013/ 解説: https://posts.specterops.io/audio-unit-plug-ins-896d3434a882
位置
/Library/Audio/Plug-Ins/HAL
ルート権限が必要
トリガー: coreaudiodまたはコンピューターを再起動
/Library/Audio/Plug-ins/Components
ルート権限が必要
トリガー: coreaudiodまたはコンピューターを再起動
~/Library/Audio/Plug-ins/Components
トリガー: coreaudiodまたはコンピューターを再起動
/System/Library/Components
ルート権限が必要
トリガー: coreaudiodまたはコンピューターを再起動
説明
以前の解説によると、いくつかのオーディオプラグインをコンパイルしてロードすることが可能です。
QuickLookプラグイン
解説: https://theevilbit.github.io/beyond/beyond_0028/
位置
/System/Library/QuickLook
/Library/QuickLook
~/Library/QuickLook
/Applications/AppNameHere/Contents/Library/QuickLook/
~/Applications/AppNameHere/Contents/Library/QuickLook/
説明と悪用
QuickLookプラグインは、ファイルのプレビューをトリガーし(Finderでファイルを選択してスペースバーを押す)、そのファイルタイプをサポートするプラグインがインストールされている場合に実行されます。
独自のQuickLookプラグインをコンパイルし、前述のいずれかの場所に配置してロードし、サポートされるファイルに移動してスペースを押してトリガーすることが可能です。
ログイン/ログアウトフック
私にはうまくいきませんでした。ユーザーログインフックでもルートログアウトフックでもありませんでした
解説: https://theevilbit.github.io/beyond/beyond_0022/
位置
defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh
のようなコマンドを実行できる必要があります~/Library/Preferences/com.apple.loginwindow.plist
にあります
これらは非推奨ですが、ユーザーがログインするときにコマンドを実行するために使用することができます。
この設定は/Users/$USER/Library/Preferences/com.apple.loginwindow.plist
に保存されています。
削除するには:
**/private/var/root/Library/Preferences/com.apple.loginwindow.plist
**に格納されているのは、rootユーザーのものです。
条件付きサンドボックス回避
ここでは、サンドボックス回避に役立つ起動場所を見つけることができます。これにより、ファイルに書き込んで単純に実行することができ、特定のインストールされたプログラム、"一般的でない"ユーザーのアクションや環境のような非常に一般的でない条件を期待することができます。
Cron
解説: https://theevilbit.github.io/beyond/beyond_0004/
場所
/usr/lib/cron/tabs/
,/private/var/at/tabs
,/private/var/at/jobs
,/etc/periodic/
直接書き込みアクセスにはrootが必要です。
crontab <file>
を実行できる場合はrootは必要ありませんトリガー: cronジョブに依存します
説明と悪用
現在のユーザーのcronジョブをリストアップするには:
MacOSでは、**/usr/lib/cron/tabs/
と/var/at/tabs/
**にユーザーのすべてのcronジョブを見ることができます(root権限が必要です)。
MacOSでは、特定の頻度でスクリプトを実行するいくつかのフォルダが次の場所にあります:
以下では、通常のcron ジョブ、あまり使用されていないat ジョブ、および一時ファイルのクリーニングに主に使用されるperiodic ジョブが見つかります。 日次のperiodicジョブは、例えば次のように実行できます:periodic daily
。
ユーザーのcronジョブをプログラムで追加するには、次のようにすることができます:
iTerm2
Writeup: https://theevilbit.github.io/beyond/beyond_0002/
ロケーション
~/Library/Application Support/iTerm2/Scripts/AutoLaunch
トリガー: iTermを開く
~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt
トリガー: iTermを開く
~/Library/Preferences/com.googlecode.iterm2.plist
トリガー: iTermを開く
説明と悪用
**~/Library/Application Support/iTerm2/Scripts/AutoLaunch
**に保存されたスクリプトが実行されます。例えば:
または:
スクリプト ~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt
も実行されます:
iTerm2の設定は**~/Library/Preferences/com.googlecode.iterm2.plist
にあり、iTerm2ターミナルが開かれるときに実行するコマンドを示す**ことができます。
この設定はiTerm2の設定で構成できます:
そして、コマンドは設定に反映されます:
次のようにして、実行するコマンドを設定できます:
iTerm2の設定を悪用する他の方法が非常に可能性が高いです。
xbar
解説: https://theevilbit.github.io/beyond/beyond_0007/
位置
~/Library/Application\ Support/xbar/plugins/
トリガー: xbarが実行されるとき
説明
人気のあるプログラム xbar がインストールされている場合、~/Library/Application\ Support/xbar/plugins/
にシェルスクリプトを記述することが可能で、xbarが起動されると実行されます:
Hammerspoon
解説: https://theevilbit.github.io/beyond/beyond_0008/
位置
~/.hammerspoon/init.lua
トリガー: Hammerspoonが実行されるとき
説明
Hammerspoon は、macOS向けの自動化プラットフォームとして機能し、LUAスクリプト言語を活用しています。特筆すべきは、完全なAppleScriptコードの統合とシェルスクリプトの実行をサポートし、スクリプトの機能を大幅に向上させています。
このアプリは、単一のファイルである ~/.hammerspoon/init.lua
を探し、スクリプトが実行されます。
BetterTouchTool
便利なサンドボックス回避方法: ✅
ただし、BetterTouchToolをインストールする必要があります
TCCバイパス: ✅
Automation-ShortcutsおよびAccessibility権限が必要です
位置
~/Library/Application Support/BetterTouchTool/*
このツールは、特定のショートカットが押されたときにアプリケーションやスクリプトを実行することができます。攻撃者は、データベース内で独自のショートカットとアクションを設定して任意のコードを実行する可能性があります(ショートカットは単にキーを押すだけでも可能です)。
Alfred
便利なサンドボックス回避方法: ✅
ただし、Alfredをインストールする必要があります
TCCバイパス: ✅
Automation、Accessibility、さらにはFull-Diskアクセス権限が必要です
位置
???
特定の条件が満たされたときにコードを実行できるワークフローを作成できます。攻撃者がワークフローファイルを作成し、Alfredがそれをロードする可能性があります(ワークフローを使用するにはプレミアムバージョンを購入する必要があります)。
SSHRC
解説: https://theevilbit.github.io/beyond/beyond_0006/
位置
~/.ssh/rc
トリガー: ssh経由でログイン
/etc/ssh/sshrc
ルート権限が必要
トリガー: ssh経由でログイン
sshをオンにするにはFull Disk Accessが必要です:
説明 & Exploitation
デフォルトでは、/etc/ssh/sshd_config
内でPermitUserRC no
が指定されていない限り、ユーザがSSH経由でログインすると、スクリプト**/etc/ssh/sshrc
と~/.ssh/rc
**が実行されます。
ログインアイテム
Writeup: https://theevilbit.github.io/beyond/beyond_0003/
ロケーション
~/Library/Application Support/com.apple.backgroundtaskmanagementagent
トリガー: ログイン
Exploitペイロードは**
osascript
**を呼び出して保存されています/var/db/com.apple.xpc.launchd/loginitems.501.plist
トリガー: ログイン
ルート権限が必要
説明
システム環境設定 -> ユーザとグループ -> ログイン項目には、ユーザがログインするときに実行される項目があります。 これらをコマンドラインからリストアップ、追加、削除することが可能です。
これらのアイテムはファイル**~/Library/Application Support/com.apple.backgroundtaskmanagementagent
**に保存されています。
ログインアイテムは、API SMLoginItemSetEnabled を使用して指定することもでき、このAPIは構成を**/var/db/com.apple.xpc.launchd/loginitems.501.plist
**に保存します。
ZIPをログインアイテムとして使用する
(ログインアイテムに関する前のセクションを確認してください、これは拡張です)
ZIPファイルをログインアイテムとして保存すると、**Archive Utility
がそれを開きます。たとえば、ZIPファイルが~/Library
に保存され、バックドアを含むLaunchAgents/file.plist
**というフォルダが含まれている場合、そのフォルダが作成され(デフォルトでは作成されません)、plistが追加されるため、次回ユーザーが再ログインすると、plistで指定されたバックドアが実行されます。
別のオプションとして、ユーザーのホームディレクトリに**.bash_profile
と.zshenv
**ファイルを作成することもできます。したがって、LaunchAgentsフォルダがすでに存在する場合でも、このテクニックは機能します。
At
解説: https://theevilbit.github.io/beyond/beyond_0014/
位置
at
を実行する必要があり、有効である必要があります
説明
at
タスクは、特定の時間に実行される一度だけのタスクをスケジュールするために設計されています。cronジョブとは異なり、at
タスクは自動的に実行後に削除されます。これらのタスクはシステム再起動を超えて永続的であるため、特定の条件下でセキュリティ上の懸念事項としてマークされます。
デフォルトでは無効ですが、rootユーザーは次のコマンドで有効にできます:
これは1時間後にファイルを作成します。
atq
を使用してジョブキューを確認します:
上記では2つのスケジュールされたジョブが表示されています。at -c JOBNUMBER
を使用してジョブの詳細を表示できます。
AT タスクが有効になっていない場合、作成されたタスクは実行されません。
ジョブファイルは/private/var/at/jobs/
にあります。
ファイル名には、キュー、ジョブ番号、および実行予定時刻が含まれています。例として、a0001a019bdcd2
を見てみましょう。
a
- これはキューです0001a
- 16進数でのジョブ番号、0x1a = 26
019bdcd2
- 16進数での時間。エポック以降の経過分を表します。0x019bdcd2
は10進数で26991826
です。これを60倍すると1619509560
になり、これはGMT: 2021年4月27日、火曜日 7:46:00
です。
ジョブファイルを印刷すると、at -c
を使用して取得した情報と同じであることがわかります。
フォルダアクション
解説: https://theevilbit.github.io/beyond/beyond_0024/ 解説: https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d
サンドボックスをバイパスするのに便利: ✅
ただし、**
System Events
**に連絡するためにosascript
を引数付きで呼び出せる必要があり、フォルダアクションを構成できるようにする必要がありますTCCバイパス: 🟠
デスクトップ、ドキュメント、ダウンロードなど、いくつかの基本的なTCC権限があります
位置
/Library/Scripts/Folder Action Scripts
ルートが必要
トリガー: 指定されたフォルダへのアクセス
~/Library/Scripts/Folder Action Scripts
トリガー: 指定されたフォルダへのアクセス
説明と悪用
フォルダアクションは、フォルダ内の変更(アイテムの追加、削除、フォルダウィンドウの開いたりリサイズなど)によって自動的にトリガーされるスクリプトです。これらのアクションはさまざまなタスクに利用でき、Finder UIやターミナルコマンドを使用してトリガーできます。
フォルダアクションを設定する方法には、次のようなオプションがあります:
Automatorを使用してフォルダアクションワークフローを作成し、サービスとしてインストールする。
フォルダのコンテキストメニュー内のフォルダアクション設定を介してスクリプトを手動で添付する。
プログラムでフォルダアクションを設定するために
System Events.app
にApple Eventメッセージを送信するためにOSAScriptを利用する。
この方法は、アクションをシステムに埋め込んで持続性を提供するのに特に便利です。
以下のスクリプトは、フォルダアクションで実行できる例です:
上記のスクリプトをフォルダアクションで使用可能にするには、次のようにコンパイルしてください:
スクリプトがコンパイルされた後、以下のスクリプトを実行してフォルダアクションを設定します。このスクリプトはフォルダアクションをグローバルに有効にし、事前にコンパイルされたスクリプトをデスクトップフォルダに特定の添付します。
次のコマンドでセットアップスクリプトを実行します:
これはGUIを介してこの永続性を実装する方法です:
これが実行されるスクリプトです:
次のコマンドでコンパイルします: osacompile -l JavaScript -o folder.scpt source.js
次の場所に移動します:
その後、Folder Actions Setup
アプリを開き、監視したいフォルダを選択し、あなたの場合は**folder.scpt
**を選択します(私の場合はoutput2.scpと呼びました):
これで、Finderでそのフォルダを開くと、スクリプトが実行されます。
この設定は、base64形式で~/Library/Preferences/com.apple.FolderActionsDispatcher.plist
に保存されています。
次に、GUIアクセスなしでこの永続性を準備しよう:
**
~/Library/Preferences/com.apple.FolderActionsDispatcher.plist
**をバックアップするために/tmp
にコピーします:
cp ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist /tmp
さっき設定したフォルダアクションを削除します:
これで空の環境ができました
バックアップファイルをコピーします:
cp /tmp/com.apple.FolderActionsDispatcher.plist ~/Library/Preferences/
この設定を適用するためにFolder Actions Setup.appを開きます:
open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"
私にはうまくいきませんでしたが、これがライートアップからの指示です:(
Dockショートカット
Writeup: https://theevilbit.github.io/beyond/beyond_0027/
位置
~/Library/Preferences/com.apple.dock.plist
トリガー: ユーザーがDock内のアプリをクリックしたとき
説明と悪用
Dockに表示されるすべてのアプリケーションは、**~/Library/Preferences/com.apple.dock.plist
**内で指定されています。
アプリケーションを追加することが可能です:
ソーシャルエンジニアリングを使用すると、ドック内でGoogle Chromeを装ったように見せかけて、実際に自分のスクリプトを実行することができます。
カラーピッカー
解説: https://theevilbit.github.io/beyond/beyond_0017
位置
/Library/ColorPickers
ルート権限が必要
トリガー: カラーピッカーを使用する
~/Library/ColorPickers
トリガー: カラーピッカーを使用する
説明とエクスプロイト
コードと一緒にカラーピッカーバンドルをコンパイルします(例: こちらを使用できます)そしてコンストラクタを追加します(スクリーンセーバーセクションのように)バンドルを~/Library/ColorPickers
にコピーします。
その後、カラーピッカーがトリガーされると、あなたのコードも実行されるはずです。
あなたのライブラリをロードするバイナリには非常に制限の厳しいサンドボックスがあることに注意してください: /System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64
Finder Sync Plugins
解説: https://theevilbit.github.io/beyond/beyond_0026/ 解説: https://objective-see.org/blog/blog_0x11.html
サンドボックスをバイパスするのに役立つ: いいえ、独自のアプリを実行する必要があるため
TCCバイパス: ???
位置
特定のアプリ
説明とエクスプロイト
Finder Sync Extensionを持つアプリケーションの例はこちらで見つけることができます。
アプリケーションにはFinder Sync Extensions
を持つことができます。この拡張機能は、実行されるアプリケーション内に配置されます。さらに、拡張機能がコードを実行できるようにするには、いくつかの有効なApple開発者証明書で署名されている必要があり、サンドボックス化されている必要があります(緩和された例外が追加される可能性があります)、そして次のようなものに登録されている必要があります:
スクリーンセーバー
Writeup: https://theevilbit.github.io/beyond/beyond_0016/ Writeup: https://posts.specterops.io/saving-your-access-d562bf5bf90b
ロケーション
/System/Library/Screen Savers
ルート権限が必要
トリガー: スクリーンセーバーを選択
/Library/Screen Savers
ルート権限が必要
トリガー: スクリーンセーバーを選択
~/Library/Screen Savers
トリガー: スクリーンセーバーを選択
説明とエクスプロイト
Xcodeで新しいプロジェクトを作成し、新しいスクリーンセーバーを生成するためのテンプレートを選択します。次に、例えば以下のコードを追加してログを生成します。
ビルドし、.saver
バンドルを**~/Library/Screen Savers
**にコピーします。その後、スクリーンセーバーGUIを開き、それをクリックするだけで多くのログが生成されるはずです:
このコードをロードするバイナリの権限(/System/Library/Frameworks/ScreenSaver.framework/PlugIns/legacyScreenSaver.appex/Contents/MacOS/legacyScreenSaver
)の中に com.apple.security.app-sandbox
があるため、一般的なアプリケーションサンドボックス内にいることに注意してください。
Saver code:
Spotlight Plugins
writeup: https://theevilbit.github.io/beyond/beyond_0011/
位置
~/Library/Spotlight/
トリガー: スポットライトプラグインで管理される拡張子の新しいファイルが作成されます。
/Library/Spotlight/
トリガー: スポットライトプラグインで管理される拡張子の新しいファイルが作成されます。
ルート権限が必要
/System/Library/Spotlight/
トリガー: スポットライトプラグインで管理される拡張子の新しいファイルが作成されます。
ルート権限が必要
Some.app/Contents/Library/Spotlight/
トリガー: スポットライトプラグインで管理される拡張子の新しいファイルが作成されます。
新しいアプリが必要
説明と悪用
SpotlightはmacOSの組み込み検索機能で、ユーザーにコンピュータ上のデータへの迅速かつ包括的なアクセスを提供するよう設計されています。 この迅速な検索機能を可能にするために、Spotlightは独自のデータベースを維持し、ほとんどのファイルを解析してインデックスを作成し、ファイル名とその内容の両方を素早く検索できるようにします。
Spotlightの基本メカニズムには、'mds'という中央プロセスが関与しており、これは**'メタデータサーバ'の略称です。このプロセスはSpotlightサービス全体を統括します。これに加えて、異なるファイルタイプをインデックス化するなどのさまざまなメンテナンスタスクを実行する複数の'mdworker'デーモンが存在します(ps -ef | grep mdworker
)。これらのタスクは、Spotlightインポータープラグインまたは".mdimporterバンドル**"によって可能にされ、Spotlightがさまざまなファイル形式全体のコンテンツを理解してインデックス化できるようにします。
プラグインまたは**.mdimporter
バンドルは以前に言及された場所にあり、新しいバンドルが現れるとすぐにロードされます(サービスの再起動は不要)。これらのバンドルは、管理できるファイルタイプと拡張子を示さなければならず**、このようにして、指定された拡張子の新しいファイルが作成されるとSpotlightがそれらを使用します。
すべての**mdimporters
**を見つけることができます。実行中:
そして例えば**/Library/Spotlight/iBooksAuthor.mdimporter**は、これらの種類のファイル(拡張子.iba
および.book
など)を解析するために使用されます:
他のmdimporter
のPlistをチェックすると、**UTTypeConformsTo
**エントリが見つからないことがあります。これは組み込みの_Uniform Type Identifiers_ (UTI)であり、拡張子を指定する必要がないためです。
さらに、システムのデフォルトプラグインが常に優先されるため、攻撃者はAppleの独自のmdimporters
によってインデックス付けされていないファイルにのみアクセスできます。
独自のインポータを作成するには、このプロジェクトから始めることができます: https://github.com/megrimm/pd-spotlight-importer、そして名前を変更し、**CFBundleDocumentTypes
を変更し、UTImportedTypeDeclarations
を追加して、サポートしたい拡張子をサポートし、schema.xml
でそれらを反映させます。
その後、GetMetadataForFile
**関数のコードを変更して、処理された拡張子を持つファイルが作成されたときにペイロードを実行するようにします。
最後に、新しい.mdimporter
をビルドしてコピーし、以前のいずれかの場所に配置し、ログを監視するか、**mdimport -L
**をチェックしてロードされているかどうかを確認できます。
Preference Pane
これはもう機能していないようです。
解説: https://theevilbit.github.io/beyond/beyond_0009/
位置
/System/Library/PreferencePanes
/Library/PreferencePanes
~/Library/PreferencePanes
説明
これはもう機能していないようです。
Root Sandbox Bypass
ここでは、サンドボックス回避に役立つ開始位置を見つけることができます。これにより、ファイルに書き込むことで単純に何かを実行できます。rootであることや他の奇妙な条件が必要です。
定期的
解説: https://theevilbit.github.io/beyond/beyond_0019/
位置
/etc/periodic/daily
,/etc/periodic/weekly
,/etc/periodic/monthly
,/usr/local/etc/periodic
root権限が必要
トリガー: 時間が来たとき
/etc/daily.local
,/etc/weekly.local
または/etc/monthly.local
root権限が必要
トリガー: 時間が来たとき
説明と悪用
定期スクリプト(/etc/periodic
)は、/System/Library/LaunchDaemons/com.apple.periodic*
で構成されたランチデーモンによって実行されます。/etc/periodic/
に保存されたスクリプトはファイルの所有者として実行されるため、潜在的な特権昇格には機能しません。
**/etc/defaults/periodic.conf
**に記載されている実行される他の定期スクリプトがあります:
/etc/daily.local
、/etc/weekly.local
、または/etc/monthly.local
のいずれかのファイルを書き換えることができれば、sooner or later実行されます。
定期スクリプトはスクリプトの所有者として実行されます。したがって、通常のユーザーがスクリプトの所有者である場合、そのユーザーとして実行されます(これにより特権昇格攻撃が防止される可能性があります)。
PAM
Writeup: Linux Hacktricks PAM Writeup: https://theevilbit.github.io/beyond/beyond_0005/
位置
常にRootが必要
説明と悪用
PAMはmacOS内での簡単な実行よりも持続性とマルウェアに焦点を当てているため、このブログではこのテクニックをよりよく理解するために詳細な説明は行いません。
永続性/特権昇格テクニックは、PAMを悪用することで簡単に行うことができます。/etc/pam.d/sudoモジュールを変更し、冒頭に次の行を追加するだけです:
したがって、それは次のように見えるでしょう:
そしてしたがって、sudo
を使用しようとする試みはすべて成功します。
このディレクトリはTCCによって保護されているため、ユーザーにアクセスを求めるプロンプトが表示される可能性が非常に高いことに注意してください。
認可プラグイン
解説: https://theevilbit.github.io/beyond/beyond_0028/ 解説: https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65
サンドボックスをバイパスするのに便利: 🟠
ただし、rootである必要があり、追加の設定が必要です
TCCバイパス: ???
位置
/Library/Security/SecurityAgentPlugins/
root権限が必要
プラグインを使用するために認可データベースを構成する必要があります
説明と悪用
ユーザーがログインするときに実行される認可プラグインを作成して、持続性を維持できます。これらのプラグインの作成方法についての詳細は、以前の解説を確認してください(悪く書かれたプラグインはロックアウトの原因となり、回復モードからMacをクリーンアップする必要があります)。
バンドルをロードされる場所に移動してください:
最後に、このプラグインをロードするルールを追加してください。
**evaluate-mechanisms
は、認可フレームワークに、認可のために外部メカニズムを呼び出す必要があることを伝えます。さらに、privileged
**は、それをrootによって実行されるようにします。
以下のようにトリガーします:
そして、スタッフグループにはsudoアクセス権が必要です(/etc/sudoers
を読んで確認してください)。
Man.conf
解説: https://theevilbit.github.io/beyond/beyond_0030/
位置
/private/etc/man.conf
root権限が必要
/private/etc/man.conf
: manが使用されるたび
説明とエクスプロイト
設定ファイル**/private/etc/man.conf
**は、manドキュメントファイルを開く際に使用するバイナリ/スクリプトを示しています。したがって、実行可能ファイルへのパスを変更すると、ユーザーがmanを使用してドキュメントを読むたびにバックドアが実行される可能性があります。
例えば、**/private/etc/man.conf
**に設定されています:
その後、/tmp/view
を次のように作成します:
Apache2
解説: https://theevilbit.github.io/beyond/beyond_0023/
位置
/etc/apache2/httpd.conf
root権限が必要
トリガー: Apache2が起動したとき
説明とエクスプロイト
/etc/apache2/httpd.conf
にモジュールをロードするよう指示することができます。次のような行を追加します:
これにより、コンパイルされたモジュールがApacheによってロードされます。唯一の注意点は、有効なApple証明書で署名するか、システムに新しい信頼された証明書を追加してそれで署名する必要があることです。
その後、サーバーが起動することを確認するために必要な場合は、次のコマンドを実行できます:
コード例はDylb:
BSM監査フレームワーク
解説: https://theevilbit.github.io/beyond/beyond_0031/
位置
/etc/security/audit_warn
root権限が必要
トリガー: auditdが警告を検出したとき
説明とエクスプロイト
auditdが警告を検出すると、スクリプト /etc/security/audit_warn
が 実行 されます。したがって、そこにペイロードを追加できます。
スタートアップアイテム
これは非推奨ですので、これらのディレクトリには何も見つかるべきではありません。
StartupItem は、/Library/StartupItems/
または /System/Library/StartupItems/
のいずれかに配置する必要があるディレクトリです。このディレクトリが確立されると、次の2つの特定のファイルを含める必要があります。
rc スクリプト:起動時に実行されるシェルスクリプト。
plist ファイル:
StartupParameters.plist
という名前のファイルで、さまざまな構成設定を含みます。
スタートアッププロセスがこれらを認識して利用するために、rc スクリプトと StartupParameters.plist
ファイルが正しく StartupItem ディレクトリ内に配置されていることを確認してください。
macOS Auto Start Locations
macOS provides several locations where programs can be configured to automatically start when a user logs in. These auto-start locations can be leveraged by malware to maintain persistence on a system. It is important to regularly review and monitor these locations to ensure only legitimate programs are set to auto-start.
User-Level Auto-Start Locations
Login Items: Located in System Preferences > Users & Groups > Login Items, this is the most common location where users can configure programs to auto-start at login.
Launch Agents: Located in
~/Library/LaunchAgents
, these are used to launch programs when a user logs in. Malware can install launch agents to achieve persistence.Launch Daemons: Located in
/Library/LaunchDaemons
, these are system-wide launch agents that execute with elevated privileges. Malware may abuse this location for persistence.
System-Level Auto-Start Locations
Startup Items: Located in
/Library/StartupItems
, these were used in older versions of macOS but are deprecated in macOS 10.11 and later.Launch Daemons: Located in
/Library/LaunchDaemons
, these system-wide launch agents execute with elevated privileges.Startup Daemons: Located in
/System/Library/LaunchDaemons
, these are launch daemons that are critical for the system to boot up properly.
By monitoring and reviewing these auto-start locations, users can detect and remove any unauthorized or malicious programs that may be configured to auto-start on their macOS system.
emond
私のmacOSではこのコンポーネントを見つけることができませんので、詳細についてはwriteupをチェックしてください
Writeup: https://theevilbit.github.io/beyond/beyond_0023/
Appleによって導入されたemondは、開発が不十分であるか、おそらく放棄されているように見えますが、アクセス可能なままです。Mac管理者にとって特に有益ではありませんが、この不明瞭なサービスは、脅威アクターにとって微妙な持続性手法として機能する可能性があり、おそらくほとんどのmacOS管理者には気付かれないでしょう。
その存在を認識している人にとって、emondの悪用を特定することは簡単です。このサービスのLaunchDaemonは、実行するスクリプトを単一のディレクトリで探します。これを調査するために、次のコマンドを使用できます:
XQuartz
Writeup: https://theevilbit.github.io/beyond/beyond_0018/
ロケーション
/opt/X11/etc/X11/xinit/privileged_startx.d
ルート権限が必要
トリガー: XQuartzを使用する場合
説明とエクスプロイト
XQuartzはもはやmacOSにインストールされていませんので、詳細についてはライトアップをチェックしてください。
kext
ルートとしてさえkextをインストールするのは非常に複雑なので、サンドボックスから脱出するためや持続性のためにこれを考慮しないでしょう(エクスプロイトがある場合を除く)
ロケーション
KEXTを起動アイテムとしてインストールするには、次のいずれかの場所にインストールする必要があります:
/System/Library/Extensions
OS Xオペレーティングシステムに組み込まれたKEXTファイル。
/Library/Extensions
サードパーティ製ソフトウェアによってインストールされたKEXTファイル
現在ロードされているkextファイルをリストアップすることができます:
詳細については、カーネル拡張機能をチェックしてください。
amstoold
解説: https://theevilbit.github.io/beyond/beyond_0029/
位置
/usr/local/bin/amstoold
ルート権限が必要
説明と悪用
明らかに、/System/Library/LaunchAgents/com.apple.amstoold.plist
からのplist
は、XPCサービスを公開しながらこのバイナリを使用していました...問題は、バイナリが存在しなかったため、そこに何かを配置し、XPCサービスが呼び出されるときにバイナリが呼び出されることができました。
私のmacOSではこれを見つけることができなくなりました。
xsanctl
解説: https://theevilbit.github.io/beyond/beyond_0015/
位置
/Library/Preferences/Xsan/.xsanrc
ルート権限が必要
トリガー: サービスが実行されるとき(まれ)
説明と悪用
このスクリプトを実行することはあまり一般的ではないようで、私のmacOSでも見つけることができませんでした。詳細については、解説をご覧ください。
/etc/rc.common
これは現代のMacOSバージョンでは機能しません
ここには、起動時に実行されるコマンドを配置することも可能です。 通常のrc.commonスクリプトの例:
持続性の技術とツール
Last updated