Translated ['macos-hardening/macos-security-and-privilege-escalation/mac

This commit is contained in:
Translator 2023-11-01 18:41:14 +00:00
parent 1f6cc45e96
commit c17a7b86dc
2 changed files with 29 additions and 14 deletions

View file

@ -26,7 +26,7 @@ Permisos en un **directorio**:
* Uno de los **directorio padre propietario** en la ruta es el usuario
* Uno de los **directorio padre propietario** en la ruta es un **grupo de usuarios** con **acceso de escritura**
* Un **grupo de usuarios** tiene acceso de **escritura** al **archivo**
* Un **grupo de usuarios** tiene **acceso de escritura** al **archivo**
Con cualquiera de las combinaciones anteriores, un atacante podría **inyectar** un **enlace simbólico/duro** en la ruta esperada para obtener una escritura arbitraria privilegiada.
@ -48,8 +48,12 @@ Si puedes hacer que un **proceso abra un archivo o una carpeta con altos privile
Por ejemplo: [https://youtu.be/f1HA5QhLQ7Y?t=21098](https://youtu.be/f1HA5QhLQ7Y?t=21098)
## Trucos para evitar atributos de cuarentena xattrs
## Trucos para evitar atributos extendidos de cuarentena
### Eliminarlo
```bash
xattr -d com.apple.quarantine /path/to/file_or_app
```
### Bandera uchg / uchange / uimmutable
Si un archivo/carpeta tiene este atributo inmutable, no será posible poner un xattr en él.
@ -122,7 +126,7 @@ ditto -c -k del test.zip
ditto -x -k --rsrc test.zip .
ls -le test
```
(Tenga en cuenta que incluso si esto funciona, la sandbox escribirá el atributo de cuarentena antes)
(Nota que incluso si esto funciona, la sandbox escribe el atributo de cuarentena antes)
No es realmente necesario, pero lo dejo aquí por si acaso:
@ -132,7 +136,7 @@ No es realmente necesario, pero lo dejo aquí por si acaso:
## Bypass de Firmas de Código
Los paquetes contienen el archivo **`_CodeSignature/CodeResources`** que contiene el **hash** de cada **archivo** en el **paquete**. Tenga en cuenta que el hash de CodeResources también está **incrustado en el ejecutable**, por lo que no podemos modificarlo.
Los paquetes contienen el archivo **`_CodeSignature/CodeResources`** que contiene el **hash** de cada **archivo** en el **paquete**. Ten en cuenta que el hash de CodeResources también está **incrustado en el ejecutable**, por lo que no podemos modificarlo.
Sin embargo, hay algunos archivos cuya firma no se verificará, estos tienen la clave omit en el plist, como:
```xml

View file

@ -72,17 +72,10 @@ cat << EOF > SandboxedShellApp.app/Contents/Info.plist
</plist>
EOF
```
3. Definir los permisos
3. Definir los privilegios
Los permisos son declaraciones en el archivo de configuración de la sandbox que especifican qué acciones puede realizar una aplicación dentro del entorno restringido. Estos permisos se conocen como "entitlements" en macOS.
Los entitlements definen las capacidades y restricciones de una aplicación en la sandbox. Pueden permitir o denegar el acceso a recursos del sistema, como archivos, directorios, servicios de red y más. Al definir los entitlements, se establece el nivel de acceso que una aplicación tiene dentro de la sandbox.
Es importante tener en cuenta que los entitlements deben ser cuidadosamente configurados para evitar posibles vulnerabilidades o abusos. Una configuración incorrecta de los entitlements puede permitir a una aplicación realizar acciones no deseadas o acceder a información confidencial.
Los entitlements se definen en el archivo de configuración de la sandbox utilizando una sintaxis específica. Cada permiso tiene un nombre y un valor asociado que determina si está permitido o denegado. Algunos ejemplos de entitlements comunes incluyen el acceso a la cámara, el micrófono, la ubicación del usuario y la comunicación con otros procesos.
Es fundamental comprender y definir correctamente los entitlements para garantizar la seguridad y privacidad de las aplicaciones en la sandbox de macOS.
{% tabs %}
{% tab title="sandbox" %}
```bash
cat << EOF > entitlements.plist
<?xml version="1.0" encoding="UTF-8"?>
@ -95,6 +88,24 @@ cat << EOF > entitlements.plist
</plist>
EOF
```
{% tab title="sandbox + descargas" %}
```bash
cat << EOF > entitlements.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.files.downloads.read-write</key>
<true/>
</dict>
</plist>
EOF
```
{% endtab %}
{% endtabs %}
4. Firma la aplicación (necesitas crear un certificado en el llavero)
```bash
codesign --entitlements entitlements.plist -s "YourIdentity" SandboxedShellApp.app