Jose M Mejia - Usando computación paralela GPU en malware y herramientas de hacking [rootedvlc2]

24
Rooted Satellite Valencia Usando computación paralela con GPGPU en malware y herramientas de hacking José M Mejía Satellite Edition

Transcript of Jose M Mejia - Usando computación paralela GPU en malware y herramientas de hacking [rootedvlc2]

Page 1: Jose M Mejia - Usando computación paralela GPU en malware y herramientas de hacking [rootedvlc2]

Rooted Satellite Valencia

Usando computación paralela con GPGPU en malware y herramientas de hacking

José M Mejía

Satellite Edition

Page 2: Jose M Mejia - Usando computación paralela GPU en malware y herramientas de hacking [rootedvlc2]

Rooted Satellite Valencia

Presentación:

l José M Mejía AKA MegadetHl l Ing. de Sistemasl SysAdmin de profesión.l En el mundo de la seguridad desde 1994 aprox.

l No tengo nada que ver con Nvidia ni con el malware analizado l l [email protected] / @The_Great_Megal

Page 3: Jose M Mejia - Usando computación paralela GPU en malware y herramientas de hacking [rootedvlc2]

Rooted Satellite Valencia

Introducción GPGPU:

l Las GPUs de hoy en día han evolucionado en arquitecturas “manycore” con capacidades paralelas muy potentes y un gran ancho de banda de memoria

l La GPU es especialmente adecuada para abordar problemas que pueden ser expresado como cálculos de datos en paralelo, muchas aplicaciones que procesan gran cantidad de datos pueden usar un modelo paralelo para ganar Speedup

l Siguen el modelo SIMT (Single Instruction Multiple Thread) multiples e independientes threads corren concurrentemente usando una misma instrucción.

l Plataformas programación general : CUDA, Stream, OpenCL

l

Page 4: Jose M Mejia - Usando computación paralela GPU en malware y herramientas de hacking [rootedvlc2]

Rooted Satellite Valencia

Introducción GPGPU:

l l

Page 5: Jose M Mejia - Usando computación paralela GPU en malware y herramientas de hacking [rootedvlc2]

Rooted Satellite Valencia

Introducción GPGPU, la base: el SM:

l l

Page 6: Jose M Mejia - Usando computación paralela GPU en malware y herramientas de hacking [rootedvlc2]

Rooted Satellite Valencia

Introducción GPGPU, la memoria:

l l

Page 7: Jose M Mejia - Usando computación paralela GPU en malware y herramientas de hacking [rootedvlc2]

Rooted Satellite Valencia

Introducción Compute Unified Device Architecture (Arquitectura Unificada de Dispositivos de Cómputo):

l En noviembre de 2006 NVidia introduce CUDA, una plataforma y un modelo de programación paralela de propósito general que usa las GPUs de NVIDIA (no funciona en ninguna otra) para resolver problemas computacionales complejos de manera más eficiente que las CPUs tradicionales.

l CUDA no es abierto (al contrario que OpenCL), pero es más maduro, y al estar destinado solamente para GPUs (Nvidia), es más sencillo que OpenCL, que puede correr en diferentes dispositivos, el modelo es SPMD.

l Empezó como una pequeña extensión de C, pero ya es soportada por C++, Fortran...también hay wrappers para python y java p.e.

Page 8: Jose M Mejia - Usando computación paralela GPU en malware y herramientas de hacking [rootedvlc2]

Rooted Satellite Valencia

Introducción CUDA:

Àmbito CUDA (similar en OpenCL):Device = GPUHost = CPUKernel = Función llamada desde el Host que se ejecuta en el deviceUn Kernel se ejecuta mediante Grids de bloques de Threads (CTA), cada bloque se asigna a un SMxUna vez asignados, los threads se agrupan en grupos de 32 (warps) y se ejecutan en los SPs.Todos los Threads ejecutan el mismo código (SIMT)Cada Thread tiene un ID que se usa para direccionar la memoria y tomar las decisiones de control.A partir de Kepler pueden ejecutarse simultáneamente hasta 32 kernels.l l

