macOS Auto Start
Last updated
Last updated
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
このセクションは、ブログシリーズBeyond the good ol' LaunchAgentsに大きく基づいており、より多くの自動起動場所を追加し(可能であれば)、最新のmacOS(13.4)でどの技術がまだ機能しているかを示し、必要な権限を特定することを目的としています。
ここでは、サンドボックスバイパスに役立つ起動場所を見つけることができ、ファイルに書き込むことで何かを単純に実行し、非常に一般的な****アクション、特定の時間または通常サンドボックス内から実行できるアクションを待つことができます。
/Library/LaunchAgents
トリガー: 再起動
ルートが必要
/Library/LaunchDaemons
トリガー: 再起動
ルートが必要
/System/Library/LaunchAgents
トリガー: 再起動
ルートが必要
/System/Library/LaunchDaemons
トリガー: 再起動
ルートが必要
~/Library/LaunchAgents
トリガー: 再ログイン
~/Library/LaunchDemons
トリガー: 再ログイン
興味深い事実として、**launchd
**には、他のよく知られたサービスが起動する必要があることを示す埋め込まれたプロパティリストがMach-oセクション__Text.__config
に含まれています。さらに、これらのサービスにはRequireSuccess
、RequireRun
、RebootOnSuccess
が含まれており、成功裏に実行される必要があります。
もちろん、コード署名のために変更することはできません。
launchd
は、起動時にOX Sカーネルによって実行される最初のプロセスであり、シャットダウン時に終了する最後のプロセスです。常にPID 1を持つ必要があります。このプロセスは、次のASEP plistに示された構成を読み取り、実行します:
/Library/LaunchAgents
: 管理者によってインストールされたユーザーごとのエージェント
/Library/LaunchDaemons
: 管理者によってインストールされたシステム全体のデーモン
/System/Library/LaunchAgents
: Appleによって提供されたユーザーごとのエージェント
/System/Library/LaunchDaemons
: Appleによって提供されたシステム全体のデーモン
ユーザーがログインすると、/Users/$USER/Library/LaunchAgents
および/Users/$USER/Library/LaunchDemons
にあるplistがログインしたユーザーの権限で開始されます。
エージェントとデーモンの主な違いは、エージェントはユーザーがログインしたときに読み込まれ、デーモンはシステム起動時に読み込まれることです(sshのようなサービスは、ユーザーがシステムにアクセスする前に実行する必要があります)。また、エージェントはGUIを使用できる一方で、デーモンはバックグラウンドで実行する必要があります。
エージェントはユーザーがログインする前に実行される必要がある場合があり、これらはPreLoginAgents**と呼ばれます。例えば、これはログイン時に支援技術を提供するのに役立ちます。これらは/Library/LaunchAgents
にも見つけることができます(例はこちらを参照)。
新しいデーモンまたはエージェントの設定ファイルは、次回の再起動後またはlaunchctl load <target.plist>
を使用して読み込まれます。拡張子なしの.plistファイルを読み込むことも可能ですlaunchctl -F <file>
を使用して(ただし、これらのplistファイルは再起動後に自動的に読み込まれません)。
また、launchctl unload <target.plist>
を使用してアンロードすることも可能です(それによって指摘されたプロセスは終了します)。
エージェントまたはデーモンが実行されないように何も(オーバーライドなど)が**妨げていないことを確認するために、次のコマンドを実行します:sudo launchctl load -w /System/Library/LaunchDaemos/com.apple.smdb.plist
現在のユーザーによって読み込まれているすべてのエージェントとデーモンのリスト:
plistがユーザーによって所有されている場合、たとえそれがデーモンのシステム全体のフォルダーにあっても、タスクはユーザーとして実行され、rootとしては実行されません。これにより、一部の特権昇格攻撃を防ぐことができます。
launchd
は、カーネルから開始される最初のユーザーモードプロセスです。プロセスの開始は成功しなければならず、終了したりクラッシュしたりしてはいけません。それは一部の終了信号に対しても保護されています。
launchd
が最初に行うことの1つは、次のようなすべてのデーモンを開始することです:
実行される時間に基づくタイマーデーモン:
atd (com.apple.atrun.plist
): StartInterval
が30分
crond (com.apple.systemstats.daily.plist
): StartCalendarInterval
が00:15に開始
ネットワークデーモン:
org.cups.cups-lpd
: TCPでリッスン(SockType: stream
)し、SockServiceName: printer
SockServiceNameは、/etc/services
のポートまたはサービスでなければなりません
com.apple.xscertd.plist
: ポート1640でTCPにリッスン
指定されたパスが変更されたときに実行されるパスデーモン:
com.apple.postfix.master
: パス/etc/postfix/aliases
をチェック
IOKit通知デーモン:
com.apple.xartstorageremoted
: "com.apple.iokit.matching" => { "com.apple.device-attach" => { "IOMatchLaunchStream" => 1 ...
Machポート:
com.apple.xscertd-helper.plist
: MachServices
エントリにcom.apple.xscertd.helper
という名前を示しています
UserEventAgent:
これは前のものとは異なります。特定のイベントに応じてlaunchdがアプリを生成します。しかし、この場合、関与するメインバイナリはlaunchd
ではなく/usr/libexec/UserEventAgent
です。これは、SIP制限フォルダー/System/Library/UserEventPlugins/からプラグインをロードし、各プラグインはXPCEventModuleInitializer
キーに初期化子を示すか、古いプラグインの場合はそのInfo.plist
のFB86416D-6164-2070-726F-70735C216EC0
キーの下のCFPluginFactories
辞書に示します。
Writeup: https://theevilbit.github.io/beyond/beyond_0001/ Writeup (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
を使用しています。このシェルは、ターミナルアプリケーションが起動されたときや、デバイスがSSH経由でアクセスされたときに自動的にアクセスされます。bash
やsh
もmacOSに存在しますが、使用するには明示的に呼び出す必要があります。
zshのマニュアルページは、**man zsh
**で読むことができ、スタートアップファイルの長い説明があります。
指定された悪用の設定とログアウトおよびログイン、または再起動してもアプリを実行することはできませんでした。(アプリが実行されていなかったため、これらのアクションが実行されるときに実行されている必要があるかもしれません)
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
Trigger: ターミナルを開く
~/Library/Preferences
には、アプリケーションのユーザーの設定が保存されています。これらの設定のいくつかは、他のアプリケーション/スクリプトを実行するための構成を保持することができます。
例えば、ターミナルはスタートアップでコマンドを実行できます:
この設定は、ファイル ~/Library/Preferences/com.apple.Terminal.plist
に次のように反映されます:
したがって、システムのターミナルの設定のplistが上書きできる場合、open
機能を使用して ターミナルを開き、そのコマンドが実行される ことができます。
これをCLIから追加することができます:
どこでも
トリガー: ターミナルを開く
.terminal
スクリプトを作成して開くと、ターミナルアプリケーションが自動的に起動し、そこに示されたコマンドが実行されます。ターミナルアプリが特別な権限(TCCなど)を持っている場合、あなたのコマンドはその特別な権限で実行されます。
試してみてください:
You could also use the extensions .command
, .tool
, with regular shell scripts content and they will be also opened by Terminal.
ターミナルがフルディスクアクセスを持っている場合、そのアクションを完了することができます(実行されたコマンドはターミナルウィンドウに表示されることに注意してください)。
Writeup: https://theevilbit.github.io/beyond/beyond_0013/ Writeup: 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またはコンピュータを再起動
前述の書き込みによると、いくつかのオーディオプラグインをコンパイルして読み込むことが可能です。
Writeup: 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プラグインをコンパイルし、前述のいずれかの場所に配置して読み込み、サポートされているファイルに移動してスペースを押してトリガーすることが可能です。
これは私には機能しませんでした。ユーザーログインフックでもルートログアウトフックでもありませんでした。
Writeup: 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
に保存されます。
削除するには:
The root user one is stored in /private/var/root/Library/Preferences/com.apple.loginwindow.plist
ここでは、sandbox bypassに役立つスタートロケーションを見つけることができます。これにより、ファイルに書き込むことで何かを単純に実行し、特定のプログラムがインストールされている、"珍しい"ユーザーのアクションや環境のような、あまり一般的でない条件を期待しないことができます。
Writeup: 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は不要です
Trigger: cronジョブに依存します
現在のユーザーのcronジョブをリストするには:
You can also see all the cron jobs of the users in /usr/lib/cron/tabs/
and /var/at/tabs/
(needs root).
In MacOS several folders executing scripts with 特定の頻度 can be found in:
そこでは、通常の cron ジョブ、at ジョブ(あまり使用されていない)、および periodic ジョブ(主に一時ファイルのクリーンアップに使用される)を見つけることができます。毎日の定期ジョブは、例えば次のように実行できます: periodic daily
。
ユーザークロンジョブをプログラム的に追加するには、次のようにすることができます:
Writeup: https://theevilbit.github.io/beyond/beyond_0002/
~/Library/Application Support/iTerm2/Scripts/AutoLaunch
Trigger: iTermを開く
~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt
Trigger: iTermを開く
~/Library/Preferences/com.googlecode.iterm2.plist
Trigger: iTermを開く
**~/Library/Application Support/iTerm2/Scripts/AutoLaunch
**に保存されたスクリプトは実行されます。例えば:
または:
スクリプト ~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt
も実行されます:
iTerm2の設定は、~/Library/Preferences/com.googlecode.iterm2.plist
にあり、iTerm2ターミナルが開かれたときに実行するコマンドを示すことができます。
この設定はiTerm2の設定で構成できます:
そして、コマンドは設定に反映されます:
あなたは実行するコマンドを設定できます:
iTerm2の設定を悪用して任意のコマンドを実行する他の方法がある可能性が高いです。
Writeup: https://theevilbit.github.io/beyond/beyond_0007/
~/Library/Application\ Support/xbar/plugins/
Trigger: xbarが実行されるとき
人気のプログラムxbarがインストールされている場合、**~/Library/Application\ Support/xbar/plugins/
**にシェルスクリプトを書くことができ、xbarが起動すると実行されます:
Writeup: https://theevilbit.github.io/beyond/beyond_0008/
~/.hammerspoon/init.lua
Trigger: Hammerspoonが実行されるとき
Hammerspoonは、macOSのための自動化プラットフォームとして機能し、LUAスクリプト言語を利用して操作を行います。特に、完全なAppleScriptコードの統合とシェルスクリプトの実行をサポートし、スクリプト機能を大幅に強化しています。
アプリは単一のファイル~/.hammerspoon/init.lua
を探し、起動時にスクリプトが実行されます。
~/Library/Application Support/BetterTouchTool/*
このツールは、特定のショートカットが押されたときに実行するアプリケーションやスクリプトを指定することを可能にします。攻撃者は、データベース内で自分のショートカットと実行アクションを構成して、任意のコードを実行させることができるかもしれません(ショートカットは単にキーを押すことかもしれません)。
???
特定の条件が満たされたときにコードを実行できるワークフローを作成することができます。攻撃者がワークフローファイルを作成し、Alfredにそれを読み込ませることが可能かもしれません(ワークフローを使用するにはプレミアム版を購入する必要があります)。
Writeup: https://theevilbit.github.io/beyond/beyond_0006/
~/.ssh/rc
Trigger: ssh経由でのログイン
/etc/ssh/sshrc
ルートが必要
Trigger: ssh経由でのログイン
sshをオンにするにはフルディスクアクセスが必要です:
デフォルトでは、/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
トリガー: ログイン
**osascript
**を呼び出すペイロードが保存されます
/var/db/com.apple.xpc.launchd/loginitems.501.plist
トリガー: ログイン
ルート権限が必要
システム環境設定 -> ユーザーとグループ -> ログイン項目で、ユーザーがログインしたときに実行される項目を見つけることができます。 コマンドラインからそれらをリスト、追加、削除することが可能です:
これらの項目はファイル ~/Library/Application Support/com.apple.backgroundtaskmanagementagent
に保存されています。
ログイン項目 は、API SMLoginItemSetEnabled を使用しても示されることがあり、設定は /var/db/com.apple.xpc.launchd/loginitems.501.plist
に保存されます。
(ログイン項目に関する前のセクションを参照してください、これは拡張です)
ZIP ファイルを ログイン項目 として保存すると、アーカイブユーティリティ
がそれを開き、例えば ZIP が ~/Library
に保存されていて、LaunchAgents/file.plist
というバックドアを含むフォルダがあれば、そのフォルダが作成され(デフォルトでは作成されません)、plist が追加されるため、次回ユーザーが再ログインすると、plist に示されたバックドアが実行されます。
別のオプションは、ユーザーのホーム内に .bash_profile
と .zshenv
ファイルを作成することで、LaunchAgents フォルダが既に存在する場合でもこの技術は機能します。
記事: 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
を使用して得たのと同じ情報が含まれていることがわかります。
Writeup: https://theevilbit.github.io/beyond/beyond_0024/ Writeup: 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を使用してフォルダーアクションワークフローを作成し、サービスとしてインストールする。
フォルダーのコンテキストメニューのフォルダーアクション設定を介してスクリプトを手動で添付する。
OSAScriptを利用してSystem Events.app
にApple Eventメッセージを送信し、プログラム的にフォルダーアクションを設定する。
この方法は、アクションをシステムに埋め込むのに特に便利で、持続性のレベルを提供します。
以下のスクリプトは、フォルダーアクションによって実行できるものの例です:
Folder Actionsで上記のスクリプトを使用可能にするには、次のようにコンパイルします:
スクリプトがコンパイルされた後、以下のスクリプトを実行してフォルダアクションを設定します。このスクリプトは、フォルダアクションをグローバルに有効にし、特に以前にコンパイルされたスクリプトをデスクトップフォルダに添付します。
セットアップスクリプトを実行するには:
これはGUIを介してこの永続性を実装する方法です:
実行されるスクリプトは次のとおりです:
次のコマンドでコンパイルします: osacompile -l JavaScript -o folder.scpt source.js
次の場所に移動します:
次に、Folder Actions Setup
アプリを開き、監視したいフォルダを選択し、あなたの場合は**folder.scpt
**を選択します(私の場合はoutput2.scpと呼びました):
今、Finderでそのフォルダを開くと、あなたのスクリプトが実行されます。
この設定は、plistに保存されており、**~/Library/Preferences/com.apple.FolderActionsDispatcher.plist
**にbase64形式で格納されています。
では、GUIアクセスなしでこの永続性を準備してみましょう:
~/Library/Preferences/com.apple.FolderActionsDispatcher.plist
を/tmpにバックアップとしてコピーします:
cp ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist /tmp
Folder Actionsを削除します:
今、空の環境ができました。
バックアップファイルをコピーします:cp /tmp/com.apple.FolderActionsDispatcher.plist ~/Library/Preferences/
この設定を使用するためにFolder Actions Setup.appを開きます:open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"
これは私にはうまくいきませんでしたが、これが書き込みの指示です:(
書き込み: https://theevilbit.github.io/beyond/beyond_0027/
~/Library/Preferences/com.apple.dock.plist
トリガー: ユーザーがドック内のアプリをクリックしたとき
ドックに表示されるすべてのアプリケーションは、plist内に指定されています:~/Library/Preferences/com.apple.dock.plist
次のようにしてアプリケーションを追加することが可能です:
いくつかのソーシャルエンジニアリングを使用して、実際に自分のスクリプトを実行するために、例えばGoogle Chromeをドック内でなりすますことができます:
Writeup: 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
Writeup: https://theevilbit.github.io/beyond/beyond_0026/ Writeup: https://objective-see.org/blog/blog_0x11.html
サンドボックスをバイパスするのに役立つ: いいえ、独自のアプリを実行する必要があります
TCC バイパス: ???
特定のアプリ
Finder Sync 拡張機能を持つアプリケーションの例は こちら で見つけることができます。
アプリケーションは 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を開き、それをクリックすると、多くのログが生成されるはずです:
このコードを読み込むバイナリの権限内に**com.apple.security.app-sandbox
が含まれているため、あなたは共通のアプリケーションサンドボックス内**にいることに注意してください。
Saver code:
writeup: https://theevilbit.github.io/beyond/beyond_0011/
~/Library/Spotlight/
Trigger: Spotlightプラグインによって管理される拡張子の新しいファイルが作成されます。
/Library/Spotlight/
Trigger: Spotlightプラグインによって管理される拡張子の新しいファイルが作成されます。
Rootが必要
/System/Library/Spotlight/
Trigger: Spotlightプラグインによって管理される拡張子の新しいファイルが作成されます。
Rootが必要
Some.app/Contents/Library/Spotlight/
Trigger: Spotlightプラグインによって管理される拡張子の新しいファイルが作成されます。
新しいアプリが必要
SpotlightはmacOSの組み込み検索機能で、ユーザーにコンピュータ上のデータへの迅速かつ包括的なアクセスを提供することを目的としています。 この迅速な検索機能を実現するために、Spotlightは独自のデータベースを維持し、ほとんどのファイルを解析することによってインデックスを作成し、ファイル名とその内容の両方を迅速に検索できるようにしています。
Spotlightの基本的なメカニズムは、**'metadata server'を意味する中央プロセス「mds」に関与しています。このプロセスは、Spotlightサービス全体を調整します。これに加えて、さまざまなメンテナンスタスクを実行する複数の「mdworker」デーモンがあります(ps -ef | grep mdworker
)。これらのタスクは、Spotlightがさまざまなファイル形式の内容を理解しインデックス化できるようにするSpotlightインポータープラグイン、または".mdimporter bundles"**によって可能になります。
プラグインまたは**.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.
をチェックして、それが読み込まれているかどうかを確認できます。
これがもう機能していないようです。
Writeup: https://theevilbit.github.io/beyond/beyond_0009/
/System/Library/PreferencePanes
/Library/PreferencePanes
~/Library/PreferencePanes
これがもう機能していないようです。
ここでは、サンドボックスバイパス に役立つ開始位置を見つけることができ、ファイルに書き込むことによって単純に何かを実行することができ、root であるか、他の奇妙な条件を必要とします。
Writeup: https://theevilbit.github.io/beyond/beyond_0019/
/etc/periodic/daily
, /etc/periodic/weekly
, /etc/periodic/monthly
, /usr/local/etc/periodic
Root 必要
Trigger: 時間が来たとき
/etc/daily.local
, /etc/weekly.local
または /etc/monthly.local
Root 必要
Trigger: 時間が来たとき
定期的なスクリプト (/etc/periodic
) は、/System/Library/LaunchDaemons/com.apple.periodic*
に設定された launch daemons によって実行されます。/etc/periodic/
に保存されたスクリプトは ファイルの所有者として実行される ため、これは潜在的な特権昇格には機能しません。
他に、/etc/defaults/periodic.conf
に示されている定期的に実行されるスクリプトがあります:
もし /etc/daily.local
、/etc/weekly.local
、または /etc/monthly.local
のいずれかのファイルを書き込むことができれば、それは遅かれ早かれ実行されます。
定期的なスクリプトはスクリプトの所有者として実行されることに注意してください。したがって、通常のユーザーがスクリプトを所有している場合、そのユーザーとして実行されます(これにより特権昇格攻撃が防止される可能性があります)。
Writeup: Linux Hacktricks PAM Writeup: https://theevilbit.github.io/beyond/beyond_0005/
常にrootが必要
PAMは持続性とマルウェアにより焦点を当てているため、macOS内での簡単な実行にはあまり焦点を当てていません。このブログでは詳細な説明は行いませんので、この技術をよりよく理解するために書き込みを読んでください。
PAMモジュールを確認するには:
A persistence/privilege escalation technique abusing PAMは、モジュール/etc/pam.d/sudoを修正し、最初に次の行を追加するだけで簡単に実行できます:
だから、このように見えるでしょう:
そして、したがって、sudo
が機能する試みはすべて成功します。
このディレクトリはTCCによって保護されているため、ユーザーがアクセスを求めるプロンプトが表示される可能性が非常に高いことに注意してください。
もう一つの良い例はsuで、PAMモジュールにパラメータを渡すことも可能であることがわかります(このファイルにバックドアを仕掛けることもできます):
Writeup: https://theevilbit.github.io/beyond/beyond_0028/ Writeup: 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
を読む)。
Writeup: 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
を次のように作成します:
Writeup: https://theevilbit.github.io/beyond/beyond_0023/
/etc/apache2/httpd.conf
Rootが必要
トリガー: Apache2が起動したとき
/etc/apache2/httpd.conf
にモジュールをロードするように指示するために、次のような行を追加できます:
この方法で、コンパイルされたモジュールがApacheによってロードされます。唯一の注意点は、有効なApple証明書で署名する必要があるか、システムに新しい信頼された証明書を追加し、それで署名する必要があるということです。
その後、必要に応じて、サーバーが起動することを確認するために、次のコマンドを実行できます:
Dylbのコード例:
Writeup: https://theevilbit.github.io/beyond/beyond_0031/
/etc/security/audit_warn
Root権限が必要
トリガー: auditdが警告を検出したとき
auditdが警告を検出するたびに、スクリプト**/etc/security/audit_warn
が実行されます**。したがって、そこにペイロードを追加することができます。
sudo audit -n
を使用して警告を強制することができます。
これは非推奨であるため、これらのディレクトリには何も見つからないはずです。
StartupItemは、/Library/StartupItems/
または/System/Library/StartupItems/
のいずれかに配置されるべきディレクトリです。このディレクトリが確立されると、2つの特定のファイルを含む必要があります:
rcスクリプト:スタートアップ時に実行されるシェルスクリプト。
plistファイル:特にStartupParameters.plist
という名前のファイルで、さまざまな設定を含みます。
スタートアッププロセスがそれらを認識し利用できるように、rcスクリプトとStartupParameters.plist
ファイルの両方がStartupItemディレクトリ内に正しく配置されていることを確認してください。
私のmacOSではこのコンポーネントを見つけることができないので、詳細については記事を確認してください
記事: https://theevilbit.github.io/beyond/beyond_0023/
Appleによって導入されたemondは、未発達または放棄された可能性のあるログ記録メカニズムですが、依然としてアクセス可能です。Mac管理者にとって特に有益ではありませんが、この不明瞭なサービスは、脅威アクターにとって微妙な持続性の手段として機能する可能性があり、ほとんどのmacOS管理者には気付かれないでしょう。
その存在を知っている人にとって、emondの悪用を特定することは簡単です。このサービスのシステムのLaunchDaemonは、単一のディレクトリ内で実行するスクリプトを探します。これを調査するには、次のコマンドを使用できます:
Writeup: https://theevilbit.github.io/beyond/beyond_0018/
/opt/X11/etc/X11/xinit/privileged_startx.d
Rootが必要
トリガー: XQuartzを使用して
XQuartzはmacOSにもはやインストールされていませんので、詳細情報が必要な場合は、書き込みを確認してください。
kextをインストールするのは非常に複雑で、ルートとしてもサンドボックスからの脱出や持続性のために考慮しないでしょう(エクスプロイトがない限り)
KEXTをスタートアップアイテムとしてインストールするには、次のいずれかの場所にインストールする必要があります:
/System/Library/Extensions
OS Xオペレーティングシステムに組み込まれたKEXTファイル。
/Library/Extensions
サードパーティソフトウェアによってインストールされたKEXTファイル
現在読み込まれているkextファイルをリストするには:
For more information about kernel extensions check this section.
Writeup: https://theevilbit.github.io/beyond/beyond_0029/
/usr/local/bin/amstoold
Root required
明らかに /System/Library/LaunchAgents/com.apple.amstoold.plist
の plist
は、このバイナリを使用して XPC サービスを公開していました... しかし、そのバイナリは存在しなかったため、そこに何かを置くことができ、XPC サービスが呼び出されるとあなたのバイナリが呼び出されます。
私の macOS ではこれを見つけることができません。
Writeup: https://theevilbit.github.io/beyond/beyond_0015/
/Library/Preferences/Xsan/.xsanrc
Root required
Trigger: サービスが実行されるとき(まれに)
このスクリプトを実行することはあまり一般的ではないようで、私の macOS では見つけることができませんでしたので、詳細が必要な場合は書き込みを確認してください。
これは最新の macOS バージョンでは機能しません
ここに 起動時に実行されるコマンドを置くことも可能です。 例として通常の rc.common スクリプト:
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)