Proyecto Integral de Ingeniería del Software | |
---|---|
Metodologías Ágiles |
Trabajo Fin De Grado | |
---|---|
Guía Memoria TFG |
Servidores | |
---|---|
Minercraft | |
Knoppia | |
Omegacraft |
Base de datos de juegos | |
---|---|
GameBoy Advance (GBA) |
Proyecto Integral de Ingeniería del Software | |
---|---|
Metodologías Ágiles |
Trabajo Fin De Grado | |
---|---|
Guía Memoria TFG |
Servidores | |
---|---|
Minercraft | |
Knoppia | |
Omegacraft |
Base de datos de juegos | |
---|---|
GameBoy Advance (GBA) |
¡Esta es una revisión vieja del documento!
La idea de las sandbox es poder analizar dinámicamente el malware en un entorno aislado. Estas Herramientas registran toda la actividad del malware y generan un reporte. Para esto también se puede usar un KVM (Kernel Virtual Machine)que nos permite arrancar una máquina virtual para analizar automáticamente la actividad de un malware, generar un reporte y recuperar la máquina a una snapshot anterior.
Inicia varias máquinas virtuales conectadas a una red virtual para analizar el comportamiento de un malware. Lo primero que se debe hacer tras instalar Cuckoo es configurar la aplicación, para ello vamos a la carpeta conf:
Para inicializar cuckoo primero se debe instalar el agente en la máquina virtual (agent/agent.py). Finalmente se debe realizar una snapshot con el agente arrancado, de forma que cuckoo pueda restaurar la máquina virtual tras cada análisis. Para iniciar cuckoo se debe ejecutar el script cuckoo.py en el host. Tras eso envías el archivo que se quiere analizar con submit.py, que se encuentra en la carpeta utils. Se pueden seleccionar los formatos con el flag -package.
Los resultados del análisis se guardan en la carpeta storage/analysis:
Cuckoo tiene algunas limitaciones ya que al volverse muy popular algunos malwares traen contramedidas como sistemas anti análisis. Lo que hacen estos sistemas es:
Debido a esto cuckoo está en constante evolución, al igual que el malware.
Kit de herramientras para hacer ingeniería inversa y revisar software malicioso. Provee de una colección de herramientras creadas por la comunidad que se pueden usar para el análisis del malware. También ofrece imágenes de docker con herramientas de análisis de malware populares.
Colección de scripts que permiten montar y mantener un ambiente de ingeniería inversa en una máquina virtual. Depende de 2 principales tecnologías:
El malware puede tener numerosas medidas contra la ingeniería inversa:
Transformar el programa dejando las funcionalidades intactas para dificultar el entendimiento de su funcionamiento. Normalmente la ofuscación se usa para:
Hay muchos cifrados simples que aplican operaciones de bit sobre los registros de datos:
La forma más fácil de descubrir el algoritmo es usando uno estándar:
Sistemas de codificación caseros:
Procedimiento estándar para encontrar que codificado se ha utilizado y deducir como descifrarlo:
Arrancar el malware en un debugger y establecer breakpointas antes y despues del codificado o decodificado. Tiene sus problemas:
Los diseñadores de malware suelen añadir un componente llamado run-time packer que son aplicaciones que comprimen el código como otras aplicaciones típicas como Zip o RAR. Cuando estas aplicaciones son descomprimidas con el empaquetador, la aplicación será descomprimida en la memoria de sistema en vez de en el sistema de archivos. La ventaja de esto es que el código de un malware es más pequeño y menos detectable, lo que dificulta su detección por parte de antivirus. Otra medida que se puede tomar es encriptar el malware con el empaquetador, de forma que ni los antivirus puedan desempaquetar el código.
Normalmente se realizan tareas anti análisis en cada paso.
En los empaquetadores, un estub es una pieza de código que contiene la rutina de decompresión o descifrado que actua de cargador y se ejecuta antes de ejecutar el malware.
Hay varios indicadores de que podemos estar tratando con un ejecutable empaquetado:
Si este fuera un caso fácil, para desempaquetar el código pueden usarse métodos como XOR, AES, etc… A veces se mantiene la tabla de importación intacta de forma que el cargador de windows puede resolver los imports. Si fuera un caso difícil no hay imports y hacerlo manualmente es un dolor de cabeza.
Existen herramientas como UPX que permiten realizar los desempaquetados, pero no siempre sirven. A veces se crean scripts o herramientas propias para empaquetar, lo que hace difícil su desempaquetado. El desempaquetado automatizado no siempre funciona debido a esto.
La dificultad y tiempo requeridos depende de:
En estos casos se pueden aplicar 2 métodos:
Buscar por instrucciones de salto (JMP) al final de cada sección de código:
El OEP puede estar en diferentes secciones de un stub de desempaquetado:
Bloquear la tabla de imports nos acerca al final del stub:
Buscar llamadas API de Windows como GetModuleHandle o GetCommandLine:
Técnicas usadas por diseñadores de malware para evitar que este sea detectado usando desensamblado, Debug, Máquinas virtuales o antivirus.
Muchos desensambladores son lineares (Procesan una instrucción a la vez) y orientados al flujo (Examina cada instrucción y construyen una lista de localizaciones para desensamblar considerando saltos, llamads, etc..)
El malware se aprovehca de la heurística del desemsamblado, explotando las cosas que da por hecho un ensamblador. El malware introduce código para confundir el análisis de frame del stack.
El malware puede usar el API de Windows para detectar si está siendo debuggeado:
El malware puede hacer revisiones manuales:
El malware también puede buscar por residuos del sistema:
El malware puede buscar su propio código para detectar interrupts (INT 3, breakpoint o 0xCC). Esto puede ser evitado usando breakpoints de hardware usando registros (D0-D3), pero el malware también puede detectarlos. También puede detectar el debugger ya que cuando está en debug corre más lento. El malware puede contar Ticks usando QueryPerformanceCounter, GetTickCount o la instrucción rdtsc.
El malware puede usar herramientas como scoopyNG para detectar que está en una máquina virtual. También puede detectar que está en una máquina virtual ya que hay instrucciones con semántica diferente en una máquina virtual que en hardware real. Por suerte gran parte del código anti máquina virtual puede ser parcheado fácilmente, pero el malware puede aprovechar exploits en la máquina para escapar al host.
Un antivirus realiza la siguientes operaciones detectables:
El Malware puede usar las mismas estrategias que se usa para el anti-análisis par contrarrestar un antivirus: