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/23 16:11] – thejuanvisu | mwr:tema1 [2024/09/30 16:11] (actual) – thejuanvisu | ||
---|---|---|---|
Línea 146: | Línea 146: | ||
* Los argumentos de las funciones tendrán un offset positivo. | * 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 | ||