mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-24 21:53:54 +00:00
Translated ['macos-hardening/macos-red-teaming/macos-keychain.md'] to ua
This commit is contained in:
parent
7a1d5d5926
commit
db4bc1ea02
1 changed files with 31 additions and 28 deletions
|
@ -15,21 +15,23 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Основні ключові ланцюги
|
||||
|
||||
## Main Keychains
|
||||
* **Ключовий ланцюг користувача** (`~/Library/Keychains/login.keychain-db`), який використовується для зберігання **облікових даних, специфічних для користувача**, таких як паролі додатків, паролі в Інтернеті, сертифікати, створені користувачем, паролі мережі та публічні/приватні ключі, створені користувачем.
|
||||
* **Системний ключовий ланцюг** (`/Library/Keychains/System.keychain`), який зберігає **системні облікові дані**, такі як паролі WiFi, кореневі сертифікати системи, приватні ключі системи та паролі додатків системи.
|
||||
* Можна знайти інші компоненти, такі як сертифікати в `/System/Library/Keychains/*`
|
||||
* В **iOS** є лише один **ключовий ланцюг**, розташований у `/private/var/Keychains/`. Ця папка також містить бази даних для `TrustStore`, органів сертифікації (`caissuercache`) та записів OSCP (`ocspache`).
|
||||
* Додатки будуть обмежені в ключовому ланцюзі лише до їх приватної області на основі їх ідентифікатора додатка.
|
||||
|
||||
* **Ключова схованка користувача** (`~/Library/Keychains/login.keycahin-db`), яка використовується для зберігання **облікових даних, специфічних для користувача**, таких як паролі додатків, паролі в Інтернеті, сертифікати, створені користувачем, паролі мережі та публічні/приватні ключі, створені користувачем.
|
||||
* **Системна ключова схованка** (`/Library/Keychains/System.keychain`), яка зберігає **системні облікові дані**, такі як паролі WiFi, кореневі сертифікати системи, приватні ключі системи та паролі додатків системи.
|
||||
|
||||
### Password Keychain Access
|
||||
### Доступ до ключового ланцюга паролів
|
||||
|
||||
Ці файли, хоча й не мають вбудованого захисту і можуть бути **завантажені**, зашифровані і вимагають **плоского пароля користувача для розшифровки**. Інструмент, такий як [**Chainbreaker**](https://github.com/n0fate/chainbreaker), може бути використаний для розшифровки.
|
||||
|
||||
## Keychain Entries Protections
|
||||
## Захист записів ключового ланцюга
|
||||
|
||||
### ACLs
|
||||
|
||||
Кожен запис у ключовій схованці регулюється **Списками контролю доступу (ACLs)**, які визначають, хто може виконувати різні дії над записом ключової схованки, включаючи:
|
||||
Кожен запис у ключовому ланцюзі регулюється **Списками контролю доступу (ACLs)**, які визначають, хто може виконувати різні дії над записом ключового ланцюга, включаючи:
|
||||
|
||||
* **ACLAuhtorizationExportClear**: Дозволяє власнику отримати відкритий текст секрету.
|
||||
* **ACLAuhtorizationExportWrapped**: Дозволяє власнику отримати відкритий текст, зашифрований іншим наданим паролем.
|
||||
|
@ -37,7 +39,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
|
|||
|
||||
ACL супроводжуються **переліком довірених додатків**, які можуть виконувати ці дії без запиту. Це може бути:
|
||||
|
||||
* **N`il`** (необхідна авторизація, **всі довірені**)
|
||||
* **N`il`** (не потрібно авторизації, **всі довірені**)
|
||||
* **Порожній** список (**ніхто** не довірений)
|
||||
* **Список** конкретних **додатків**.
|
||||
|
||||
|
@ -47,25 +49,25 @@ ACL супроводжуються **переліком довірених до
|
|||
* Якщо **apple** вказано, то додаток повинен бути **підписаний** **Apple**.
|
||||
* Якщо **cdhash** вказано, то **додаток** повинен мати конкретний **cdhash**.
|
||||
|
||||
### Creating a Keychain Entry
|
||||
### Створення запису в ключовому ланцюзі
|
||||
|
||||
Коли **новий** **запис** створюється за допомогою **`Keychain Access.app`**, застосовуються такі правила:
|
||||
|
||||
* Усі додатки можуть шифрувати.
|
||||
* **Жоден додаток** не може експортувати/розшифровувати (без запиту користувача).
|
||||
* Усі додатки можуть бачити перевірку цілісності.
|
||||
* Жоден додаток не може змінювати ACL.
|
||||
* Жоден додаток не може змінювати ACLs.
|
||||
* **partitionID** встановлюється на **`apple`**.
|
||||
|
||||
Коли **додаток створює запис у ключовій схованці**, правила трохи інші:
|
||||
Коли **додаток створює запис у ключовому ланцюзі**, правила трохи інші:
|
||||
|
||||
* Усі додатки можуть шифрувати.
|
||||
* Тільки **додаток, що створює** (або будь-які інші додатки, які явно додані) можуть експортувати/розшифровувати (без запиту користувача).
|
||||
* Усі додатки можуть бачити перевірку цілісності.
|
||||
* Жоден додаток не може змінювати ACL.
|
||||
* Жоден додаток не може змінювати ACLs.
|
||||
* **partitionID** встановлюється на **`teamid:[teamID here]`**.
|
||||
|
||||
## Accessing the Keychain
|
||||
## Доступ до ключового ланцюга
|
||||
|
||||
### `security`
|
||||
```bash
|
||||
|
@ -87,39 +89,41 @@ security dump-keychain ~/Library/Keychains/login.keychain-db
|
|||
### APIs
|
||||
|
||||
{% hint style="success" %}
|
||||
Перерахунок та вивантаження секретів з **keychain**, які **не викликають запит**, можна виконати за допомогою інструменту [**LockSmith**](https://github.com/its-a-feature/LockSmith)
|
||||
Перерахунок **keychain** та вивантаження** секретів, які **не викликають запит**, можна виконати за допомогою інструмента [**LockSmith**](https://github.com/its-a-feature/LockSmith)
|
||||
|
||||
Інші кінцеві точки API можна знайти в [**SecKeyChain.h**](https://opensource.apple.com/source/libsecurity\_keychain/libsecurity\_keychain-55017/lib/SecKeychain.h.auto.html) вихідному коді.
|
||||
{% endhint %}
|
||||
|
||||
Список та отримання **інформації** про кожен запис у keychain:
|
||||
Перелічіть та отримайте **інформацію** про кожен запис у keychain, використовуючи **Security Framework**, або ви також можете перевірити відкритий інструмент командного рядка Apple [**security**](https://opensource.apple.com/source/Security/Security-59306.61.1/SecurityTool/macOS/security.c.auto.html)**.** Деякі приклади API:
|
||||
|
||||
* API **`SecItemCopyMatching`** надає інформацію про кожен запис, і є кілька атрибутів, які ви можете встановити при його використанні:
|
||||
* **`kSecReturnData`**: Якщо true, він спробує розшифрувати дані (встановіть false, щоб уникнути потенційних спливаючих вікон)
|
||||
* **`kSecReturnRef`**: Отримати також посилання на елемент keychain (встановіть true, якщо пізніше ви побачите, що можете розшифрувати без спливаючого вікна)
|
||||
* **`kSecReturnData`**: Якщо істинно, він спробує розшифрувати дані (встановіть на хибне, щоб уникнути потенційних спливаючих вікон)
|
||||
* **`kSecReturnRef`**: Отримати також посилання на елемент keychain (встановіть на істинне, якщо пізніше ви побачите, що можете розшифрувати без спливаючого вікна)
|
||||
* **`kSecReturnAttributes`**: Отримати метадані про записи
|
||||
* **`kSecMatchLimit`**: Скільки результатів повернути
|
||||
* **`kSecClass`**: Який тип запису в keychain
|
||||
|
||||
Отримати **ACL** кожного запису:
|
||||
|
||||
* За допомогою API **`SecAccessCopyACLList`** ви можете отримати **ACL для елемента keychain**, і він поверне список ACL (як `ACLAuhtorizationExportClear` та інші, згадані раніше), де кожен список має:
|
||||
* За допомогою API **`SecAccessCopyACLList`** ви можете отримати **ACL для елемента keychain**, і він поверне список ACL (таких як `ACLAuhtorizationExportClear` та інші, згадані раніше), де кожен список має:
|
||||
* Опис
|
||||
* **Список довірених додатків**. Це може бути:
|
||||
* **Список надійних додатків**. Це може бути:
|
||||
* Додаток: /Applications/Slack.app
|
||||
* Бінарний файл: /usr/libexec/airportd
|
||||
* Група: group://AirPort
|
||||
|
||||
Експортувати дані:
|
||||
Експортуйте дані:
|
||||
|
||||
* API **`SecKeychainItemCopyContent`** отримує відкритий текст
|
||||
* API **`SecItemExport`** експортує ключі та сертифікати, але може знадобитися встановити паролі для експорту вмісту в зашифрованому вигляді
|
||||
|
||||
І це є **вимоги** для того, щоб **експортувати секрет без запиту**:
|
||||
|
||||
* Якщо **1+ довірених** додатків у списку:
|
||||
* Потрібні відповідні **авторизації** (**`Nil`**, або бути **частиною** дозволеного списку додатків у авторизації для доступу до секретної інформації)
|
||||
* Якщо **1+ надійних** додатків у списку:
|
||||
* Потрібні відповідні **авторизації** (**`Nil`**, або бути **частиною** дозволеного списку додатків в авторизації для доступу до секретної інформації)
|
||||
* Потрібен підпис коду, щоб відповідати **PartitionID**
|
||||
* Потрібен підпис коду, щоб відповідати підпису одного **довіреного додатку** (або бути членом правильного KeychainAccessGroup)
|
||||
* Якщо **всі додатки довірені**:
|
||||
* Потрібен підпис коду, щоб відповідати підпису одного **надійного додатку** (або бути членом правильного KeychainAccessGroup)
|
||||
* Якщо **всі додатки надійні**:
|
||||
* Потрібні відповідні **авторизації**
|
||||
* Потрібен підпис коду, щоб відповідати **PartitionID**
|
||||
* Якщо **немає PartitionID**, тоді це не потрібно
|
||||
|
@ -127,20 +131,19 @@ security dump-keychain ~/Library/Keychains/login.keychain-db
|
|||
{% hint style="danger" %}
|
||||
Отже, якщо є **1 додаток у списку**, вам потрібно **впровадити код у цей додаток**.
|
||||
|
||||
Якщо **apple** вказано в **partitionID**, ви можете отримати доступ до нього за допомогою **`osascript`**, тому все, що довіряє всім додаткам з apple в partitionID. **`Python`** також можна використовувати для цього.
|
||||
Якщо **apple** вказано в **partitionID**, ви можете отримати до нього доступ за допомогою **`osascript`**, тому все, що довіряє всім додаткам з apple в partitionID. **`Python`** також можна використовувати для цього.
|
||||
{% endhint %}
|
||||
|
||||
### Два додаткові атрибути
|
||||
|
||||
* **Невидимий**: Це булевий прапорець для **приховування** запису з **UI** додатку Keychain
|
||||
* **Загальний**: Це для зберігання **метаданих** (тому це НЕ ЗАШИФРОВАНО)
|
||||
* **Загальний**: Це для зберігання **метаданих** (тому він НЕ ЗАШИФРОВАНИЙ)
|
||||
* Microsoft зберігав у відкритому тексті всі токени оновлення для доступу до чутливих кінцевих точок.
|
||||
|
||||
## References
|
||||
## Посилання
|
||||
|
||||
* [**#OBTS v5.0: "Lock Picking the macOS Keychain" - Cody Thomas**](https://www.youtube.com/watch?v=jKE1ZW33JpY)
|
||||
|
||||
|
||||
{% hint style="success" %}
|
||||
Вивчайте та практикуйте AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Вивчайте та практикуйте GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
|
Loading…
Reference in a new issue