Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
mwr:tema1 [2024/09/16 16:02] – thejuanvisu | mwr:tema1 [2024/09/30 16:11] (actual) – thejuanvisu | ||
---|---|---|---|
Línea 5: | Línea 5: | ||
Generalmente e busca analizar el malware para asesorar daños, identificar vulnerabilidades, | Generalmente e busca analizar el malware para asesorar daños, identificar vulnerabilidades, | ||
- | ===== ¿Por que se crea malware? | + | ==== ¿Por que se crea malware? ==== |
El primer malware fue un gusano que trataba de medir el tamaño de internet en los 80. El gusano se comportaba como una forkbomb y se propagó de forma increíblemente rápida. | El primer malware fue un gusano que trataba de medir el tamaño de internet en los 80. El gusano se comportaba como una forkbomb y se propagó de forma increíblemente rápida. | ||
En los 90 los virus se hicieron para ganar gloria personal, haciendo que el malware mostrara mensajes en pantalla. | En los 90 los virus se hicieron para ganar gloria personal, haciendo que el malware mostrara mensajes en pantalla. | ||
En la actualidad se crean para ganari dinero, robar contraseñas, | En la actualidad se crean para ganari dinero, robar contraseñas, | ||
En el futuro se cree que se utilizarán para guerra cibernética con malware que utilizaría vilnerabilidades de tipo Zero Days con el objetivo de causar daño en instalaciones físicas. | En el futuro se cree que se utilizarán para guerra cibernética con malware que utilizaría vilnerabilidades de tipo Zero Days con el objetivo de causar daño en instalaciones físicas. | ||
- | ===== Cuestiones prácticas | + | ==== Cuestiones prácticas ==== |
* ¿Cual es el objetivo de este malware? | * ¿Cual es el objetivo de este malware? | ||
Línea 20: | Línea 20: | ||
* ¿Como lo puedo encontrar en otro lugar? | * ¿Como lo puedo encontrar en otro lugar? | ||
* ¿Como se previene otra futura infección? | * ¿Como se previene otra futura infección? | ||
- | ===== Cuestiones técnicas | + | ==== Cuestiones técnicas ==== |
* ¿Cuales son los indicadores de red? | * ¿Cuales son los indicadores de red? | ||
Línea 31: | Línea 31: | ||
* ¿Tiene funcionalidades rootkit? | * ¿Tiene funcionalidades rootkit? | ||
- | ===== Términos | + | ==== Términos |
* Virus: Código que va unido a una aplicación que busca replicarse en aplicaciones similares hasta que pueda ejecutar una payload. | * Virus: Código que va unido a una aplicación que busca replicarse en aplicaciones similares hasta que pueda ejecutar una payload. | ||
* Gusano: Malware que se propaga muy rápido a través de la red. | * Gusano: Malware que se propaga muy rápido a través de la red. | ||
Línea 46: | Línea 46: | ||
* Intrusion Prevention System (IPS): Intentan detener un intruso que se haya colado en el sistema. | * Intrusion Prevention System (IPS): Intentan detener un intruso que se haya colado en el sistema. | ||
* Operations Security (OPSEC): Proceso de prevenir que un adversario obtenga información sensible. | * Operations Security (OPSEC): Proceso de prevenir que un adversario obtenga información sensible. | ||
+ | * Ingeniería inversa | ||
+ | * Ransomware: malware que pide rescates para recuperar un sistema | ||
+ | * Creeping | ||
+ | * Phising | ||
+ | * Pharming | ||
+ | * Bloatware | ||
+ | * Doxing | ||
+ | * Flaming | ||
+ | ==== Webs interesantes ==== | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | ===== Metas y Tipos de Análisis del Malware ===== | ||
+ | ==== Objetivos del análisis del malware ==== | ||
+ | Se busca obtener un entendimiento de como un malware específico funciona para construir defensas para proteger nuestros sistemas en el futuro. | ||
+ | ==== Tipos de análisis del malware ==== | ||
+ | * Análisis estático: Análisis del código para obtener un mejor entendimiento del malware. No se ejecuta. | ||
+ | * Análisis dinámico: Se analiza como se comporta el malware cuando es ejecutado, observando con que se trata de comunicar y como funciona. | ||
+ | Se deben realizar estos dos tipos de análisis para obtener un entendimiento completo de como funciona un malware. Aunque ambos tipos consiguen lo mismo, se necesitan diferentes habilidades para realizarlos. | ||
+ | === Análisis estático de código === | ||
+ | El análisis estático es más seguro ya que no se está ejecutando código malicioso, pero es muy lento y difícil ya que se necesitan muchas herramientas tanto gratuitas como de pago para proceder. | ||
+ | cuando se hace ingeniería inversa se deben usar desensambladores, | ||
+ | === Análisis dinámico del comportamiento === | ||
+ | Es una manera rápida de analizar un malware. Es muy importante que el laboratorio de malware no esté conectado a una red externa. Este tipo de análisis observa como se comporta un malware y que cambios trata de realizar en el sistema. Cuando se haga este análisis se debe estar atento de que cambios han surgido en el sistema, así como si hay comportamiento poco usual por parte del equipo. Cambios que pueden ser indicativos de algo malo: | ||
+ | * Archivos añadidos o modificados | ||
+ | * Nuevos servicios de red instalado | ||
+ | * Nuevos procesos arrancando | ||
+ | * Modificaciones de registro | ||
+ | * Modificaciones de ajustes del sistema | ||
+ | * Cambio en configuraciones de red (DNS) | ||
+ | |||
+ | Además del comportamiento del sistema también se debe analizar el tráfico de red. | ||
+ | === Malware Armado: características === | ||
+ | * Encriptado: el contenido se oculta encriptándolo. | ||
+ | * Compresión | ||
+ | * Ofuscación: | ||
+ | * Anti-parcheo (CRC check): Detecta si se han realizado modificaciones. De forma que el malware es capaz de saber si ha sido manipulado en el proceso de ingeniería inversa. | ||
+ | * Anti-tracing: | ||
+ | * Anti-desempaquetado | ||
+ | * Anti-VMware: | ||
+ | * Self-Mutating (Poli/ | ||
+ | * Fechas restrictivas: | ||
+ | * Protección por contraseña: | ||
+ | |||
+ | ===== La arquitectura x86 ===== | ||
+ | |||
+ | En un ordenadores existen diferentes capas de abstracción, | ||
+ | ==== Ingeniería inversa ==== | ||
+ | En algunos lenguajes existen decompiladores que permiten obtener una descripción de un código a alto nivel. Normalmente el código en ensamblador es la capa más alta de abstracción que puede ser recuperada de forma fiable y consistente. Entender ensamblador es muy importante para el análisis de malware. El lenguaje ensamblador depende de la familia de procesadores (X86, MIPS, DEC Alpha, ARM, PowerPC...) | ||
+ | ==== La arquitectura x86 ==== | ||
+ | Es la arquitectura más atacada ya que es la más popular. La mayoría del mercado actual esta tomado por equipos basados en la arquitectura x86. Ejemplo de instrucción en ensamblador y en lenguaje máquina: | ||
+ | < | ||
+ | mov ecx, 0x42 -> B9 42 00 00 00 | ||
+ | </ | ||
+ | * Intrucciones: | ||
+ | * Operadores: Se usan para identificar los datos usados por una insturcción. Hay 3 tipos: | ||
+ | * Operadores inmediatos con valores fijos | ||
+ | * Operadores de registro | ||
+ | * Direcciones de memoria en corchetes. | ||
+ | |||
+ | === registros === | ||
+ | * Registros generales: usados por el procesador durante la ejecución | ||
+ | * Registros de segmento: Usados para mantener localizadas secciones de memoria | ||
+ | * Flags de estado: se usan para tomar decisiones | ||
+ | * Puntero de instrucción: | ||
+ | |||
+ | === Flags === | ||
+ | El registro de flags tiene un tamaño de 32 bits, siendo cada bit un flag, de forma que si es 1, esta activado y si es 0 esta desactivado. Se usan para controlar operaciones del procesador o indicar resultados de operaciones. Tipos de flags: | ||
+ | * ZF(Zero Flags): Cuando el resultado de una operación es 0. | ||
+ | * CF(Carry Flag): Cuando el resultado de una operación es demasiado grande o demasiado pequeño para su destino | ||
+ | * SF(Sing Flag): Cuando el resultado de una operación tiene signo negativo | ||
+ | * TF(Trap Flag): Usado para debug. Cuando está activada el procesador solo ejecuta una instrucción cada vez. | ||
+ | |||
+ | === Instrucciones de datos === | ||
+ | * mov, destino, origen: mueve datos de un origen a un destino | ||
+ | * lea destino, origen: carga una dirección efectiva a un destino | ||
+ | |||
+ | === Instrucciones aritméticas === | ||
+ | * add/sub destination, | ||
+ | * mult/div value | ||
+ | * operadores lógicos or y xor | ||
+ | * or/ y /xor destino, valor | ||
+ | * Se usan como una forma rñapido de establecer eax a 0 | ||
+ | * shr/shl destino, contador | ||
+ | * ror/rol: instrucciones de rotación. | ||
+ | === Llamadas de función === | ||
+ | Ejecutan subrutinas para ejecutar algo | ||
+ | * Function prologue: Unas pocas líneas de código al inicio de la función, prepara los stacks/ | ||
+ | * Function epilogue: Unas pocas líneas de código al final de la función, reestablece los stacks/ | ||
+ | === El Stack === | ||
+ | Instrucciones: | ||
+ | Convenciones: | ||
+ | * cdecl: llamar a una función vacía el stack | ||
+ | * stdcal: La función llamada vacía el stack antes de terminar | ||
+ | * fastcall: Los primeros argumentos se pasan en los registros, normalmente edx y ecx. | ||
+ | |||
+ | Teniendo una función dada del frame del stack: | ||
+ | * Las variables locales estarán en un offset negativo de EBP. | ||
+ | * Los argumentos de las funciones tendrán un offset positivo. | ||
+ | |||
+ | === Condicionales === | ||
+ | * test valie, value: es como un AND, activa la ZF Zero Flag | ||
+ | * cmp destination, | ||
+ | |||
+ | === branching === | ||
+ | * jmp ubicación: una rama es una secuencia de código que es condicionalmente ejecutada para saltar instrucciones. | ||
+ | |||
+ | === Repeating === | ||
+ | * rep instructions: | ||
+ | |||
+ | ===== La arquitectura de procesos de windows ===== | ||
+ | |||
+ | ==== Nivel Kernel ==== | ||
+ | |||
+ | === Windows API === | ||
+ | Forma standar de interactuar con el sistema operativo Windows a través de DLLs (Dynamic Link Library). Las librerías principales son las siguientes: | ||
+ | * Kernel32.dll/ | ||
+ | * Wininet.dll/ | ||
+ | * advapi32.dll: | ||
+ | |||
+ | === Process === | ||
+ | |||
+ | Es un contenedor que tiene su propio: | ||
+ | * dirección virtual en el espacio | ||
+ | * Hilos | ||
+ | * Bookkeping information, | ||
+ | Apis como: | ||
+ | * CreateProcess | ||
+ | * CreateProcessAsUser | ||
+ | * EnumProcesses. | ||
+ | |||
+ | === Thread === | ||
+ | |||
+ | Son planificados y ejecutados por el sistema operativo | ||
+ | * Pertenecen a un solo proceso y comparten su espacio de dirección | ||
+ | * Tienen su propio thread context y stack | ||
+ | |||
+ | en API: | ||
+ | * CreateThread | ||
+ | * CreateRemoteThread | ||
+ | |||
+ | Thread Context mantiene el control del estado de cada hilo: | ||
+ | * Es necesario cuando hay muchos hilos en un sistema | ||
+ | * El estado viene definido por valores de registro. | ||
+ | |||
+ | ==== Nivel Usuario ==== | ||
+ | Task Scheduler: Asigna tiempos de CPU en función de como esté el sistema en el momento. | ||
+ | |||
+ | |||
+ | === DLL === | ||
+ | Dynamin Link Library. Todos los rpocesos comparten las DLL cargadas, esto ahorra almacenamiento ya que solo se almacenan en memoria una sola vez. Los cambios solo afectan a cada espacio de dirección de proceso. El método DllMain es llamado automáticamente cuando se carga una DLL. | ||
+ | en API: | ||
+ | * LoadLibrary | ||
+ | * GetProcAddress | ||
* | * | ||
+ | === Registro === | ||
+ | |||
+ | Se usa para almacenar información de todo: | ||
+ | * Clave: similar a una carpeta | ||
+ | * Value Entry: Similar a un archivo. | ||
+ | Se puede navegar por el registro con regedit. | ||
+ | |||
+ | En API: | ||
+ | * RegOpenKey | ||
+ | * RegSetValue | ||
+ | * RegEnumKey | ||
+ | |||
+ | === Service === | ||
+ | Similares a un proceso, pero son instalados en el disco o en el registro. El programador puede interactuar con los servicios mediante el service manager " | ||
+ | |||
+ | en API: | ||
+ | * CreateService | ||
+ | * OpenSCservice | ||
+ | |||
+ | === Handle === | ||
+ | |||
+ | Es un puntero abastracto a algo: | ||
+ | * Un proceso específico, | ||
+ | * A veces es un puntero de memoria. | ||
+ | |||
+ | === COM === | ||
+ | Component Object Model es un estándar de interfaz binaria creada por microsoft en 1993. Es una forma de lenguaje neutral de implementar objetos que pueden ser usados en entornos diferentes unos de los otros. Es usa para habilitar comunicación entre procesos y la creación de objetos en un rango enorme de lenguajes de programación y ha sido la base para muchas otras tecnologías y frameworks de microsoft. | ||
+ | |||
+ | Es un ejecutable de 8 bits de la época de CP-M y MS-DOS con un tamaño máximo de 64KB para almacenar código y datos. Algunos malware se aprovecha del desconocimiento de los archivos con extensiones .COM ya que la gente los confunde con enlaces .com. | ||
+ | |||
+ | ===== Análisis de malware y herramientas ===== | ||
+ | |||
+ | ==== Creación de un sandbox ==== | ||
+ | Normalmente se trata de evitar que un malware pueda tener contacto con una red real: | ||
+ | * Se unsa una red Host Only en la plataforma de virtualización | ||
+ | * Se establecen servicios reales en el Host o en otras máquinas virtuales | ||
+ | * Se crean puertos de escuchas y se interactua con un cliente basado en texto | ||
+ | * Se crean servidores de control. | ||
+ | |||
+ | ==== Laboratorio de virtualización ==== | ||
+ | |||
+ | Construir un laboratorio para el análisis de malware requiere contemplar los pros y los contras de usar máquinas virtuales o hardware real. Las recomendaciones habituales suelen ser las de usar máquinas virtuales para reducir el coste de hardware que necesita una o dos máquinas físicas. Una de las mejores características de las máquinas virtuales es que se pueden crear snapsots | ||
+ | |||
+ | Los probllemas son que algunos malware pueden detectar si están en una máquina virtual, parando su ejecución. El software de virtualización tampoco es perfecto y puede dar problemas. Algunos Gusanos 0 day, si detectan que están en una máquina virtual pueden escapar y acceder al host, pudiendo llegar a escapar por la red. | ||
+ | |||
+ | ==== Virtualuzando el laboratorio ==== | ||
+ | |||
+ | Normalmente se consuderan dos jungadores | ||
+ | * Un servidor linux o windows comprometido | ||
+ | * Una máquina cliente arrancando el sistema operativo objetivo. | ||
+ | |||
+ | Se recomienda tomar snapsots cada cierto tiempo, además de hacerlo justo antes de comenzar el análisis de un malware. Lo normal es realizar primero el análisis estático ya que esto nos proporciona información que se puede utilizar durante el análisis dinámico. | ||
+ | ==== Herramientas de anáisis dinámico ==== | ||
+ | * Monitorizadores de cambios | ||
+ | * Escaneadores de malware basado en rootkits | ||
+ | * Sniffers, port scanners | ||
+ | * Buscar archivos ocultos en el disco duro | ||
+ | * Detector de cambios de archivos | ||
+ | * Escuchador de puertos TCP/UDP | ||
+ | * Generadores de MD5 para revisar la integridad de los archivos | ||
+ | * Editores Hex | ||
+ |