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:
Los
En esta parte se ve como detectar y eliminar malware mediante el uso de Antivirus, Yara, Firewalls y proxies.
Esta base de datos exite para revisar por malware no detectado o nuevo, aislar infecciones y borrar malware presente en una intranet. Estas bases de datos deben ser compartidas entre compañías para prevenir la difusión de nuevo malware.
Indicadores que caracterizan el malware:
El diseño de este tipo de base de datos es todavía un arte y debe evitar tanto falsos positivos como falsos negativos. Para evitar eso se usan numerosas herramientras como antivirus, firewalls, proxies, etc…
Para proteger una red, se deben establecer múltiples capas de defensa:
Programas diseñados para detectar y eliminar viruses, pueden enfrentarse a tipos de malware como spyware, adware, gusanos, troyanos, rootkits… Generalmente para la defensa se recomiendan los siguientes mecanismos:
El problema de los antivirus es que muchas veces pueden dar falsos positivos, que hacen que un archivo o programa seguros sean identificados como virus, lo que puede producir problemas en el sistema operativo o hacer algunos programas inutilizables. Además, si se arranca un antivirus con protección en tiempo real pueden haber conflictos o problemas de rendimiento:
ClamAV es un antivirus de la empresa Sourcefire que es open source pensado para sistemas Unix, aunque en la actualidad tiene compatibilidad también con windows. Una vez instalado, usar ClamAV es muy simple, solo es necesario actualizar la base de datos de firmas de malware y escanear el sistema. Para actualizar la base de datos se usa el comando “freshclam” y para ejecutar un análisis del sistema se usa “clamscan”. También podemos crear nuestras propias firmas con la siguiente sintaxis:
Name:Type:Offset:HexadecimalCode
Una firma ideal identifica un archivo de forma exacta y tiene la propiedad de que dos archivos diferentes no pueden compartir el hash y que no se puede obtener el archivo del hash. Pueden ser usadas para revisar si un archivo ha sido modificado o corrompido durante una transmisión de datos usando funciones como MD5, SHA4 o SHA256. De todas formas los codificadores de malware pueden usar bytes aleatorios son modificar el comportamiento del código para producir firmas diferentes con el mismo código.
YARA (Yet Another Ridiculous Acronym) es el nombre de una herramienta usada para la detección de malware e investigación. YARA proporciona un sistema de reglas para crear descripciones de familias de malware basado en texto o patrones binarios. Una descripción es una regla Yara y una regla que consiste en sets de cadenas de texto y una expresión booleana. Yara Puede ser combinado con otras herramientras, trayendo de serie módulos para procesar PE, ELF analisis, además de tener soporte para el sandbox Cuckoo.
Un ejemplo de yara podría ser el siguiente:
rule silent_banker : banker { meta: description = "This is just an example" threat_level = 3 in_the_wild = true strings: $a = {6A 40 68 00 30 00 00 6A 14 8D 91} $b = {8D 4D B0 2B C1 C0 27 99 4E 59 F7 F9} $c = "UVODFRYSIHLNWPEJXQZAKCBGMT" condition: $a or $b or $c }
Sistema de seguridad de red que monitoriza un controla el tráfico de red que entra y sale del sistema. Se basa en reglas de seguridad predeterminadas. Normalmente establecen una barrera entre una red interna confiable y una red externa no confiable como internet. Existen varios tipos de firewall:
En un firewall existen varias capas que siguen las políticas basadas en reglas:
Un servidor proxy es un programa o dispositivo que actua como intermediario en las peticiones realizadas de un cliente a otro server. El servidor proxy más popular es aquel que soporta búsqueda web con diferentes propósitos. Hay 2 tipos de proxys dependiendo de como sean implementados:
Squid:
Es un programa usado para detectar acceso no autorizado a un ordenador o una red. Normalmente tienen sensores virtuales para descibrir anomalías que puedan indicar la presencia de malware. La operación de estas herramientras está basada en un análisis detallado del tráfico de red para compararlo con firmas de ataques conocidos o para detectar comportamiento extraño. Normalmente funciona integrado con un firewall, siendo una herramienta defensiva batante potente.
Es un detector de intrusiones open source. Fue desarrollado para analizar el tráfico de red tanto en tiempo real como de forma forense. Puede ser usado para detectar ataques, incluyendo fingerprinting de sistemas operativos. Snort tiene 3 modos de operación:
./snort -dev
./snort -dev ./snort -dev -l
./snort -d -l ./log -h 192.168.1.0/24 -c snort.conf
Snort tiene reglas sencillas y fáciles de modificar, al contrario que otras soluciones comerciales.