Page 9: Jose M Mejia - Usando computación paralela GPU en malware y herramientas de hacking [rootedvlc2]

Rooted Satellite Valencia

Introducción CUDA:

l El modelo de programación CUDA asume que el host (CPU) ejecuta el programa principal, y los hilos se ejecutan en un dispositivo físicamente separado (GPU) que opera como un coprocesador (como los boosters, aunque partir de Kepler la GPU es un poco más autónoma)

l El host y el dispositivo (Device) mantienen sus propios espacios de memoria por separado en DRAM. Por lo tanto, un programa gestiona todos los espacios de memoria de la GPU (global, local, shared,textura..)(UVA y Unified memory a partir de CUDA 6)

l Cuda proporciona instrucciones para reservar, liberar, copiar memoria en la memoria del device, así como transferir datos entre el host y el device

Page 10: Jose M Mejia - Usando computación paralela GPU en malware y herramientas de hacking [rootedvlc2]

Rooted Satellite Valencia

Introducción CUDA:

Page 11: Jose M Mejia - Usando computación paralela GPU en malware y herramientas de hacking [rootedvlc2]

Rooted Satellite Valencia

Malware ventajas:

Las mayoria de herramientas de escaneo de virus /malware actuales no pueden detectar códigos maliciosos almacenados en la memoria de un dispositivo separado y ejecutado en un procesador distinto de la CPU principalUn malware puede aprovechar la potencia de cálculo de los procesadores gráficos modernos para tareas que se adecuen al modelo p.e. empaquetar el malware con esquemas de cifrado complejos o usar run-time polymorphism.La ejecución de código en la GPU, y las transferencias de datos entre el host y el device no requieren privilegios

Page 12: Jose M Mejia - Usando computación paralela GPU en malware y herramientas de hacking [rootedvlc2]

Rooted Satellite Valencia

Malware ventajas:

Existen pocas herramientas para analizar o hacer reversing del código de la GPU, a excepción de cuda-gdb (extensión para el GDB) y cuda-memcheck (relativamente nuevas), cuobjdump y nvdisasm (todas de Nvidia).La arquitectura no es tan conocida como las de las CPUs.El código del device se compila a un lenguaje ensamblador intermedio PTX, y finalmente se genera el cubin (cuda binary) que se embebe en el ejecutable final.Ahora mismo más del 80% del parque informático tiene esas capacidades en sus GPUs, incluyendo algunas tables y smartphones. l

Page 13: Jose M Mejia - Usando computación paralela GPU en malware y herramientas de hacking [rootedvlc2]

Rooted Satellite Valencia

Malware análisis/forensics:

Aunque un proceso o un ejecutable que esté usando la GPU vía CUDA, OpenCL etc, es fácil de detectar con herramientas habituales (p.e. objdump, readelf, gdb, strings, nm …) o chequeando si está usando el dispositivo “/dev/nvidiactl” por ejemplo, si queremos reconstruir el flujo del programa, tenemos que ser capaces de interpretar la memoria de la GPU, por lo tanto, tenemos que identificar los kernels y saber que hacer, la distribución del programa y las estructuras internas del framework que usemos.De momento herramientas como Volatility, IDA o Radare2 no lo soportan, hay que crear uno mismo las herramientas o plugins para las existentes, o usar las que tenemos de Nvidia (hay que fiarse de Nvidia). Conclusión:Además de las características ya mencionadas, cuanto más difícil de analizar y/o de hacer reversing, más fácil para el desarrollo y expansión de malware.l l

Page 14: Jose M Mejia - Usando computación paralela GPU en malware y herramientas de hacking [rootedvlc2]

Rooted Satellite Valencia

Malware ejemplo, usado en el DFRWS 2015 Forensics Challenge:

