Translated ['macos-hardening/macos-auto-start-locations.md', 'macos-hard

This commit is contained in:
Translator 2023-09-26 23:44:22 +00:00
parent 6134546f8c
commit 89e9fdda49
4 changed files with 177 additions and 165 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

View File

@ -1,4 +1,4 @@
# Ubicaciones de inicio automático de macOS
# Ubicaciones de inicio automático en macOS
<details>
@ -7,55 +7,55 @@
* ¿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).
* **Ú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).
</details>
Aquí se encuentran las ubicaciones en el sistema que podrían llevar a la **ejecución** de un binario **sin** **interacción** **del usuario**.
Aquí se encuentran las ubicaciones en el sistema que podrían llevar a la **ejecución** de un binario **sin** **interacción** del **usuario**.
### Launchd
**`launchd`** es el **primer** **proceso** ejecutado por el kernel de OX S al inicio y el último en finalizar al apagar. Siempre debe tener el **PID 1**. Este proceso **lee y ejecuta** las configuraciones indicadas en los **plists ASEP** en:
**`launchd`** es el **primer** **proceso** ejecutado por el kernel de macOS al iniciar y el último en finalizar al apagar. Siempre debe tener el **PID 1**. Este proceso **lee y ejecuta** las configuraciones indicadas en los **plists** de **ASEP** en:
* `/Library/LaunchAgents`: agentes por usuario instalados por el administrador
* `/Library/LaunchDaemons`: demonios de todo el sistema instalados por el administrador
* `/System/Library/LaunchAgents`: agentes por usuario proporcionados por Apple.
* `/System/Library/LaunchDaemons`: demonios de todo el sistema proporcionados por Apple.
* `/Library/LaunchAgents`: Agentes por usuario instalados por el administrador
* `/Library/LaunchDaemons`: Demonios a nivel de sistema instalados por el administrador
* `/System/Library/LaunchAgents`: Agentes por usuario proporcionados por Apple.
* `/System/Library/LaunchDaemons`: Demonios a nivel 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 de los usuarios registrados**.
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** que ha iniciado sesión.
La **principal diferencia entre agentes y demonios es que los agentes se cargan cuando el usuario inicia sesión y los demonios se cargan al inicio del sistema** (ya que hay servicios como ssh que deben ejecutarse antes de que cualquier usuario acceda al sistema). Además, los agentes pueden usar la GUI mientras que los demonios deben ejecutarse en segundo plano.
La **principal diferencia entre agentes y demonios es que los agentes se cargan cuando el usuario inicia sesión y los demonios se cargan al iniciar el sistema** (ya que hay servicios como ssh que deben ejecutarse antes de que cualquier usuario acceda al sistema). Además, los agentes pueden utilizar la interfaz gráfica mientras que los demonios deben ejecutarse en segundo plano.
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.apple.someidentifier</string>
<key>ProgramArguments</key>
<array>
<string>/Users/username/malware</string>
</array>
<key>RunAtLoad</key><true/> <!--Execute at system startup-->
<key>StartInterval</key>
<integer>800</integer> <!--Execute each 800s-->
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key></false> <!--Re-execute if exit unsuccessful-->
<!--If previous is true, then re-execute in successful exit-->
</dict>
<key>Label</key>
<string>com.apple.someidentifier</string>
<key>ProgramArguments</key>
<array>
<string>/Users/username/malware</string>
</array>
<key>RunAtLoad</key><true/> <!--Execute at system startup-->
<key>StartInterval</key>
<integer>800</integer> <!--Execute each 800s-->
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key></false> <!--Re-execute if exit unsuccessful-->
<!--If previous is true, then re-execute in successful exit-->
</dict>
</dict>
</plist>
```
Hay casos en los que un **agente debe ser ejecutado antes de que el usuario inicie sesión**, estos se llaman **PreLoginAgents**. Por ejemplo, esto es útil para proporcionar tecnología de asistencia en el inicio de sesión. También se pueden encontrar en `/Library/LaunchAgents` (ver [**aquí**](https://github.com/HelmutJ/CocoaSampleCode/tree/master/PreLoginAgents) un ejemplo).
Hay casos en los que es necesario ejecutar un **agente antes de que el usuario inicie sesión**, estos se llaman **PreLoginAgents**. Por ejemplo, esto es útil para proporcionar tecnología de asistencia al iniciar sesión. También se pueden encontrar en `/Library/LaunchAgents` (ver [**aquí**](https://github.com/HelmutJ/CocoaSampleCode/tree/master/PreLoginAgents) un ejemplo).
\{% hint style="info" %\} Los nuevos archivos de configuración de Daemons o Agents se cargarán después del próximo reinicio o usando `launchctl load <target.plist>`. También es 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).\
\{% hint style="info" %\} Los nuevos archivos de configuración de Daemons o Agents se cargarán después del próximo reinicio o utilizando `launchctl load <target.plist>`. También es 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).\
También es posible **descargar** con `launchctl unload <target.plist>` (el proceso al que apunta se terminará).
Para **asegurarse** de que no hay **nada** (como una anulación) **impidiendo** que un **Agente** o **Daemon** **se ejecute**, ejecute: `sudo launchctl load -w /System/Library/LaunchDaemos/com.apple.smdb.plist` \{% endhint %\}
Para **asegurarse** de que no haya **nada** (como una anulación) **impidiendo** que un **Agente** o **Daemon** se **ejecute**, ejecute: `sudo launchctl load -w /System/Library/LaunchDaemos/com.apple.smdb.plist` \{% endhint %\}
Liste todos los agentes y demonios cargados por el usuario actual:
Enumere todos los agentes y demonios cargados por el usuario actual:
```bash
launchctl list
```
@ -65,15 +65,15 @@ Lista los trabajos cron del **usuario actual** con:
```bash
crontab -l
```
También se pueden ver todos los trabajos programados de los usuarios en **`/usr/lib/cron/tabs/`** y **`/var/at/tabs/`** (se necesita ser root).
También puedes ver todos los trabajos cron de los usuarios en **`/usr/lib/cron/tabs/`** y **`/var/at/tabs/`** (necesita privilegios de root).
En MacOS se pueden encontrar varias carpetas que ejecutan scripts con **cierta frecuencia** en:
```bash
ls -lR /usr/lib/cron/tabs/ /private/var/at/jobs /etc/periodic/
```
Aquí puedes encontrar los trabajos regulares de **cron**, los trabajos de **at** (poco utilizados) y los trabajos **periódicos** (principalmente utilizados para limpiar archivos temporales). Los trabajos periódicos diarios se pueden ejecutar, por ejemplo, con: `periodic daily`.
Aquí puedes encontrar los trabajos regulares de **cron**, los trabajos de **at** (poco utilizados) y los trabajos periódicos (principalmente utilizados para limpiar archivos temporales). Los trabajos periódicos diarios se pueden ejecutar, por ejemplo, con: `periodic daily`.
Los scripts periódicos (**`/etc/periodic`**) se ejecutan debido a los **launch daemons** configurados en `/System/Library/LaunchDaemons/com.apple.periodic*`. Ten en cuenta que si un script se almacena en `/etc/periodic/` como una forma de **escalado de privilegios**, se **ejecutará** como el **propietario del archivo**.
Los scripts periódicos (**`/etc/periodic`**) se ejecutan debido a los **launch daemons** configurados en `/System/Library/LaunchDaemons/com.apple.periodic*`. Ten en cuenta que si un script se almacena en `/etc/periodic/` como una forma de **elevar privilegios**, se ejecutará como el **propietario del archivo**.
```bash
ls -l /System/Library/LaunchDaemons/com.apple.periodic*
-rw-r--r-- 1 root wheel 887 May 13 00:29 /System/Library/LaunchDaemons/com.apple.periodic-daily.plist
@ -82,14 +82,14 @@ ls -l /System/Library/LaunchDaemons/com.apple.periodic*
```
### kext
Para instalar un KEXT como elemento de inicio, debe estar **instalado en una de las siguientes ubicaciones**:
Para instalar un KEXT como un elemento de inicio, debe estar **instalado en una de las siguientes ubicaciones**:
* `/System/Library/Extensions`
* Archivos KEXT integrados en el sistema operativo OS X.
* Archivos KEXT incorporados en el sistema operativo OS X.
* `/Library/Extensions`
* Archivos KEXT instalados por software de terceros.
* Archivos KEXT instalados por software de terceros
Puede listar los archivos kext cargados actualmente con:
Puede listar los archivos kext actualmente cargados con:
```bash
kextstat #List loaded kext
kextload /path/to/kext.kext #Load a new one based on path
@ -97,30 +97,36 @@ kextload -b com.apple.driver.ExampleBundle #Load a new one based on path
kextunload /path/to/kext.kext
kextunload -b com.apple.driver.ExampleBundle
```
Para obtener más información sobre las [**extensiones de kernel, consulte esta sección**](macos-security-and-privilege-escalation/mac-os-architecture#i-o-kit-drivers).
Para obtener más información sobre [**extensiones del kernel, consulta esta sección**](macos-security-and-privilege-escalation/mac-os-architecture#i-o-kit-drivers).
### **Elementos de inicio de sesión**
En Preferencias del Sistema -> Usuarios y grupos -> **Elementos de inicio de sesión** se pueden encontrar **elementos que se ejecutan cuando el usuario inicia sesión**.\
Es posible listarlos, agregarlos y eliminarlos desde la línea de comandos:
En Preferencias del Sistema -> Usuarios y Grupos -> **Elementos de inicio de sesión** puedes encontrar **elementos que se ejecutarán cuando el usuario inicie sesión**.\
Es posible listarlos, agregar y eliminar desde la línea de comandos:
```bash
#List all items:
osascript -e 'tell application "System Events" to get the name of every login item'
#Add an item:
osascript -e 'tell application "System Events" to make login item at end with properties {path:"/path/to/itemname", hidden:false}'
osascript -e 'tell application "System Events" to make login item at end with properties {path:"/path/to/itemname", hidden:false}'
#Remove an item:
osascript -e 'tell application "System Events" to delete login item "itemname"'
osascript -e 'tell application "System Events" to delete login item "itemname"'
```
Estos elementos se almacenan en el archivo /Users/\<username>/Library/Application Support/com.apple.backgroundtaskmanagementagent
### ZIP como elemento de inicio de sesión
Si almacenas un archivo **ZIP** como un **elemento de inicio de sesión**, el **`Archive Utility`** lo abrirá y si el zip se almacenó, por ejemplo, en **`~/Library`** y contenía la carpeta **`LaunchAgents/file.plist`** con una puerta trasera, esa carpeta se creará (no lo está de forma predeterminada) y se agregará el plist para que la próxima vez que el usuario vuelva a iniciar sesión, se ejecute la **puerta trasera indicada en el plist**.
Otra opción sería crear los archivos **`.bash_profile`** y **`.zshenv`** dentro del directorio HOME del usuario, por lo que si la carpeta LaunchAgents ya existe, esta técnica seguiría funcionando.
### At
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 posible amenaza.
"Las tareas 'at' se utilizan para **programar tareas en momentos específicos**.\
Estas tareas son diferentes de las tareas cron en el sentido de que **son tareas únicas** que se eliminan después de ejecutarse. Sin embargo, **sobreviven a un reinicio del sistema**, por lo que no se pueden descartar como una posible amenaza.
Por **defecto** están **deshabilitadas** pero el usuario **root** puede **habilitarlas** con:
De forma **predeterminada**, están **desactivadas**, pero el usuario **root** puede **activarlas** con:
```bash
sudo launchctl load -F /System/Library/LaunchDaemons/com.apple.atrun.plist
```
@ -128,11 +134,11 @@ Esto creará un archivo a las 13:37:
```bash
echo hello > /tmp/hello | at 1337
```
Si las tareas AT no están habilitadas, las tareas creadas no se ejecutarán.
Si las tareas de AT no están habilitadas, las tareas creadas no se ejecutarán.
### Hooks de inicio/salida de sesión
### Hooks de inicio de sesión/cierre de sesión
Están obsoletos, pero se pueden usar para ejecutar comandos cuando un usuario inicia sesión.
Están obsoletos, pero se pueden utilizar para ejecutar comandos cuando un usuario inicia sesión.
```bash
cat > $HOME/hook.sh << EOF
#!/bin/bash
@ -145,11 +151,11 @@ Esta configuración se almacena en `/Users/$USER/Library/Preferences/com.apple.l
```bash
defaults read /Users/$USER/Library/Preferences/com.apple.loginwindow.plist
{
LoginHook = "/Users/username/hook.sh";
MiniBuddyLaunch = 0;
TALLogoutReason = "Shut Down";
TALLogoutSavesState = 0;
oneTimeSSMigrationComplete = 1;
LoginHook = "/Users/username/hook.sh";
MiniBuddyLaunch = 0;
TALLogoutReason = "Shut Down";
TALLogoutSavesState = 0;
oneTimeSSMigrationComplete = 1;
}
```
Para eliminarlo:
@ -160,11 +166,37 @@ En el ejemplo anterior hemos creado y eliminado un **LoginHook**, también es po
El usuario root se almacena en `/private/var/root/Library/Preferences/com.apple.loginwindow.plist`
### Preferencias de aplicaciones
En **`~/Library/Preferences`** se almacenan las preferencias del usuario en las aplicaciones. Algunas de estas preferencias pueden contener una configuración para **ejecutar otras aplicaciones/scripts**.
Por ejemplo, Terminal puede ejecutar un comando al iniciar:
<figure><img src="../.gitbook/assets/image (676).png" alt="" width="495"><figcaption></figcaption></figure>
Esta configuración se refleja en el archivo **`~/Library/Preferences/com.apple.Terminal.plist`** de la siguiente manera:
```bash
[...]
"Window Settings" => {
"Basic" => {
"CommandString" => "touch /tmp/terminal_pwn"
"Font" => {length = 267, bytes = 0x62706c69 73743030 d4010203 04050607 ... 00000000 000000cf }
"FontAntialias" => 1
"FontWidthSpacing" => 1.004032258064516
"name" => "Basic"
"ProfileCurrentVersion" => 2.07
"RunCommandAsShell" => 0
"type" => "Window Settings"
}
[...]
```
Entonces, si se puede sobrescribir el plist de las preferencias del terminal en el sistema, la funcionalidad **`open`** se puede utilizar para **abrir el terminal y ejecutar ese comando**.
### Emond
Apple introdujo un mecanismo de registro llamado **emond**. Parece que nunca se desarrolló por completo y el desarrollo puede haber sido **abandonado** por Apple en favor de otros mecanismos, pero sigue **disponible**.
Apple introdujo un mecanismo de registro llamado **emond**. Parece que nunca fue completamente desarrollado y es posible que Apple haya **abandonado** su desarrollo en favor de otros mecanismos, pero sigue **disponible**.
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 sería usarlo como un mecanismo de **persistencia que la mayoría de los administradores de macOS probablemente no conocerían**. Detectar el uso malintencionado de emond no debería ser difícil, ya que el System LaunchDaemon del 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 sería utilizarlo como un mecanismo de persistencia que probablemente la mayoría de los administradores de macOS no sabrían buscar. Detectar el uso malicioso de emond no debería ser difícil, ya que el System LaunchDaemon del servicio busca scripts para ejecutar solo en un lugar:
```bash
ls -l /private/var/db/emondClients
```
@ -174,74 +206,47 @@ ls -l /private/var/db/emondClients
### Elementos de inicio
\{% hint style="danger" %\} **Esto está obsoleto, por lo que no se debe encontrar nada en los siguientes directorios.** \{% endhint %\}
{% hint style="danger" %}
**Esto está obsoleto, por lo que no se debe encontrar nada en los siguientes directorios.**
{% endhint %}
Un **StartupItem** es un **directorio** que se **coloca** en una de estas dos carpetas. `/Library/StartupItems/` o `/System/Library/StartupItems/`
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 deben colocar **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**".
{% endtab %}
{% endtabs %}
Después de colocar un nuevo directorio en una de estas dos ubicaciones, se deben colocar **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" %}
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Description</key>
<string>This is a description of this service</string>
<key>OrderPreference</key>
<string>None</string> <!--Other req services to execute before this -->
<key>Provides</key>
<array>
<string>superservicename</string> <!--Name of the services provided by this file -->
</array>
<key>Description</key>
<string>This is a description of this service</string>
<key>OrderPreference</key>
<string>None</string> <!--Other req services to execute before this -->
<key>Provides</key>
<array>
<string>superservicename</string> <!--Name of the services provided by this file -->
</array>
</dict>
</plist>
```
{% endtab %}
{% tab title="superservicename" %}
## Ubicación de inicio automático de macOS
### Introducción
En macOS, hay varias ubicaciones donde se pueden colocar archivos para que se inicien automáticamente al arrancar el sistema. Estos archivos pueden ser scripts, binarios o aplicaciones. En este documento, se describen las ubicaciones comunes donde se pueden encontrar estos archivos.
### Ubicaciones comunes
#### /Library/LaunchAgents
Esta ubicación contiene archivos .plist que se ejecutan en el inicio del usuario actual. Estos archivos se ejecutan con los permisos del usuario actual y no requieren privilegios de administrador para instalarse.
#### /Library/LaunchDaemons
Esta ubicación contiene archivos .plist que se ejecutan en el inicio del sistema. Estos archivos se ejecutan con privilegios de administrador y, por lo tanto, requieren privilegios de administrador para instalarse.
#### /System/Library/LaunchAgents
Esta ubicación contiene archivos .plist que se ejecutan en el inicio del usuario actual. Estos archivos son proporcionados por Apple y se ejecutan con los permisos del usuario actual.
#### /System/Library/LaunchDaemons
Esta ubicación contiene archivos .plist que se ejecutan en el inicio del sistema. Estos archivos son proporcionados por Apple y se ejecutan con privilegios de administrador.
### Conclusión
Es importante conocer las ubicaciones comunes donde se pueden encontrar archivos de inicio automático en macOS. Esto puede ayudar a identificar posibles puntos de entrada para un atacante o para solucionar problemas de inicio automático.
{% tab title="superservicename" %}Nombre del servicio súper
```bash
#!/bin/sh
. /etc/rc.common
StartService(){
touch /tmp/superservicestarted
touch /tmp/superservicestarted
}
StopService(){
rm /tmp/superservicestarted
rm /tmp/superservicestarted
}
RestartService(){
echo "Restarting"
echo "Restarting"
}
RunService "$1"
@ -252,7 +257,7 @@ RunService "$1"
### /etc/rc.common
{% hint style="danger" %}
**Esto no funciona en versiones modernas de MacOS**
**Esto no funciona en las versiones modernas de MacOS**
{% endhint %}
También es posible colocar aquí **comandos que se ejecutarán al inicio.** Ejemplo de un script rc.common regular:
@ -295,16 +300,16 @@ PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/libexec:/System/Library/CoreServices; ex
#
CheckForNetwork()
{
local test
local test
if [ -z "${NETWORKUP:=}" ]; then
test=$(ifconfig -a inet 2>/dev/null | sed -n -e '/127.0.0.1/d' -e '/0.0.0.0/d' -e '/inet/p' | wc -l)
if [ "${test}" -gt 0 ]; then
NETWORKUP="-YES-"
else
NETWORKUP="-NO-"
fi
fi
if [ -z "${NETWORKUP:=}" ]; then
test=$(ifconfig -a inet 2>/dev/null | sed -n -e '/127.0.0.1/d' -e '/0.0.0.0/d' -e '/inet/p' | wc -l)
if [ "${test}" -gt 0 ]; then
NETWORKUP="-YES-"
else
NETWORKUP="-NO-"
fi
fi
}
alias ConsoleMessage=echo
@ -314,25 +319,25 @@ alias ConsoleMessage=echo
#
GetPID ()
{
local program="$1"
local pidfile="${PIDFILE:=/var/run/${program}.pid}"
local pid=""
local program="$1"
local pidfile="${PIDFILE:=/var/run/${program}.pid}"
local pid=""
if [ -f "${pidfile}" ]; then
pid=$(head -1 "${pidfile}")
if ! kill -0 "${pid}" 2> /dev/null; then
echo "Bad pid file $pidfile; deleting."
pid=""
rm -f "${pidfile}"
fi
fi
if [ -f "${pidfile}" ]; then
pid=$(head -1 "${pidfile}")
if ! kill -0 "${pid}" 2> /dev/null; then
echo "Bad pid file $pidfile; deleting."
pid=""
rm -f "${pidfile}"
fi
fi
if [ -n "${pid}" ]; then
echo "${pid}"
return 0
else
return 1
fi
if [ -n "${pid}" ]; then
echo "${pid}"
return 0
else
return 1
fi
}
#
@ -340,17 +345,17 @@ GetPID ()
#
RunService ()
{
case $1 in
start ) StartService ;;
stop ) StopService ;;
restart) RestartService ;;
* ) echo "$0: unknown argument: $1";;
esac
case $1 in
start ) StartService ;;
stop ) StopService ;;
restart) RestartService ;;
* ) echo "$0: unknown argument: $1";;
esac
}
```
### Perfiles
Los perfiles de configuración pueden obligar a un usuario a utilizar ciertas configuraciones de navegador, configuraciones de proxy DNS o configuraciones de VPN. Muchos otros payloads son posibles, lo que los hace propensos a ser abusados.
Los perfiles de configuración pueden obligar a un usuario a utilizar ciertas configuraciones del navegador, configuraciones de proxy DNS o configuraciones de VPN. Existen muchas otras cargas útiles que los hacen propensos a ser abusados.
Puedes enumerarlos ejecutando:
```bash
@ -367,8 +372,8 @@ ls -Rl /Library/Managed\ Preferences/
* ¿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)**.**
* 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).
</details>

View File

@ -1,4 +1,4 @@
# Saltos de la caja de arena de macOS Office
# Bypasses del Sandbox de macOS Office
<details>
@ -7,58 +7,65 @@
* ¿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** 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).
* **Ú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).
</details>
### Saltar la caja de arena de Word a través de Launch Agents
### Bypass del Sandbox de Word a través de Launch Agents
La aplicación utiliza una **caja de arena personalizada** utilizando el permiso **`com.apple.security.temporary-exception.sbpl`** y esta caja de arena personalizada permite escribir archivos en cualquier lugar siempre que el nombre del archivo comience con `~$`: `(require-any (require-all (vnode-type REGULAR-FILE) (regex #"(^|/)~$[^/]+$")))`
La aplicación utiliza un **Sandbox personalizado** utilizando el permiso **`com.apple.security.temporary-exception.sbpl`** y este Sandbox personalizado permite escribir archivos en cualquier lugar siempre que el nombre del archivo comience con `~$`: `(require-any (require-all (vnode-type REGULAR-FILE) (regex #"(^|/)~$[^/]+$")))`
Por lo tanto, escapar fue tan fácil como **escribir un archivo `plist`** LaunchAgent en `~/Library/LaunchAgents/~$escape.plist`.
Por lo tanto, eludirlo fue tan fácil como **escribir un archivo `plist`** LaunchAgent en `~/Library/LaunchAgents/~$escape.plist`.
Consulte el [**informe original aquí**](https://www.mdsec.co.uk/2018/08/escaping-the-sandbox-microsoft-office-on-macos/).
Consulta el [**informe original aquí**](https://www.mdsec.co.uk/2018/08/escaping-the-sandbox-microsoft-office-on-macos/).
### Saltar la caja de arena de Word a través de elementos de inicio de sesión y zip
### Bypass del Sandbox de Word a través de Login Items y zip
(Recuerde que desde el primer escape, Word puede escribir archivos arbitrarios cuyo nombre comienza con `~$`).
(Recuerda que a partir de la primera escapada, Word puede escribir archivos arbitrarios cuyo nombre comienza con `~$`, aunque después del parche de la vulnerabilidad anterior no era posible escribir en `/Library/Application Scripts` o en `/Library/LaunchAgents`).
Se descubrió que desde dentro de la caja de arena es posible crear un **elemento de inicio de sesión** (aplicaciones que se ejecutarán cuando el usuario inicie sesión). Sin embargo, estas aplicaciones **no se ejecutarán a menos que** estén **notarizadas** y no es posible agregar argumentos (por lo que no se puede ejecutar una shell inversa usando **`bash`**).
Se descubrió que desde dentro del sandbox es posible crear un **Login Item** (aplicaciones que se ejecutarán cuando el usuario inicie sesión). Sin embargo, estas aplicaciones **no se ejecutarán a menos que** estén **notarizadas** y no es posible agregar argumentos (por lo que no se puede ejecutar un shell inverso usando **`bash`**).
Desde el escape anterior de la caja de arena, Microsoft deshabilitó la opción de escribir archivos en `~/Library/LaunchAgents`. Sin embargo, se descubrió que si se coloca un **archivo zip como elemento de inicio de sesión**, el `Archive Utility` simplemente lo **descomprimirá** en su ubicación actual. Entonces, como por defecto la carpeta `LaunchAgents` de `~/Library` no se crea, fue posible **comprimir un archivo plist en `LaunchAgents/~$escape.plist`** y **colocar** el archivo zip en **`~/Library`** para que cuando se descomprima llegue al destino de persistencia.
A partir del bypass anterior del Sandbox, Microsoft deshabilitó la opción de escribir archivos en `~/Library/LaunchAgents`. Sin embargo, se descubrió que si se coloca un **archivo zip como un Login Item**, el `Archive Utility` simplemente lo **descomprimirá** en su ubicación actual. Entonces, debido a que por defecto la carpeta `LaunchAgents` de `~/Library` no se crea, fue posible **comprimir un plist en `LaunchAgents/~$escape.plist`** y **colocar** el archivo zip en **`~/Library`** para que cuando se descomprima llegue al destino de persistencia.
Consulte el [**informe original aquí**](https://objective-see.org/blog/blog\_0x4B.html).
Consulta el [**informe original aquí**](https://objective-see.org/blog/blog\_0x4B.html).
### Saltar la caja de arena de Word a través de elementos de inicio de sesión y .zshenv
### Bypass del Sandbox de Word a través de Login Items y .zshenv
(Recuerde que desde el primer escape, Word puede escribir archivos arbitrarios cuyo nombre comienza con `~$`).
(Recuerda que a partir de la primera escapada, Word puede escribir archivos arbitrarios cuyo nombre comienza con `~$`).
Sin embargo, la técnica anterior tenía una limitación, si la carpeta **`~/Library/LaunchAgents`** existe porque otro software la creó, fallaría. Entonces se descubrió una cadena de elementos de inicio de sesión diferente para esto.
Sin embargo, la técnica anterior tenía una limitación, si la carpeta **`~/Library/LaunchAgents`** existe porque otro software la creó, fallaría. Por lo tanto, se descubrió una cadena de Login Items diferente para esto.
Un atacante podría crear los archivos **`.bash_profile`** y **`.zshenv`** con la carga útil para ejecutar y luego comprimirlos y **escribir el archivo zip en la carpeta** del usuario víctima: \~/\~$escape.zip.
Un atacante podría crear los archivos **`.bash_profile`** y **`.zshenv`** con la carga útil para ejecutar y luego comprimirlos y **escribir el zip en la carpeta del usuario** de la víctima: **`~/~$escape.zip`**.
Luego, agregue el archivo zip a los **elementos de inicio de sesión** y luego la aplicación **`Terminal`**. Cuando el usuario vuelva a iniciar sesión, el archivo zip se descomprimirá en los archivos del usuario, sobrescribiendo **`.bash_profile`** y **`.zshenv`** y, por lo tanto, la terminal ejecutará uno de estos archivos (dependiendo de si se usa bash o zsh).
Luego, agregar el archivo zip a los **Login Items** y luego a la aplicación **`Terminal`**. Cuando el usuario vuelva a iniciar sesión, el archivo zip se descomprimirá en los archivos del usuario, sobrescribiendo **`.bash_profile`** y **`.zshenv** y, por lo tanto, la terminal ejecutará uno de estos archivos (dependiendo de si se usa bash o zsh).
Consulte el [**informe original aquí**](https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c).
Consulta el [**informe original aquí**](https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c).
### Saltar la caja de arena de Word con Open y variables de entorno
### Bypass del Sandbox de Word con Open y variables de entorno
Desde procesos en la caja de arena, todavía es posible invocar otros procesos utilizando la utilidad **`open`**. Además, estos procesos se ejecutarán **dentro de su propia caja de arena**.
Desde procesos en sandbox, todavía es posible invocar otros procesos utilizando la utilidad **`open`**. Además, estos procesos se ejecutarán **dentro de su propio sandbox**.
Se descubrió que la utilidad open tiene la opción **`--env`** para ejecutar una aplicación con **variables de entorno específicas**. Por lo tanto, fue posible crear el archivo **`.zshenv`** dentro de una carpeta **dentro** de la **caja de arena** y usar `open` con `--env` estableciendo la variable **`HOME`** en esa carpeta abriendo esa aplicación `Terminal`, que ejecutará el archivo `.zshenv` (por alguna razón también fue necesario establecer la variable `__OSINSTALL_ENVIROMENT`).
Se descubrió que la utilidad open tiene la opción **`--env`** para ejecutar una aplicación con **variables de entorno específicas**. Por lo tanto, fue posible crear el archivo **`.zshenv`** dentro de una carpeta **dentro del sandbox** y usar `open` con `--env` estableciendo la variable **`HOME`** en esa carpeta abriendo la aplicación `Terminal`, que ejecutará el archivo `.zshenv` (por alguna razón también fue necesario establecer la variable `__OSINSTALL_ENVIROMENT`).
Consulte el [**informe original aquí**](https://perception-point.io/blog/technical-analysis-of-cve-2021-30864/).
Consulta el [**informe original aquí**](https://perception-point.io/blog/technical-analysis-of-cve-2021-30864/).
### Saltar la caja de arena de Word con Open y stdin
### Bypass del Sandbox de Word con Open y stdin
La utilidad **`open`** también admitía el parámetro **`--stdin`** (y después del escape anterior ya no era posible usar `--env`).
La utilidad **`open`** también admitía el parámetro **`--stdin`** (y después del bypass anterior ya no era posible usar `--env`).
La cosa es que incluso si **`python`** estaba firmado por Apple, **no ejecutará** un script con el atributo **`quarantine`**. Sin embargo, fue posible pasarle un script desde stdin para que no verifique si estaba en cuarentena o no:&#x20;
La cuestión es que incluso si **`python`** estaba firmado por Apple, **no ejecutará** un script con el atributo **`quarantine`**. Sin embargo, era posible pasarle un script desde stdin para que no verifique si estaba en cuarentena o no:&#x20;
1. Deje caer un archivo **`~$exploit.py`** con comandos Python arbitrarios.
2. Ejecute _open_ **`stdin='~$exploit.py' -a Python`**, que ejecuta la aplicación Python con nuestro archivo eliminado como su entrada estándar. Python ejecuta felizmente nuestro código y, como es un proceso secundario de _launchd_, no está sujeto a las reglas de la caja de arena de Word.
1. Coloca un archivo **`~$exploit.py`** con comandos arbitrarios de Python.
2. Ejecuta _open_ **`stdin='~$exploit.py' -a Python`**, que ejecuta la aplicación Python con nuestro archivo agregado como su entrada estándar. Python ejecuta nuestro código sin problemas y, como es un proceso secundario de _launchd_, no está sujeto a las reglas de sandbox de Word.
<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
<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>
* ¿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).
</details>