macOS Keychain

ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)

HackTricksをサポートする他の方法:

WhiteIntelは、ダークウェブを活用した検索エンジンで、盗難マルウェアによる侵害を受けたかどうかを確認するための無料機能を提供しています。

WhiteIntelの主な目標は、情報窃取マルウェアによるアカウント乗っ取りとランサムウェア攻撃に対抗することです。

彼らのウェブサイトをチェックして、無料でエンジンを試すことができます:


メインキーチェーン

  • ユーザーキーチェーン~/Library/Keychains/login.keycahin-db)は、アプリケーションパスワード、インターネットパスワード、ユーザー生成証明書、ネットワークパスワード、ユーザー生成の公開/秘密鍵など、ユーザー固有の資格情報を保存するために使用されます。

  • システムキーチェーン/Library/Keychains/System.keychain)は、WiFiパスワード、システムルート証明書、システムの秘密鍵、システムアプリケーションパスワードなど、システム全体の資格情報を保存します。

パスワードキーチェーンアクセス

これらのファイルは、固有の保護を持たないため、ダウンロードできますが、ユーザーの平文パスワードが必要です。Chainbreakerのようなツールを使用して復号化できます。

キーチェーンエントリの保護

ACLs

キーチェーン内の各エントリは、**アクセス制御リスト(ACLs)**によって管理され、キーチェーンエントリでさまざまなアクションを実行できるユーザーを規定します。これには以下が含まれます:

  • ACLAuhtorizationExportClear:保持者が秘密のクリアテキストを取得できるようにします。

  • ACLAuhtorizationExportWrapped:保持者が別の提供されたパスワードで暗号化されたクリアテキストを取得できるようにします。

  • ACLAuhtorizationAny:保持者が任意のアクションを実行できるようにします。

ACLsには、これらのアクションをプロンプトなしで実行できる信頼されたアプリケーションのリストが付属しています。これには以下が含まれます:

  • Nil(認証不要、誰もが信頼されています

  • 空のリスト(誰もが信頼されていません

  • 特定のアプリケーションリスト

また、エントリには**ACLAuthorizationPartitionID**というキーが含まれており、teamid、apple、cdhashを識別するために使用されます。

  • teamidが指定されている場合、エントリの値にアクセスするためには、使用されるアプリケーションが同じteamidを持っている必要があります。

  • appleが指定されている場合、アプリはAppleによって署名されている必要があります。

  • cdhashが示されている場合、アプリは特定のcdhashを持っている必要があります。

キーチェーンエントリの作成

Keychain Access.appを使用して新しい エントリを作成する場合、次のルールが適用されます:

  • すべてのアプリが暗号化できます。

  • アプリケーションはエクスポート/復号化できません(ユーザーにプロンプトを表示せず)。

  • すべてのアプリが整合性チェックを見ることができます。

  • どのアプリもACLを変更できません。

  • partitionIDは**apple**に設定されています。

アプリケーションがキーチェーンにエントリを作成する場合、ルールは若干異なります:

  • すべてのアプリが暗号化できます。

  • エクスポート/復号化を行うことができるのは作成アプリケーション(または明示的に追加された他のアプリ)だけです(ユーザーにプロンプトを表示せず)。

  • すべてのアプリが整合性チェックを見ることができます。

  • どのアプリもACLを変更できません。

  • partitionIDは**teamid:[ここにteamID]**に設定されています。

キーチェーンへのアクセス

security

# Dump all metadata and decrypted secrets (a lot of pop-ups)
security dump-keychain -a -d

# Find generic password for the "Slack" account and print the secrets
security find-generic-password -a "Slack" -g

# Change the specified entrys PartitionID entry
security set-generic-password-parition-list -s "test service" -a "test acount" -S

APIs

プロンプトを生成しないシークレットのキーチェーン列挙とダンプは、LockSmithというツールで行うことができます。

各キーチェーンエントリの情報をリスト化および取得:

  • API SecItemCopyMatching は各エントリに関する情報を提供し、使用する際に設定できるいくつかの属性があります:

  • kSecReturnData:trueの場合、データの復号を試みます(ポップアップを回避するためにfalseに設定)

  • kSecReturnRef:キーチェーンアイテムへの参照も取得します(後でポップアップなしで復号できることがわかった場合にtrueに設定)

  • kSecReturnAttributes:エントリに関するメタデータを取得します

  • kSecMatchLimit:返す結果の数

  • kSecClass:どの種類のキーチェーンエントリか

各エントリのACLを取得:

  • API SecAccessCopyACLList を使用すると、キーチェーンアイテムのACLを取得し、ACLのリスト(ACLAuhtorizationExportClearなどの以前に言及されたもの)が返されます。各リストには以下が含まれます:

  • 説明

  • 信頼されたアプリケーションリスト。これには次のようなものが含まれます:

  • アプリ:/Applications/Slack.app

  • バイナリ:/usr/libexec/airportd

  • グループ:group://AirPort

データをエクスポート:

  • API SecKeychainItemCopyContent は平文を取得します

  • API SecItemExport はキーと証明書をエクスポートしますが、コンテンツを暗号化してエクスポートするにはパスワードを設定する必要があります

そして、プロンプトなしでシークレットをエクスポートするための要件は次のとおりです:

  • 1つ以上の信頼されたアプリがリストされている場合:

  • 適切な認可が必要(Nil、またはシークレット情報にアクセスするための認可されたアプリのリストの一部である必要があります)

  • コード署名がPartitionIDと一致する必要があります

  • コード署名が信頼されたアプリのものと一致する必要があります(または適切なKeychainAccessGroupのメンバーである必要があります)

  • すべてのアプリケーションが信頼されている場合:

  • 適切な認可が必要

  • コード署名がPartitionIDと一致する必要があります

  • PartitionIDがない場合、これは必要ありません

したがって、1つのアプリケーションがリストされている場合、そのアプリケーションにコードをインジェクトする必要があります。

PartitionIDappleが指定されている場合、**osascriptを使用してアクセスできます。つまり、PartitionIDにappleが含まれるすべてのアプリケーションを信頼しているものにアクセスできます。Python**もこれに使用できます。

2つの追加属性

  • Invisible:UIキーチェーンアプリからエントリを非表示にするためのブールフラグです

  • Generalメタデータを保存するためのものです(つまり、暗号化されていない

  • Microsoftは、機密エンドポイントにアクセスするためのすべてのリフレッシュトークンを平文で保存していました。

参考文献

WhiteIntelは、ダークウェブを活用した検索エンジンであり、企業やその顧客が盗難マルウェアによって侵害されていないかをチェックするための無料機能を提供しています。

WhiteIntelの主な目標は、情報窃取マルウェアによるアカウント乗っ取りやランサムウェア攻撃に対抗することです。

彼らのウェブサイトをチェックし、無料でエンジンを試すことができます:

**ゼロからヒーローまでのAWSハッキングを学ぶ** htARTE(HackTricks AWS Red Team Expert)

HackTricksをサポートする他の方法:

Last updated