hacktricks/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse
2024-04-15 03:55:15 +00:00
..
macos-ipc-inter-process-communication Translated ['README.md', 'binary-exploitation/format-strings/README.md', 2024-04-15 03:55:15 +00:00
macos-library-injection GitBook: No commit message 2024-04-06 18:13:31 +00:00
macos-.net-applications-injection.md Translated ['a.i.-exploiting/bra.i.nsmasher-presentation/BIM_Bruteforcer 2024-02-08 22:25:00 +00:00
macos-chromium-injection.md Translated ['generic-methodologies-and-resources/external-recon-methodol 2024-02-23 16:28:45 +00:00
macos-dirty-nib.md Translated ['a.i.-exploiting/bra.i.nsmasher-presentation/BIM_Bruteforcer 2024-02-08 22:25:00 +00:00
macos-electron-applications-injection.md Translated ['README.md', 'backdoors/salseo.md', 'cryptography/certificat 2024-03-29 20:55:41 +00:00
macos-function-hooking.md GitBook: No commit message 2024-04-06 18:13:31 +00:00
macos-java-apps-injection.md Translated ['a.i.-exploiting/bra.i.nsmasher-presentation/BIM_Bruteforcer 2024-02-08 22:25:00 +00:00
macos-perl-applications-injection.md Translated ['README.md', 'backdoors/salseo.md', 'cryptography/certificat 2024-03-29 20:55:41 +00:00
macos-python-applications-injection.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-02-24 14:33:08 +00:00
macos-ruby-applications-injection.md Translated ['generic-methodologies-and-resources/pentesting-wifi/README. 2024-02-02 13:02:46 +00:00
README.md GitBook: No commit message 2024-04-06 18:13:31 +00:00

macOS Proces Abuse

Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Abuso de Procesos en macOS

macOS, al igual que cualquier otro sistema operativo, proporciona una variedad de métodos y mecanismos para que los procesos interactúen, se comuniquen y compartan datos. Si bien estas técnicas son esenciales para el funcionamiento eficiente del sistema, también pueden ser abusadas por actores malintencionados para realizar actividades maliciosas.

Inyección de Bibliotecas

La Inyección de Bibliotecas es una técnica en la que un atacante obliga a un proceso a cargar una biblioteca maliciosa. Una vez inyectada, la biblioteca se ejecuta en el contexto del proceso objetivo, proporcionando al atacante los mismos permisos y acceso que el proceso.

{% content-ref url="macos-library-injection/" %} macos-library-injection {% endcontent-ref %}

Enganche de Funciones

El Enganche de Funciones implica interceptar llamadas de funciones o mensajes dentro de un código de software. Al enganchar funciones, un atacante puede modificar el comportamiento de un proceso, observar datos sensibles o incluso obtener control sobre el flujo de ejecución.

{% content-ref url="macos-function-hooking.md" %} macos-function-hooking.md {% endcontent-ref %}

Comunicación entre Procesos

La Comunicación entre Procesos (IPC) se refiere a diferentes métodos mediante los cuales procesos separados comparten e intercambian datos. Si bien el IPC es fundamental para muchas aplicaciones legítimas, también puede ser mal utilizado para subvertir el aislamiento de procesos, filtrar información sensible o realizar acciones no autorizadas.

{% content-ref url="macos-ipc-inter-process-communication/" %} macos-ipc-inter-process-communication {% endcontent-ref %}

Inyección de Aplicaciones Electron

Las aplicaciones Electron ejecutadas con variables de entorno específicas podrían ser vulnerables a la inyección de procesos:

{% content-ref url="macos-electron-applications-injection.md" %} macos-electron-applications-injection.md {% endcontent-ref %}

Inyección en Chromium

Es posible utilizar las banderas --load-extension y --use-fake-ui-for-media-stream para realizar un ataque de hombre en el navegador que permita robar pulsaciones de teclas, tráfico, cookies, inyectar scripts en páginas, entre otros:

{% content-ref url="macos-chromium-injection.md" %} macos-chromium-injection.md {% endcontent-ref %}

NIB Sucio

Los archivos NIB definen elementos de interfaz de usuario (UI) y sus interacciones dentro de una aplicación. Sin embargo, pueden ejecutar comandos arbitrarios y Gatekeeper no impide que una aplicación ya ejecutada vuelva a ejecutarse si se modifica un archivo NIB. Por lo tanto, podrían usarse para hacer que programas arbitrarios ejecuten comandos arbitrarios:

{% content-ref url="macos-dirty-nib.md" %} macos-dirty-nib.md {% endcontent-ref %}

Inyección en Aplicaciones Java

Es posible abusar de ciertas capacidades de Java (como la variable de entorno _JAVA_OPTS) para hacer que una aplicación Java ejecute código/comandos arbitrarios.

{% content-ref url="macos-java-apps-injection.md" %} macos-java-apps-injection.md {% endcontent-ref %}

Inyección en Aplicaciones .Net

Es posible inyectar código en aplicaciones .Net abusando de la funcionalidad de depuración de .Net (no protegida por las protecciones de macOS como el endurecimiento en tiempo de ejecución).

{% content-ref url="macos-.net-applications-injection.md" %} macos-.net-applications-injection.md {% endcontent-ref %}

Inyección en Perl

Consulta diferentes opciones para hacer que un script de Perl ejecute código arbitrario en:

{% content-ref url="macos-perl-applications-injection.md" %} macos-perl-applications-injection.md {% endcontent-ref %}

Inyección en Ruby

También es posible abusar de las variables de entorno de Ruby para hacer que scripts arbitrarios ejecuten código arbitrario:

{% content-ref url="macos-ruby-applications-injection.md" %} macos-ruby-applications-injection.md {% endcontent-ref %}

Inyección en Python

Si se establece la variable de entorno PYTHONINSPECT, el proceso de Python ingresará a una interfaz de línea de comandos de Python una vez que haya terminado. También es posible usar PYTHONSTARTUP para indicar un script de Python que se ejecute al inicio de una sesión interactiva.
Sin embargo, ten en cuenta que el script de PYTHONSTARTUP no se ejecutará cuando PYTHONINSPECT cree la sesión interactiva.

Otras variables de entorno como PYTHONPATH y PYTHONHOME también podrían ser útiles para hacer que un comando de Python ejecute código arbitrario.

Ten en cuenta que los ejecutables compilados con pyinstaller no utilizarán estas variables de entorno incluso si se ejecutan utilizando un Python integrado.

En general, no pude encontrar una forma de hacer que Python ejecute código arbitrario abusando de las variables de entorno.\ Sin embargo, la mayoría de las personas instalan Python usando **Hombrew**, que instalará Python en una **ubicación escribible** para el usuario administrador predeterminado. Puedes secuestrarlo con algo como: ```bash mv /opt/homebrew/bin/python3 /opt/homebrew/bin/python3.old cat > /opt/homebrew/bin/python3 <

Detección

Shield

Shield (Github) es una aplicación de código abierto que puede detectar y bloquear acciones de inyección de procesos:

  • Usando Variables de Entorno: Monitorizará la presencia de cualquiera de las siguientes variables de entorno: DYLD_INSERT_LIBRARIES, CFNETWORK_LIBRARY_PATH, RAWCAMERA_BUNDLE_PATH y ELECTRON_RUN_AS_NODE
  • Usando llamadas a task_for_pid: Para encontrar cuando un proceso quiere obtener el puerto de tarea de otro lo que permite inyectar código en el proceso.
  • Parámetros de aplicaciones Electron: Alguien puede usar los argumentos de línea de comandos --inspect, --inspect-brk y --remote-debugging-port para iniciar una aplicación Electron en modo de depuración, y así inyectar código en ella.
  • Usando enlaces simbólicos o enlaces duros: Típicamente el abuso más común es colocar un enlace con nuestros privilegios de usuario, y apuntarlo a una ubicación de mayor privilegio. La detección es muy simple tanto para enlaces duros como para enlaces simbólicos. Si el proceso que crea el enlace tiene un nivel de privilegio diferente al archivo de destino, creamos una alerta. Desafortunadamente, en el caso de los enlaces simbólicos, no es posible bloquear, ya que no tenemos información sobre el destino del enlace antes de la creación. Esta es una limitación del framework de EndpointSecuriy de Apple.

Llamadas realizadas por otros procesos

En esta publicación de blog puedes encontrar cómo es posible utilizar la función task_name_for_pid para obtener información sobre otros procesos que inyectan código en un proceso y luego obtener información sobre ese otro proceso.

Ten en cuenta que para llamar a esa función necesitas tener el mismo uid que el que ejecuta el proceso o ser root (y devuelve información sobre el proceso, no una forma de inyectar código).

Referencias

Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks: