Translated ['macos-hardening/macos-red-teaming/macos-keychain.md'] to es

This commit is contained in:
Translator 2024-09-24 18:23:23 +00:00
parent 5a70640117
commit 7231488176

View file

@ -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)