macOS Auto Start
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
このセクションは、ブログシリーズBeyond the good ol' LaunchAgentsに大きく基づいており、より多くの自動起動場所を追加し(可能であれば)、最新のmacOS(13.4)でどの技術がまだ機能しているかを示し、必要な権限を特定することを目的としています。
サンドボックスバイパス
ここでは、サンドボックスバイパスに役立つ起動場所を見つけることができ、ファイルに書き込むことで何かを単純に実行し、非常に一般的な****アクション、特定の時間、またはサンドボックス内から通常実行できるアクションを待つことができます。
Launchd
場所
/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
は、カーネルから開始される最初のユーザーモードプロセスです。プロセスの開始は成功しなければならず、終了またはクラッシュしてはいけません。いくつかの終了信号に対しても保護されています。
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}'
を使用して見つけることができます。
再起動されるアプリケーションを確認するには、次のようにします:
このリストにアプリケーションを追加するには、次のようにします:
Terminal Preferences
Location
~/Library/Preferences/com.apple.Terminal.plist
Trigger: ターミナルを開く
Description & Exploitation
~/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.
ターミナルがフルディスクアクセスを持っている場合、そのアクションを完了することができます(実行されたコマンドはターミナルウィンドウに表示されることに注意してください)。
Audio Plugins
Writeup: https://theevilbit.github.io/beyond/beyond_0013/ Writeup: https://posts.specterops.io/audio-unit-plug-ins-896d3434a882
Location
/Library/Audio/Plug-Ins/HAL
ルートが必要
トリガー: coreaudiodまたはコンピュータを再起動
/Library/Audio/Plug-ins/Components
ルートが必要
トリガー: coreaudiodまたはコンピュータを再起動
~/Library/Audio/Plug-ins/Components
トリガー: coreaudiodまたはコンピュータを再起動
/System/Library/Components
ルートが必要
トリガー: coreaudiodまたはコンピュータを再起動
Description
前述の書き込みによると、いくつかのオーディオプラグインをコンパイルして読み込むことが可能です。
QuickLook Plugins
Writeup: https://theevilbit.github.io/beyond/beyond_0028/
Location
/System/Library/QuickLook
/Library/QuickLook
~/Library/QuickLook
/Applications/AppNameHere/Contents/Library/QuickLook/
~/Applications/AppNameHere/Contents/Library/QuickLook/
Description & Exploitation
QuickLookプラグインは、ファイルのプレビューをトリガーしたとき(Finderでファイルを選択してスペースバーを押す)に実行され、そのファイルタイプをサポートするプラグインがインストールされている必要があります。
自分のQuickLookプラグインをコンパイルし、前述のいずれかの場所に配置して読み込み、サポートされているファイルに移動してスペースを押してトリガーすることが可能です。
Login/Logout Hooks
これは私には機能しませんでした。ユーザーログインフックでもルートログアウトフックでもありませんでした。
Writeup: https://theevilbit.github.io/beyond/beyond_0022/
Location
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
条件付きサンドボックスバイパス
ここでは、サンドボックスバイパスに役立つスタートロケーションを見つけることができます。これにより、ファイルに書き込むことで何かを単純に実行し、特定のプログラムがインストールされている、"珍しい"ユーザーのアクションや環境のような、あまり一般的でない条件を期待しないことができます。
Cron
Writeup: https://theevilbit.github.io/beyond/beyond_0004/
Location
/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
を使って実行できます。
ユーザークロンジョブをプログラム的に追加するには、次のようにすることができます:
iTerm2
Writeup: https://theevilbit.github.io/beyond/beyond_0002/
Locations
~/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を開く
Description & Exploitation
**~/Library/Application Support/iTerm2/Scripts/AutoLaunch
**に保存されたスクリプトは実行されます。例えば:
または:
スクリプト ~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt
も実行されます:
iTerm2の設定は、~/Library/Preferences/com.googlecode.iterm2.plist
にあり、iTerm2ターミナルが開かれたときに実行するコマンドを示すことができます。
この設定はiTerm2の設定で構成できます:
そして、コマンドは設定に反映されます:
あなたは実行するコマンドを設定できます:
iTerm2の設定を悪用して任意のコマンドを実行する他の方法がある可能性が高いです。
xbar
Writeup: https://theevilbit.github.io/beyond/beyond_0007/
Location
~/Library/Application\ Support/xbar/plugins/
Trigger: xbarが実行されるとき
Description
人気のプログラムxbarがインストールされている場合、**~/Library/Application\ Support/xbar/plugins/
**にシェルスクリプトを書くことができ、xbarが起動すると実行されます:
Hammerspoon
Writeup: https://theevilbit.github.io/beyond/beyond_0008/
Location
~/.hammerspoon/init.lua
Trigger: Hammerspoonが実行されるとき
Description
Hammerspoonは、macOSのための自動化プラットフォームとして機能し、LUAスクリプト言語を利用して操作を行います。特に、完全なAppleScriptコードの統合とシェルスクリプトの実行をサポートし、スクリプト機能を大幅に強化しています。
アプリは単一のファイル~/.hammerspoon/init.lua
を探し、起動時にスクリプトが実行されます。
BetterTouchTool
サンドボックスをバイパスするのに便利: ✅
しかし、BetterTouchToolをインストールする必要があります
TCCバイパス: ✅
Automation-ShortcutsとAccessibilityの権限を要求します
Location
~/Library/Application Support/BetterTouchTool/*
このツールは、特定のショートカットが押されたときに実行するアプリケーションやスクリプトを指定することを可能にします。攻撃者は、データベース内で自分のショートカットと実行アクションを構成して、任意のコードを実行させることができるかもしれません(ショートカットは単にキーを押すことかもしれません)。
Alfred
サンドボックスをバイパスするのに便利: ✅
しかし、Alfredをインストールする必要があります
TCCバイパス: ✅
Automation、Accessibility、さらにはFull-Diskアクセスの権限を要求します
Location
???
特定の条件が満たされたときにコードを実行できるワークフローを作成することができます。攻撃者がワークフローファイルを作成し、Alfredにそれを読み込ませることが可能かもしれません(ワークフローを使用するにはプレミアム版を購入する必要があります)。
SSHRC
Writeup: https://theevilbit.github.io/beyond/beyond_0006/
Location
~/.ssh/rc
Trigger: ssh経由でのログイン
/etc/ssh/sshrc
ルートが必要
Trigger: ssh経由でのログイン
sshをオンにするにはFull Disk Accessが必要です:
説明と悪用
デフォルトでは、/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 ファイルを ログイン項目 として保存すると、アーカイブユーティリティ
がそれを開き、例えば 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
を使用して得たのと同じ情報が含まれていることがわかります。
フォルダーアクション
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
先ほど設定したフォルダアクションを削除します:
今、空の環境ができました。
バックアップファイルをコピーします:
cp /tmp/com.apple.FolderActionsDispatcher.plist ~/Library/Preferences/
この設定を適用するためにFolder Actions Setup.appを開きます:
open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"
これは私にはうまくいきませんでしたが、これが書き込みの指示です:(
Dockショートカット
書き込み: 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
Finder Sync プラグイン
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:
Spotlight Plugins
writeup: https://theevilbit.github.io/beyond/beyond_0011/
Location
~/Library/Spotlight/
Trigger: Spotlightプラグインによって管理される拡張子の新しいファイルが作成されます。
/Library/Spotlight/
Trigger: Spotlightプラグインによって管理される拡張子の新しいファイルが作成されます。
Rootが必要
/System/Library/Spotlight/
Trigger: Spotlightプラグインによって管理される拡張子の新しいファイルが作成されます。
Rootが必要
Some.app/Contents/Library/Spotlight/
Trigger: Spotlightプラグインによって管理される拡張子の新しいファイルが作成されます。
新しいアプリが必要
Description & Exploitation
SpotlightはmacOSの組み込み検索機能で、ユーザーにコンピュータ上のデータへの迅速かつ包括的なアクセスを提供することを目的としています。 この迅速な検索機能を実現するために、Spotlightは独自のデータベースを維持し、ほとんどのファイルを解析することによってインデックスを作成し、ファイル名とその内容の両方を迅速に検索できるようにしています。
Spotlightの基本的なメカニズムは、**'metadata server'を意味する中央プロセス「mds」に関与しています。このプロセスはSpotlightサービス全体を調整します。これに加えて、さまざまなメンテナンスタスクを実行する複数の「mdworker」デーモンがあります(ps -ef | grep mdworker
)。これらのタスクは、Spotlightがさまざまなファイル形式の内容を理解しインデックス化できるようにするSpotlightインポータープラグイン、または".mdimporterバンドル"**によって可能になります。
プラグインまたは**.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
これがもう機能していないようです。
Writeup: https://theevilbit.github.io/beyond/beyond_0009/
Location
/System/Library/PreferencePanes
/Library/PreferencePanes
~/Library/PreferencePanes
Description
これがもう機能していないようです。
Root Sandbox Bypass
ここでは、サンドボックスバイパスに役立つ開始位置を見つけることができ、root として ファイルに書き込むことで単純に何かを実行することができます。また、他の 奇妙な条件 が必要です。
Periodic
Writeup: https://theevilbit.github.io/beyond/beyond_0019/
Location
/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: 時間が来たとき
Description & Exploitation
定期的なスクリプト (/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
のいずれかのファイルを書き込むことができれば、それは遅かれ早かれ実行されます。
定期的なスクリプトはスクリプトの所有者として実行されることに注意してください。したがって、通常のユーザーがスクリプトを所有している場合、それはそのユーザーとして実行されます(これにより特権昇格攻撃が防止される可能性があります)。
PAM
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モジュールにパラメータを渡すことも可能であることがわかります(このファイルにバックドアを仕掛けることもできます):
Authorization Plugins
Writeup: https://theevilbit.github.io/beyond/beyond_0028/ Writeup: https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65
サンドボックスをバイパスするのに便利: 🟠
しかし、root権限が必要で、追加の設定が必要です
TCCバイパス: ???
Location
/Library/Security/SecurityAgentPlugins/
Rootが必要
プラグインを使用するために認証データベースを構成する必要があります
Description & Exploitation
ユーザーがログインするときに実行される認証プラグインを作成して、持続性を維持できます。これらのプラグインの作成方法についての詳細は、前のライティングを確認してください(注意してください、適切に書かれていないものはロックアウトされる可能性があり、リカバリーモードからMacをクリーンアップする必要があります)。
バンドルを読み込む場所に移動します:
最後に、このプラグインをロードするルールを追加します:
The evaluate-mechanisms
は、認可フレームワークに外部メカニズムを呼び出す必要があることを伝えます。さらに、**privileged
**は、それをrootによって実行させます。
Trigger it with:
そして、スタッフグループはsudoアクセスを持っている必要があります(確認するには/etc/sudoers
を読む)。
Man.conf
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
を作成します:
Apache2
Writeup: https://theevilbit.github.io/beyond/beyond_0023/
Location
/etc/apache2/httpd.conf
Rootが必要
トリガー: Apache2が起動したとき
Description & Exploit
/etc/apache2/httpd.conf
にモジュールをロードするように指示するために、次のような行を追加できます:
この方法で、コンパイルされたモジュールがApacheによって読み込まれます。唯一の注意点は、有効なApple証明書で署名する必要があるか、システムに新しい信頼された証明書を追加し、それで署名する必要があるということです。
その後、必要に応じて、サーバーが起動することを確認するために、次のコマンドを実行できます:
Dylbのコード例:
BSM監査フレームワーク
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ディレクトリ内に正しく配置されていることを確認してください。
emond
このコンポーネントは私のmacOSに見つからないので、詳細については記事を確認してください
Writeup: https://theevilbit.github.io/beyond/beyond_0023/
Appleによって導入されたemondは、未発達または放棄された可能性のあるログ記録メカニズムですが、依然としてアクセス可能です。Mac管理者にとって特に有益ではありませんが、この不明瞭なサービスは、脅威アクターにとって微妙な持続性の手段として機能する可能性があり、ほとんどのmacOS管理者には気付かれないでしょう。
その存在を知っている人にとって、emondの悪用を特定することは簡単です。このサービスのシステムのLaunchDaemonは、単一のディレクトリ内で実行するスクリプトを探します。これを調査するには、次のコマンドを使用できます:
XQuartz
Writeup: https://theevilbit.github.io/beyond/beyond_0018/
Location
/opt/X11/etc/X11/xinit/privileged_startx.d
Root required
Trigger: With XQuartz
Description & Exploit
XQuartzはmacOSにもはやインストールされていませんので、詳細情報が必要な場合は、書き込みを確認してください。
kext
kextをインストールするのは非常に複雑で、ルートとしてもサンドボックスからの脱出や持続性のためには考慮しません(エクスプロイトがない限り)
Location
KEXTをスタートアップアイテムとしてインストールするには、次のいずれかの場所にインストールする必要があります:
/System/Library/Extensions
OS Xオペレーティングシステムに組み込まれたKEXTファイル。
/Library/Extensions
サードパーティソフトウェアによってインストールされたKEXTファイル
現在読み込まれているkextファイルをリストするには:
For more information about kernel extensions check this section.
amstoold
Writeup: https://theevilbit.github.io/beyond/beyond_0029/
Location
/usr/local/bin/amstoold
Root required
Description & Exploitation
明らかに /System/Library/LaunchAgents/com.apple.amstoold.plist
の plist
は、このバイナリを使用して XPC サービスを公開していました... しかし、バイナリは存在しなかったため、そこに何かを置くことができ、XPC サービスが呼び出されるとあなたのバイナリが呼び出されます。
私の macOS ではもはやこれを見つけることができません。
xsanctl
Writeup: https://theevilbit.github.io/beyond/beyond_0015/
Location
/Library/Preferences/Xsan/.xsanrc
Root required
Trigger: サービスが実行されるとき(まれに)
Description & exploit
明らかにこのスクリプトを実行することはあまり一般的ではなく、私の macOS ではそれを見つけることすらできなかったので、詳細が必要な場合は書き込みを確認してください。
/etc/rc.common
これは現代の MacOS バージョンでは機能しません
ここに 起動時に実行されるコマンドを置くことも可能です。 例として通常の rc.common スクリプト:
永続性技術とツール
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Last updated