La participación falló: expongamos AgentTesla al agua limpia. Parte 3

La participación falló: expongamos AgentTesla al agua limpia. Parte 3

Con este artículo completamos la serie de publicaciones dedicadas al análisis de software malicioso. EN la primera parte Realizamos un análisis detallado de un archivo infectado que una empresa europea recibió por correo y descubrimos allí el software espía AgentTesla. En la segunda parte describió los resultados de un análisis paso a paso del módulo principal AgentTesla.

Hoy, Ilya Pomerantsev, especialista en análisis de malware de CERT Group-IB, hablará sobre la primera etapa del análisis de malware: el desempaquetado semiautomático de muestras de AgentTesla utilizando el ejemplo de tres minicasos de la práctica de los especialistas de CERT Group-IB.

Normalmente, la primera etapa en el análisis de malware es la eliminación de la protección en forma de empaquetador, criptográfico, protector o cargador. En la mayoría de los casos, este problema se puede resolver ejecutando el malware y realizando un volcado, pero hay situaciones en las que este método no es adecuado. Por ejemplo, si el malware es un cifrador, si protege sus regiones de memoria para que no se vuelquen, si el código contiene mecanismos de detección de máquinas virtuales o si el malware se reinicia inmediatamente después de iniciarse. En tales casos se utiliza el llamado desembalaje “semiautomático”, es decir, el investigador tiene control total sobre el proceso y puede intervenir en cualquier momento. Consideremos este procedimiento usando tres muestras de la familia AgentTesla como ejemplo. Este es un malware relativamente inofensivo si desactiva su acceso a la red.

Muestra No. 1

El archivo fuente es un documento de MS Word que explota la vulnerabilidad CVE-2017-11882.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
Como resultado, la carga útil se descarga y se inicia.

El análisis del árbol de procesos y los marcadores de comportamiento muestra una inyección en el proceso. RegAsm.exe.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
La participación falló: expongamos AgentTesla al agua limpia. Parte 3
Existen marcadores de comportamiento característicos de AgentTesla.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
La muestra descargada es la ejecutable. .NET-archivo protegido por un protector Reactor .NET.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
Abrámoslo en la utilidad. dnSpy x86 y pasar al punto de entrada.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
Al ir a la función Desplazamiento de fecha y hora, encontraremos el código de inicialización del nuevo .NET-módulo. Pongamos punto de interrupción en la línea que nos interesa y ejecutamos el archivo.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
En uno de los buffers devueltos puede ver la firma MZ (0x4D 0x5A). Salvémoslo.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
Un archivo ejecutable volcado es una biblioteca dinámica que es un cargador, es decir. extrae la carga útil de la sección de recursos y la inicia.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
Al mismo tiempo, los recursos necesarios no están presentes en el vertedero. Están en la muestra principal.

Utilidad dnSpy Tiene dos funcionalidades sumamente útiles que nos ayudarán a crear bastante rápidamente un “Frankenstein” a partir de dos archivos relacionados.

  1. El primero le permite "pegar" una biblioteca dinámica en la muestra principal.

    La participación falló: expongamos AgentTesla al agua limpia. Parte 3

  2. El segundo es reescribir el código de función en el punto de entrada para llamar al método deseado de la biblioteca dinámica insertada.

    La participación falló: expongamos AgentTesla al agua limpia. Parte 3

Guardamos nuestro set “Frankenstein” punto de interrupción en la línea que devuelve un búfer con recursos descifrados y produce un volcado por analogía con la etapa anterior.

El segundo volcado está escrito en VB.NET un archivo ejecutable que está protegido por un protector que conocemos ConfundidorEx.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
La participación falló: expongamos AgentTesla al agua limpia. Parte 3
Después de quitar el protector, utilizamos las reglas de YARA escritas anteriormente y nos aseguramos de que el malware descomprimido sea realmente AgentTesla.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3

Muestra No. 2

El archivo fuente es un documento de MS Excel. Una macro incorporada provoca la ejecución de código malicioso.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
Como resultado, se inicia el script de PowerShell.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
La participación falló: expongamos AgentTesla al agua limpia. Parte 3
El script descifra el código C# y le transfiere el control. El código en sí es un gestor de arranque, como también se puede ver en el informe de la zona de pruebas.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
La participación falló: expongamos AgentTesla al agua limpia. Parte 3
La carga útil es un ejecutable. .NET-expediente.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
Abriendo el archivo en dnSpy x86, puedes ver que está ofuscado. Eliminar la ofuscación usando la utilidad de4punto y volver al análisis.

Al examinar el código, puede descubrir la siguiente función:

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
Las líneas codificadas son sorprendentes. Punto de entrada и invocar. Nosotros ponemos punto de interrupción a la primera línea, ejecute y guarde el valor del búfer byte_0.

El volcado es nuevamente una aplicación en .NET y protegido ConfundidorEx.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
La participación falló: expongamos AgentTesla al agua limpia. Parte 3
Eliminamos la ofuscación usando de4punto y subir a dnSpy. Por la descripción del archivo entendemos que nos encontramos ante Cargador CyaX-Sharp.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
Este cargador tiene una amplia funcionalidad antianálisis.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
Esta funcionalidad incluye eludir los sistemas de protección integrados de Windows, deshabilitar Windows Defender, así como los mecanismos de detección de máquinas virtuales y zonas de pruebas. Es posible cargar la carga útil desde la red o almacenarla en la sección de recursos. El lanzamiento se realiza mediante inyección en su propio proceso, en un duplicado de su propio proceso o en procesos. MSBuild.exe, vbc.exe и RegSvcs.exe dependiendo del parámetro elegido por el atacante.

