macOS Sensitive Locations & Interesting Daemons
パスワード
シャドウパスワード
シャドウパスワードは、**/var/db/dslocal/nodes/Default/users/
**にあるplist内のユーザーの構成と共に保存されます。
次のワンライナーを使用して、ユーザーに関するすべての情報(ハッシュ情報を含む)をダンプできます:
このようなスクリプトまたはこのようなものは、ハッシュをhashcat 形式に変換するために使用できます。
すべての非サービスアカウントの資格情報をmacOS PBKDF2-SHA512形式のhashcat形式でダンプする代替のワンライナー:
キーチェーンのダンプ
セキュリティバイナリを使用してパスワードを復号化してダンプする際には、ユーザーにこの操作を許可するよう求めるプロンプトが複数表示されることに注意してください。
このコメントに基づくと、これらのツールはBig Surではもはや機能しないようです。
Keychaindumpの概要
keychaindumpというツールは、macOSのキーチェーンからパスワードを抽出するために開発されましたが、Big Surなどの新しいmacOSバージョンでは制限があります。議...。keychaindumpの使用には、攻撃者がrootへのアクセス権を取得し特権を昇格させる必要があります。このツールは、キーチェーンがユーザーのログイン時にデフォルトでロック解除されていることを悪用しており、アプリケーションが繰り返しユーザーのパスワードを要求せずにアクセスできるようにしています。ただし、ユーザーが各使用後にキーチェーンをロックするオプションを選択した場合、keychaindumpは無効になります。
Keychaindumpは、Appleによって認証および暗号操作のためのデーモンとして説明されるsecuritydという特定のプロセスを対象に動作します。抽出プロセスには、ユーザーのログインパス複合から派生したMaster Keyを特定することが含まれます。このキーは、キーチェーンファイルを読み取るために不可欠です。keychaindumpは、vmmap
コマンドを使用してsecuritydのメモリヒープをスキャンし、MALLOC_TINY
としてフラグ付けされた領域内の潜在的なキーを探します。これらのメモリ位置を調査するためには、次のコマンドが使用されます:
潜在的なマスターキーを特定した後、keychaindump は特定のパターン (0x0000000000000018
) を探し、マスターキーの候補を示す。このキーを利用するには、keychaindump のソースコードで詳細に説明されているように、さらなるステップが必要であり、これには難読化も含まれる。この領域に焦点を当てるアナリストは、キーチェーンを復号化するための重要なデータが securityd プロセスのメモリに保存されていることに注意すべきである。keychaindump を実行するための例として、次のコマンドがある:
chainbreaker
Chainbreakerは、OSXキーチェーンから以下の種類の情報を法的に適切な方法で抽出するために使用できます:
ハッシュ化されたキーチェーンパスワード(hashcatやJohn the Ripperでクラック可能)
インターネットパスワード
一般的なパスワード
プライベートキー
パブリックキー
X509証明書
セキュアノート
Appleshareパスワード
キーチェーンのアンロックパスワード、volafoxやvolatilityを使用して取得したマスターキー、またはSystemKeyなどのアンロックファイルを使用すると、Chainbreakerは平文パスワードも提供します。
これらのいずれかの方法でキーチェーンをアンロックしない場合、Chainbreakerは他の利用可能な情報をすべて表示します。
キーチェーンキーをダンプ
SystemKeyを使用してキーチェーンキー(パスワード付き)をダンプする
ハッシュを解読してキーチェーンのキー(パスワード付き)をダンプする
メモリダンプを使用してキーチェーンキー(パスワード付き)をダンプする
これらの手順に従います メモリダンプを実行します
ユーザーパスワードを使用してキーチェーンキー(パスワード付き)をダンプする
ユーザーパスワードを知っている場合、それを使用してユーザーに属するキーチェーンをダンプおよび復号化できます。
kcpassword
kcpasswordファイルは、ユーザーのログインパスワードを保持するファイルですが、システム所有者が自動ログインを有効にしている場合にのみ該当します。したがって、ユーザーはパスワードを求められることなく自動的にログインされます(これはあまり安全ではありません)。
パスワードは、ファイル**/etc/kcpassword
に0x7D 0x89 0x52 0x23 0xD2 0xBC 0xDD 0xEA 0xA3 0xB9 0x1F
**というキーでXOR演算されて格納されます。ユーザーのパスワードがキーよりも長い場合、キーは再利用されます。
これにより、例えばこのようなスクリプトを使用して、パスワードをかなり簡単に回復できます。
データベース内の興味深い情報
メッセージ
通知
通知データは$(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/
にあります。
興味深い情報のほとんどはblobに含まれています。したがって、そのコンテンツを抽出して人間が読める形式に変換するか、**strings
**を使用する必要があります。アクセスするには、次のようにします:
ノート
ユーザーのノートは~/Library/Group Containers/group.com.apple.notes/NoteStore.sqlite
に保存されています。
Preferences
macOSアプリケーションの設定は**$HOME/Library/Preferences
**にあり、iOSの場合は/var/mobile/Containers/Data/Application/<UUID>/Library/Preferences
にあります。
macOSでは、defaults
というCLIツールを使用して設定ファイルを変更できます。
**/usr/sbin/cfprefsd
**はXPCサービスcom.apple.cfprefsd.daemon
とcom.apple.cfprefsd.agent
を所有し、設定を変更するなどのアクションを実行するために呼び出すことができます。
システム通知
Darwin通知
通知のためのメインデーモンは**/usr/sbin/notifyd
**です。通知を受信するために、クライアントはcom.apple.system.notification_center
Machポートを介して登録する必要があります(sudo lsmp -p <pid notifyd>
で確認できます)。デーモンはファイル/etc/notify.conf
で構成できます。
通知に使用される名前は一意の逆DNS表記であり、通知が送信されると、それを処理できると示しているクライアントが受信します。
現在の状態をダンプして(すべての名前を表示する)、notifydプロセスにSIGUSR2シグナルを送信し、生成されたファイル/var/run/notifyd_<pid>.status
を読み取ることができます。
分散通知センター
分散通知センターは、そのメインバイナリが**/usr/sbin/distnoted
**である。これは通知を送信する別の方法であり、いくつかのXPCサービスを公開し、クライアントを検証しようとするチェックを実行する。
Apple Push Notifications (APN)
この場合、アプリケーションはトピックに登録できる。クライアントは**apsd
を介してAppleのサーバーに接続するためのトークンを生成する。
その後、プロバイダーはトークンを生成し、Appleのサーバーに接続してクライアントにメッセージを送信できる。これらのメッセージはローカルでapsd
**によって受信され、それを待っているアプリケーションに通知が中継される。
設定は/Library/Preferences/com.apple.apsd.plist
にあります。
macOSにはメッセージのローカルデータベースがあり、/Library/Application\ Support/ApplePushService/aps.db
に、iOSには/var/mobile/Library/ApplePushService
にあります。これにはincoming_messages
、outgoing_messages
、channel
の3つのテーブルがあります。
次のコマンドを使用して、デーモンと接続に関する情報を取得することもできます:
ユーザー通知
これらは、ユーザーが画面で見る必要がある通知です:
CFUserNotification
: このAPIは、画面にメッセージ付きのポップアップを表示する方法を提供します。掲示板: これはiOSでバナーを表示し、消えてから通知センターに保存されます。
NSUserNotificationCenter
: これはMacOSのiOS掲示板です。通知のデータベースは/var/folders/<user temp>/0/com.apple.notificationcenter/db2/db
にあります。
Last updated