mirror of
https://github.com/carlospolop/hacktricks
synced 2025-02-16 14:08:26 +00:00
Translated ['macos-hardening/macos-red-teaming/macos-keychain.md'] to es
This commit is contained in:
parent
5a70640117
commit
7231488176
1 changed files with 18 additions and 15 deletions
|
@ -15,11 +15,13 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
|
||||
## Main Keychains
|
||||
|
||||
* The **User Keychain** (`~/Library/Keychains/login.keycahin-db`), que se utiliza para almacenar **credenciales específicas del usuario** como contraseñas de aplicaciones, contraseñas de internet, certificados generados por el usuario, contraseñas de red y claves públicas/privadas generadas por el usuario.
|
||||
* The **User Keychain** (`~/Library/Keychains/login.keychain-db`), que se utiliza para almacenar **credenciales específicas del usuario** como contraseñas de aplicaciones, contraseñas de internet, certificados generados por el usuario, contraseñas de red y claves públicas/privadas generadas por el usuario.
|
||||
* The **System Keychain** (`/Library/Keychains/System.keychain`), que almacena **credenciales a nivel de sistema** como contraseñas de WiFi, certificados raíz del sistema, claves privadas del sistema y contraseñas de aplicaciones del sistema.
|
||||
* Es posible encontrar otros componentes como certificados en `/System/Library/Keychains/*`
|
||||
* En **iOS** solo hay un **Keychain** ubicado en `/private/var/Keychains/`. Esta carpeta también contiene bases de datos para el `TrustStore`, autoridades de certificados (`caissuercache`) y entradas de OSCP (`ocspache`).
|
||||
* Las aplicaciones estarán restringidas en el llavero solo a su área privada basada en su identificador de aplicación.
|
||||
|
||||
### Password Keychain Access
|
||||
|
||||
|
@ -41,7 +43,7 @@ Las ACLs están acompañadas por una **lista de aplicaciones de confianza** que
|
|||
* Una lista **vacía** (**nadie** es de confianza)
|
||||
* **Lista** de **aplicaciones** específicas.
|
||||
|
||||
Además, la entrada podría contener la clave **`ACLAuthorizationPartitionID`,** que se utiliza para identificar el **teamid, apple,** y **cdhash.**
|
||||
Además, la entrada puede contener la clave **`ACLAuthorizationPartitionID`,** que se utiliza para identificar el **teamid, apple,** y **cdhash.**
|
||||
|
||||
* Si se especifica el **teamid**, entonces para **acceder al valor de la entrada** **sin** un **mensaje de confirmación**, la aplicación utilizada debe tener el **mismo teamid**.
|
||||
* Si se especifica el **apple**, entonces la aplicación necesita estar **firmada** por **Apple**.
|
||||
|
@ -60,7 +62,7 @@ Cuando se crea una **nueva** **entrada** usando **`Keychain Access.app`**, se ap
|
|||
Cuando una **aplicación crea una entrada en el llavero**, las reglas son ligeramente diferentes:
|
||||
|
||||
* Todas las aplicaciones pueden encriptar.
|
||||
* Solo la **aplicación que crea** (o cualquier otra aplicación explícitamente añadida) puede exportar/desencriptar (sin solicitar al usuario).
|
||||
* Solo la **aplicación que crea** (o cualquier otra aplicación añadida explícitamente) puede exportar/desencriptar (sin solicitar al usuario).
|
||||
* Todas las aplicaciones pueden ver la verificación de integridad.
|
||||
* Ninguna aplicación puede cambiar las ACLs.
|
||||
* El **partitionID** se establece en **`teamid:[teamID aquí]`**.
|
||||
|
@ -87,21 +89,23 @@ security dump-keychain ~/Library/Keychains/login.keychain-db
|
|||
### APIs
|
||||
|
||||
{% hint style="success" %}
|
||||
La **enumeración y volcado de secretos** de **keychain** que **no generará un aviso** se puede hacer con la herramienta [**LockSmith**](https://github.com/its-a-feature/LockSmith)
|
||||
La **enumeración y volcado de secretos** del **keychain** que **no generará un aviso** se puede hacer con la herramienta [**LockSmith**](https://github.com/its-a-feature/LockSmith)
|
||||
|
||||
Otros puntos finales de API se pueden encontrar en el código fuente de [**SecKeyChain.h**](https://opensource.apple.com/source/libsecurity\_keychain/libsecurity\_keychain-55017/lib/SecKeychain.h.auto.html).
|
||||
{% endhint %}
|
||||
|
||||
Lista y obtén **info** sobre cada entrada de keychain:
|
||||
Lista y obtén **info** sobre cada entrada del keychain usando el **Security Framework** o también podrías revisar la herramienta de línea de comandos de código abierto de Apple [**security**](https://opensource.apple.com/source/Security/Security-59306.61.1/SecurityTool/macOS/security.c.auto.html)**.** Algunos ejemplos de API:
|
||||
|
||||
* La API **`SecItemCopyMatching`** proporciona información sobre cada entrada y hay algunos atributos que puedes establecer al usarla:
|
||||
* **`kSecReturnData`**: Si es verdadero, intentará descifrar los datos (establecer en falso para evitar posibles ventanas emergentes)
|
||||
* **`kSecReturnRef`**: También obtén referencia al elemento de keychain (establecer en verdadero en caso de que más tarde veas que puedes descifrar sin ventana emergente)
|
||||
* **`kSecReturnData`**: Si es verdadero, intentará descifrar los datos (configúralo en falso para evitar posibles ventanas emergentes)
|
||||
* **`kSecReturnRef`**: También obtén referencia al elemento del keychain (configúralo en verdadero en caso de que más tarde veas que puedes descifrar sin ventana emergente)
|
||||
* **`kSecReturnAttributes`**: Obtén metadatos sobre las entradas
|
||||
* **`kSecMatchLimit`**: Cuántos resultados devolver
|
||||
* **`kSecClass`**: Qué tipo de entrada de keychain
|
||||
* **`kSecClass`**: Qué tipo de entrada del keychain
|
||||
|
||||
Obtén **ACLs** de cada entrada:
|
||||
|
||||
* Con la API **`SecAccessCopyACLList`** puedes obtener el **ACL para el elemento de keychain**, y devolverá una lista de ACLs (como `ACLAuhtorizationExportClear` y los otros mencionados anteriormente) donde cada lista tiene:
|
||||
* Con la API **`SecAccessCopyACLList`** puedes obtener el **ACL para el elemento del keychain**, y devolverá una lista de ACLs (como `ACLAuhtorizationExportClear` y los otros mencionados anteriormente) donde cada lista tiene:
|
||||
* Descripción
|
||||
* **Lista de Aplicaciones de Confianza**. Esto podría ser:
|
||||
* Una app: /Applications/Slack.app
|
||||
|
@ -118,7 +122,7 @@ Y estos son los **requisitos** para poder **exportar un secreto sin un aviso**:
|
|||
* Si hay **1+ aplicaciones de confianza** listadas:
|
||||
* Necesitas las **autorizaciones** apropiadas (**`Nil`**, o ser **parte** de la lista permitida de aplicaciones en la autorización para acceder a la información secreta)
|
||||
* Necesitas que la firma de código coincida con **PartitionID**
|
||||
* Necesitas que la firma de código coincida con la de una **aplicación de confianza** (o ser miembro del grupo de acceso a keychain correcto)
|
||||
* Necesitas que la firma de código coincida con la de una **aplicación de confianza** (o ser miembro del grupo de acceso al keychain correcto)
|
||||
* Si **todas las aplicaciones son de confianza**:
|
||||
* Necesitas las **autorizaciones** apropiadas
|
||||
* Necesitas que la firma de código coincida con **PartitionID**
|
||||
|
@ -127,20 +131,19 @@ Y estos son los **requisitos** para poder **exportar un secreto sin un aviso**:
|
|||
{% hint style="danger" %}
|
||||
Por lo tanto, si hay **1 aplicación listada**, necesitas **inyectar código en esa aplicación**.
|
||||
|
||||
Si **apple** está indicado en el **partitionID**, podrías acceder a él con **`osascript`** así que cualquier cosa que esté confiando en todas las aplicaciones con apple en el partitionID. **`Python`** también podría ser utilizado para esto.
|
||||
Si **apple** está indicado en el **partitionID**, podrías acceder a él con **`osascript`** así que cualquier cosa que confíe en todas las aplicaciones con apple en el partitionID. **`Python`** también podría usarse para esto.
|
||||
{% endhint %}
|
||||
|
||||
### Dos atributos adicionales
|
||||
|
||||
* **Invisible**: Es una bandera boolean para **ocultar** la entrada de la aplicación **UI** de Keychain
|
||||
* **General**: Es para almacenar **metadatos** (así que NO está CIFRADO)
|
||||
* **Invisible**: Es una bandera booleana para **ocultar** la entrada de la aplicación **UI** del Keychain
|
||||
* **General**: Es para almacenar **metadatos** (por lo que NO ESTÁ CIFRADO)
|
||||
* Microsoft estaba almacenando en texto plano todos los tokens de actualización para acceder a puntos finales sensibles.
|
||||
|
||||
## Referencias
|
||||
|
||||
* [**#OBTS v5.0: "Lock Picking the macOS Keychain" - Cody Thomas**](https://www.youtube.com/watch?v=jKE1ZW33JpY)
|
||||
|
||||
|
||||
{% hint style="success" %}
|
||||
Aprende y practica Hacking en AWS:<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">\
|
||||
Aprende y practica Hacking en GCP: <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…
Add table
Reference in a new issue