Sin embargo, para nosotros son menos importantes que Antivolcado-función que agrega ConfundidorEx. Su código fuente se puede encontrar en GitHub.

Para deshabilitar la protección, aprovecharemos la oportunidad. dnSpy, que le permite editar IL-código.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
La participación falló: expongamos AgentTesla al agua limpia. Parte 3
Guardar e instalar punto de interrupción a la línea de llamada a la función de descifrado de carga útil. Está ubicado en el constructor de la clase principal.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
Lanzamos y volcamos la carga útil. Utilizando las reglas YARA escritas previamente, nos aseguramos de que se trate de AgentTesla.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3

Muestra No. 3

El archivo fuente es el ejecutable. VB nativo PE32-expediente.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
El análisis de entropía muestra la presencia de una gran cantidad de datos cifrados.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
Al analizar el formulario de solicitud en Descompilador VB es posible que notes un extraño fondo pixelado.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
La participación falló: expongamos AgentTesla al agua limpia. Parte 3
Gráfico de entropía bmp-image es idéntica al gráfico de entropía del archivo original y el tamaño es el 85% del tamaño del archivo.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
El aspecto general de la imagen indica el uso de esteganografía.

Prestemos atención a la apariencia del árbol de procesos, así como a la presencia de un marcador de inyección.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
La participación falló: expongamos AgentTesla al agua limpia. Parte 3
Esto indica que se está desembalando. Para cargadores de Visual Basic (también conocidos como VBKcripta o Inyector VBI) uso típico shellcode para inicializar la carga útil, así como para realizar la inyección en sí.

Análisis en Descompilador VB mostró la presencia de un evento Carga en el formulario FegatassocAirballoon2.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
Vamos a Pro de la AIF a la dirección especificada y estudiar la función. El código está muy confuso. El fragmento que nos interesa se presenta a continuación.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
Aquí se escanea el espacio de direcciones del proceso en busca de una firma. Este enfoque es extremadamente dudoso.

Primero, la dirección de inicio del escaneo. 0x400100. Este valor es estático y no se ajusta cuando se desplaza la base. En condiciones ideales de invernadero indicará el final. PE-el encabezado del archivo ejecutable. Sin embargo, la base de datos no es estática, su valor puede cambiar y la búsqueda de la dirección real de la firma requerida, aunque no provocará un desbordamiento de variables, puede llevar mucho tiempo.

En segundo lugar, el significado de la firma. iWGK. Creo que es obvio que 4 bytes es demasiado pequeño para garantizar la unicidad. Y si tenemos en cuenta el primer punto, la probabilidad de cometer un error es bastante alta.

De hecho, el fragmento requerido está adjunto al final del encontrado anteriormente. bmp-imágenes por desplazamiento 0xA1D0D.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
Rendimiento código shell llevado a cabo en dos etapas. El primero descifra el cuerpo principal. En este caso, la clave está determinada por la fuerza bruta.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
Tira el descifrado código shell y mira las líneas.

Primero, ahora conocemos la función para crear un proceso hijo: CrearProcesoInternoW.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
En segundo lugar, tomamos conciencia del mecanismo de fijación en el sistema.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
Volvamos al proceso original. Pongamos punto de interrupción en CrearProcesoInternoW y continuar la ejecución. A continuación vemos la conexión. NtGetContextThread/NtSetContextThread, que cambia la dirección de inicio de ejecución a la dirección Código Shell.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
Nos conectamos al proceso creado con un depurador y activamos el evento Suspender en la carga/descarga de la biblioteca, reanuda el proceso y espera a que se cargue. .NET-bibliotecas.

Uso adicional hacker de procesos regiones de volcado que contienen desempaquetados .NET-solicitud.

Detenemos todos los procesos y eliminamos la copia del malware que se ha incrustado en el sistema.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
La participación falló: expongamos AgentTesla al agua limpia. Parte 3
El archivo volcado está protegido por un protector. Reactor .NET, que se puede eliminar fácilmente usando una utilidad de4punto.

La participación falló: expongamos AgentTesla al agua limpia. Parte 3
Utilizando las reglas de YARA escritas anteriormente, nos aseguramos de que se trate de AgentTesla.

para resumir

Entonces, demostramos en detalle el proceso de desempaquetado semiautomático de muestras usando tres mini-casos como ejemplo, y también analizamos el malware en base a un caso completo, descubriendo que la muestra en estudio es AgentTesla, estableciendo su funcionalidad y un lista completa de indicadores de compromiso.

El análisis del objeto malicioso que realizamos requiere mucho tiempo y esfuerzo, y este trabajo debe ser realizado por un empleado especial de la empresa, pero no todas las empresas están preparadas para contratar un analista.

Uno de los servicios que presta el Laboratorio de Informática Forense y Análisis de Códigos Maliciosos del Grupo-IB es la respuesta a incidentes cibernéticos. Y para que los clientes no pierdan tiempo aprobando documentos y discutiéndolos en medio de un ciberataque, Group-IB lanzó Retenedor de respuesta a incidentes, un servicio de respuesta a incidentes previo a la suscripción que también incluye un paso de análisis de malware. Se puede encontrar más información sobre esto. aquí.

Si desea estudiar una vez más cómo se descomprimen las muestras de AgentTesla y ver cómo lo hace un especialista de CERT Group-IB, puede descargar la grabación del seminario web sobre este tema. aquí.

Fuente: habr.com

Añadir un comentario