GPU Keylogger.Keylogger : Malware que recoge y graba pulsaciones de teclasTipos:Hardware (dispositivos conectados al teclado)Software (user mode o kernel mode)Usan funcionalidades del SO: Character device files (Linux)GetAsyncKeyState SetWindowsHookEx (Windows)Implementados vía “Hooks” Todo esto es detectado por AVs/antimalware

Inspirado en el trabajo de investigación de Ladakis, Koromilas, Vasiliadis, Polychronakis e Ioannidis http://www.cs.columbia.edu/~mikepo/papers/gpukeylogger.eurosec13.pdfl l

Page 15: Jose M Mejia - Usando computación paralela GPU en malware y herramientas de hacking [rootedvlc2]

Rooted Satellite Valencia

Malware ejemplo,usado en el DFRWS 2015 Forensics Challenge:l Keylogger vía GPU: (almacena en la memoria de la GPU)l Escanea la memoria del kernel para localizar el buffer del teclado

USBl Mapea la página de memoria del buffer a una dirección espacio de

usuariol Configura la GPU para leerlo periódicamente y escanearlo, para

obtener información sensible (por ejemplo, números de tarjetas de crédito)

l Usa memoria de la GPU y usa un kernel paralelo para rastrear la info que captura

l l

Page 16: Jose M Mejia - Usando computación paralela GPU en malware y herramientas de hacking [rootedvlc2]

Rooted Satellite Valencia

Malware, análisis estático base, ejemplo:

cuobjdump -xelf all whooopsie nvdisasm whooopsie.sm_35.cubin nvdisasm -cfg whoopsie.sm_32.cubin | dot -ocfg.png /-Tpng (Graphviz)

(para análisis dinámico podemos usar cuda-gdb)__global__ void l(unsigned char *v,

unsigned char *ks, unsigned long *ki, unsigned char *p0, unsigned char *p2) {

int idx = blockIdx.x*blockDim.x + threadIdx.x; int i; unsigned char v0, v2;

if (idx == 0) { for (i=0; i < 5000; i++) { v0=v[0]; v2=v[2]; if ((v2 && v2 != *p2) || (v0 && v0 != *p0)) {

// store keystroke and modifier*p0=v0;*p2=v2;ks[(*ki)++]=v0;ks[(*ki)++]=v2;

} else if((! v2 && *p2) || (! v0 && *p0)) {

*p0=0;*p2=0;

} } }}

Page 17: Jose M Mejia - Usando computación paralela GPU en malware y herramientas de hacking [rootedvlc2]

Rooted Satellite Valencia

Herramientas de seguridad:Mismas ventajas que las nombradas anteriormente:Gran capacidad paralela y potencia de cálculo elevadaUna GPU puede calcular un hash MD5 o escanear una base de datos de firmas maliciosas entre un 10 y un 80% más rápido que una CPU (p.e. Kaspersky lo usa en su lab.)Esto demuestra que la GPU puede proporcionar un incremento del rendimiento sobre la CPU. Estos resultados podrían ayudar a lograr productos anti-malware más rápidos, IDS/IPS más rápidos en tiempo de respuesta y firewalls más rápidos y ágiles ante el creciente ancho de banda de las redes.Co-procesadores criptográficos (IPSec, encrypted filesystems)GPU parallel dissassembler : http://www.necoma-project.eu/m/filer_public/e2/2b/e22bd2c1-36e8-4193-b511-6790e7606590/ladakis_isc2015.pdfPor otro lado esta misma potencia es usada hoy en día para herramientas del estilo de herramientas de fuzzing, crackeadores de contraseñas y escáneres de redes o vulnerabilidades por ejemplo.

Page 18: Jose M Mejia - Usando computación paralela GPU en malware y herramientas de hacking [rootedvlc2]

Rooted Satellite Valencia

Herramientas de seguridad, ejemplo IDS:

MIDeA IDS http://dcs.ics.forth.gr/Activities/papers/midea.css11.pdf

Page 19: Jose M Mejia - Usando computación paralela GPU en malware y herramientas de hacking [rootedvlc2]

