12 KiB
macOS Keychain
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ会社で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricks swagを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
- ハッキングのトリックを共有するために、hacktricks repo および hacktricks-cloud repoにPRを提出してください。
メインのキーチェーン
- ユーザーキーチェーン (
~/Library/Keychains/login.keycahin-db
) は、アプリケーションのパスワード、インターネットのパスワード、ユーザーが生成した証明書、ネットワークのパスワード、ユーザーが生成した公開/秘密鍵など、ユーザー固有の資格情報を保存するために使用されます。 - システムキーチェーン (
/Library/Keychains/System.keychain
) は、WiFiのパスワード、システムのルート証明書、システムの秘密鍵、システムのアプリケーションパスワードなど、システム全体の資格情報を保存します。
パスワードキーチェーンへのアクセス
これらのファイルは、固有の保護はありませんが、暗号化されており、ユーザーの平文パスワードを復号化するために必要です。Chainbreakerのようなツールを使用して復号化することができます。
キーチェーンエントリの保護
ACLs
キーチェーンの各エントリは、**アクセス制御リスト(ACLs)**によって管理され、キーチェーンエントリで実行できるさまざまなアクションを指示します。これには以下が含まれます:
- ACLAuhtorizationExportClear:保持者が秘密のクリアテキストを取得できるようにします。
- ACLAuhtorizationExportWrapped:保持者が別の提供されたパスワードで暗号化されたクリアテキストを取得できるようにします。
- ACLAuhtorizationAny:保持者が任意のアクションを実行できるようにします。
ACLにはさらに、これらのアクションをプロンプトなしで実行できる信頼されたアプリケーションのリストが付属しています。これには以下が含まれます:
- N
il
(認証は必要ありません、誰もが信頼されています) - 空のリスト(誰も信頼されていません)
- 特定のアプリケーションのリスト。
また、エントリには**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
{% hint style="success" %} キーチェーンの列挙とシークレットのダンプは、LockSmithというツールを使用して、プロンプトを生成しないで行うことができます。 {% endhint %}
各キーチェーンエントリについてのリストと情報を取得します:
- 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がない場合、これは必要ありません
{% hint style="danger" %} したがって、1つのアプリケーションがリストされている場合、そのアプリケーションにコードをインジェクトする必要があります。
PartitionIDにappleが指定されている場合、**osascript
を使用してアクセスできます。つまり、PartitionIDにappleを含むすべてのアプリケーションを信頼しているものにアクセスできます。これにはPython
**も使用できます。
{% endhint %}
2つの追加属性
- Invisible:UIキーチェーンアプリからエントリを非表示にするためのブールフラグです
- General:メタデータを保存するためのものです(つまり、暗号化されていません)
- Microsoftは、機密なエンドポイントにアクセスするためのすべてのリフレッシュトークンを平文で保存していました。
参考文献
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを発見しましょう。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 DiscordグループまたはTelegramグループに参加するか、Twitter 🐦@carlospolopmをフォローしてください。
- ハッキングのトリックを共有するには、hacktricks repo と hacktricks-cloud repo にPRを提出してください。