
harmjoyのWindowsベースのSeatbelt列挙ツールに触発されたmacOS列挙ツール。作者: Cedric Owens
SwiftBelt は、@harmjoy 氏の Windows ベースの列挙ツール Seatbelt に触発された macOS 列挙ツールです。SwiftBelt はコマンドラインユーティリティを一切使用せず、Swift コード(Cocoa Framework、Foundation ライブラリ、OSKit ライブラリなどを活用)を使用してシステム列挙を行います。攻撃側の観点で、macOS ホストへのアクセスを取得した後に列挙を実行するために利用できます。私は意図的に、ポップアップを引き起こす機能(例:キーチェーン列挙)を含めていません。
各種 Objective See ツールを検索するコードを提供してくれた Ramos04 氏、そして zshell 履歴と Azure 認証情報のコードを提供してくれた mattreduce 氏に感謝します。

macOS ホストに swift がインストールされていることを確認します
ターミナルから SwiftBelt ディレクトリに cd し、swift build を実行してバイナリを生成します。バイナリは SwiftBelt フォルダ内の .build/debug フォルダに SwiftBelt という名前で出力されます
目的のホストにコピーし、属性をクリア($ xattr -c SwiftBelt)し、実行可能に設定します($ chmod +x SwiftBelt)
実行します
SwiftBelt オプション:
-CheckFDA → フルディスクアクセスを確認します(Terminal に TCC 権限が付与されていなくても、ユーザーに TCC プロンプトを生成しません)。Spotlight データベース API クエリを使用して TCC.db を検索します。アプリコンテキストに FDA がすでに付与されているかどうかを返します。
-SecurityTools → 一般的な macOS セキュリティツール(少なくとも私が知っているもの)の存在を確認します
-SystemInfo → 現在の実行コンテキスト、TCC アクセシビリティアクセス、基本的なシステム情報、最終起動時刻、アイドル時間、画面が現在ロックされているかどうか、環境変数情報を確認します
-LockCheck → 画面が現在ロックされているかどうかを確認します(このチェックは個別にも追加しましたが、SystemInfo 内にもバンドルしています)
-SearchCreds → ssh/aws/azure/gcloud 認証情報を検索します
-Clipboard → クリップボードの内容をダンプします
-RunningApps → 実行中のすべてのアプリを一覧表示します
-ListUsers → ローカルユーザーアカウントを一覧表示します
-LaunchAgents → 起動エージェント、起動デーモン、構成プロファイルファイルを一覧表示します
-BrowserHistory → Safari、Firefox、Chrome、隔離履歴を取得しようとします(注意:Chrome または Firefox が実行中の場合、ロックされたデータベースから情報を読み取ることはできません。ただし、ロックされた db を別の場所にコピーして読み取ることはできます)
-SlackExtract → Slack が存在するか確認し、存在する場合は Cookie、ダウンロード、ワークスペース情報を読み取ります(Cody Thomas による研究を活用)
-ShellHistory → シェル(Bash または Zsh)の履歴内容を読み取ります
-Bookmarks → Chrome の保存済みブックマークを読み取ります
-ChromeUsernames → ~/Library/Application Support/Google/Chrome/Default/Login Data から読み取ります。これには各 URL とユーザー名が保存されています
-UniversalAccessAuth → /Library/Preferences/com.apple.universalaccessAuthWarning.plist から読み取り、ユーザーが承認プロンプトを受け取ったアプリケーションのリストと、承認(1)または拒否(2)を表示します
-StickieNotes → システム上で開かれている Stickie Notes ファイルの内容を読み取ります
-TextEditCheck → 保存されていない TextEdit ドキュメントをチェックし、ファイル内容の読み取りを試みます
-JupyterCheck → ipython 履歴データベース(Jupyter notebook が使用)の存在を確認し、見つかった場合は内容(実行された python コマンドを含む)を読み取ります
すべてのオプションを実行する場合:
./SwiftBelt
特定のオプションを指定する場合:
./SwiftBelt [オプション1] [オプション2] [オプション3]...
例:
./SwiftBelt -SystemInfo -Clipboard -SecurityTools ...
このツールは(検出が容易な)コマンドラインユーティリティを使用しませんが、システム上の複数のファイルを読み取るため、Endpoint Security Framework を活用するツールによって検出される可能性があります(これらのファイル読み取りは、特に ESF の ES_EVENT_TYPE_NOTIFY_OPEN イベントによってキャプチャされます)。