Rooted Satellite Valencia

Herramientas de Seguridad, LAB : md5crack

MD5crack:Pequeña aplicación de muestra que calcula mediante fuerza bruta usando sets de caracteres un hash MD5 (sin sal)Aún no estando optimizada, programada sobre una GT 630, corriendo sobre una GTX-850M (Maxwell), con 10 bloques de 32 threads obtenemos sobre 600 Mh/s aumentando en unas 10 veces el rendimiento que obtenemos con hashcat sobre una CPU i7 con 4 núcleos y 8 threads, para una contraseña de longitud 5 con mayúsculas, minúsculas, números y caracteres.

Gráfica:

Page 20: Jose M Mejia - Usando computación paralela GPU en malware y herramientas de hacking [rootedvlc2]

Rooted Satellite Valencia

Herramientas de Seguridad, LAB : md5crack passwd space y pseudo codeEspacio de cálculo de las contraseñas:

ML = MaxLengthCS = charsetT = threadsN = num passwdsnc = longitud CSi = subset of passwds (i <= M_L)

CS p.e.{a-z,A-Z,0-9}=nc=62 (no hay ch ni ñ)T = 512N/T num veces que se ejecutará el kernel

Si ML fuese 4, este sería el espacio:

i num palabras VecesEjecucion 1 ML=4 12 ML=3844 83 ML=238328 4654 ML=14776336 28860

S(i) subconjunto de passwds

Algoritmo principal (pseudo-code) del MD5crack:

for (i = 1 to ML) { num = length(Si); // numero total de passwords in Si (length of i <= ML) count = num / T + 1; for (j = 0 to (count - 1)) { base_num = j * T; // primer valor for (index = 0 to (T-1) { //preparando ejecución en paralelo password = GeneratePassword(base_num + index, i); // generamos passwd de acuerdo al valor generado y a la longitud que pasamos md5 = md5_calculate(device, password); // esta parte es la que ejecutará el kernel CUDA compare(md5, target_md5); // comparar (tb en el kernel)

Page 21: Jose M Mejia - Usando computación paralela GPU en malware y herramientas de hacking [rootedvlc2]

Rooted Satellite Valencia

Apéndice A: Breve comentario, problemas de seguridad en la propia GPU.

Al estar mirando y probando código, he hecho un pequeño análisis sobre la seguridad de la propia GPU (siempre usando CUDA),en la gestión de memoria, comprobamos estas cosas:

Un programa puede acceder a datos que han quedado en la memoria global de un programa anterior que ha liberado la memoria.Esto es porque CUDA no inicializa el contenido de las páginas nuevas de memoria que se asignan, si el proceso anterior no ha limpiado el contenido se podría acceder a él. Tampoco se borra el contenido de las memorias de solo lectura (constant – texture)Mediante un ataque de “register spilling” podemos acceder a espacios de memoria global aún asignados a otro context (Kepler)

Page 22: Jose M Mejia - Usando computación paralela GPU en malware y herramientas de hacking [rootedvlc2]

Rooted Satellite Valencia

Algunos enlaces :

https://developer.nvidia.com/cuda-zonehttps://en.wikipedia.org/wiki/CUDAhttps://www.khronos.org/opencl/http://developer.amd.com/tools-and-sdks/opencl-zone/amd-accelerated-parallel-processing-app-sdk/http://gpgpu.orghttp://www.cs.columbia.edu/~mikepo/papers/gpukeylogger.eurosec13.pdfhttps://hashcat.net/oclhashcat/http://www.parallelrecovery.com/http://www.cryptohaze.com/multiforcer.phphttp://openwall.info/wiki/john/GPU

Page 23: Jose M Mejia - Usando computación paralela GPU en malware y herramientas de hacking [rootedvlc2]

Rooted Satellite Valencia

Page 24: Jose M Mejia - Usando computación paralela GPU en malware y herramientas de hacking [rootedvlc2]

Rooted Satellite Valencia