macOS Keychain

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Основні ключові ланцюжки

  • Ключовий ланцюжок користувача (~/Library/Keychains/login.keycahin-db), який використовується для зберігання користувацьких облікових даних, таких як паролі додатків, паролі для Інтернету, сертифікати, паролі мережі та користувацькі пари ключів.

  • Системний ключовий ланцюжок (/Library/Keychains/System.keychain), який зберігає системні облікові дані, такі як паролі WiFi, кореневі сертифікати системи, приватні ключі системи та паролі додатків системи.

Доступ до ключового ланцюжка паролів

Ці файли, хоча і не мають вбудованого захисту і можуть бути завантажені, зашифровані і вимагають пароль чистого тексту користувача для розшифрування. Інструмент, такий як Chainbreaker, може бути використаний для розшифрування.

Захист записів ключового ланцюжка

ACLs

Кожен запис у ключовому ланцюжку керується Списками керування доступом (ACLs), які вказують, хто може виконувати різні дії з записом ключового ланцюжка, включаючи:

  • ACLAuhtorizationExportClear: Дозволяє власнику отримати чіткий текст секрету.

  • ACLAuhtorizationExportWrapped: Дозволяє власнику отримати чіткий текст, зашифрований іншим наданим паролем.

  • ACLAuhtorizationAny: Дозволяє власнику виконувати будь-яку дію.

ACL супроводжується списком довірених додатків, які можуть виконувати ці дії без підказки. Це може бути:

  • 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: Який тип запису у ключниці

Отримання ACLs кожного запису:

  • За допомогою API SecAccessCopyACLList ви можете отримати ACL для елемента ключниці, і він поверне список ACL (наприклад, ACLAuhtorizationExportClear та інші раніше згадані), де кожен список має:

  • Опис

  • Список довірених додатків. Це може бути:

  • Додаток: /Applications/Slack.app

  • Бінарний файл: /usr/libexec/airportd

  • Група: group://AirPort

Експорт даних:

  • API SecKeychainItemCopyContent отримує текст

  • API SecItemExport експортує ключі та сертифікати, але можливо доведеться встановити паролі для експорту вмісту зашифрованим

І ось вимоги, щоб мати можливість експортувати секрет без запиту:

  • Якщо 1+ довірених додатків перелічено:

  • Потрібні відповідні авторизації (Nil, або бути частиною списку дозволених додатків у авторизації для доступу до конфіденційної інформації)

  • Потрібно, щоб кодовий підпис відповідав PartitionID

  • Потрібно, щоб кодовий підпис відповідав кодовому підпису одного довіреного додатку (або бути членом відповідної групи KeychainAccessGroup)

  • Якщо всі додатки довірені:

  • Потрібні відповідні авторизації

  • Потрібно, щоб кодовий підпис відповідав PartitionID

  • Якщо немає PartitionID, тоді це не потрібно

Отже, якщо перелічено 1 додаток, вам потрібно впровадити код у цей додаток.

Якщо в PartitionID вказано apple, ви можете отримати до нього доступ за допомогою osascript, щоб отримати доступ до всього, що довіряє всім додаткам з apple в PartitionID. Python також може бути використаний для цього.

Два додаткові атрибути

  • Невидимий: Це булевий прапорець для приховування запису від UI додатка Keychain

  • Загальний: Це для зберігання метаданих (тому це НЕ ШИФРОВАНО)

  • Компанія Microsoft зберігала в чистому тексті всі оновлювальні токени для доступу до чутливих кінцевих точок.

Посилання

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated