Comunicaciones y Sistemas, Soluciones y consultoría, Tecnología

Excel con contraseña, buen intento

Índice del contenido

Pasan los años y los documentos de office siguen siendo los reyes de la fase de acceso inicial. En esta ocasión, encontramos un documento de excel sospechoso en la escena de un cifrado con Lockbit. Para más inri, el documento no se ejecutaba en ninguna máquina virtual y encima se encontraba protegido con contraseña.

El documento que vamos a analizar en esta ocasión fue detectado gracias a la inteligencia de Office 365, lamentablemente lo detectó cuando el daño ya estaba hecho, discos cifrados, copias perdidas, etc. Por tanto, el objetivo es ver como se ha llegado a esa situación y extraer el máximo número de indicadores de compromiso posible.

Este fichero se puede encontrar fácilmente en varias sandbox públicas buscando por el hash SHA1: c42cfc7914aa1b64706ff6f6db062902faa4edf6. En nuestro caso, el nombre del fichero era PO080M2022.xlsx.

Episodio 1:  El documento que nunca se ejecuta

Como todo buen analista que se precie, lo primero es intentar ejecutar el malware en una sandbox privada y ver qué información podemos extraer. Para nuestra desgracia, el fichero no hacía absolutamente nada.

No obstante, sí que se podían observar algunos detalles interesantes, que certificarían que se trata de un documento malicioso, así como otros que nos ayudarían a identificar su forma de actuar.

Vista del documento desde any.run

Como puede verse en la imagen el documento de fondo es una factura borrosa, con un mensaje de «Contenido bloqueado» en primer plano. El objetivo de los atacantes era llevar a la víctima a habilitar las macros y el contenido para poder ejecutarse. No obstante, no aparece la famosa “Yellow bar”, así que procedemos a habilitarlo manualmente.

Documento protegido con contraseña

No iba a ser tan fácil, el documento se encuentra protegido con contraseña, por lo que no se puede «Habilitar la edición», probablemente los atacantes hayan incluido dicha contraseña en el correo que acompañaba al documento al cual no tenemos acceso.

Llegados a este punto abandonamos el análisis semiautomático en pro de un análisis dinámico manual.

Para hacer un análisis dinámico manual, utilizamos una máquina virtual windows 7 preparada para estos casos. La máquina cuenta con varias herramientas de análisis de malware, conexión a internet falsificada, así como algunas modificaciones para reducir las detecciones.

Lamentablemente, al igual que en el caso anterior, no se ejecuta.

Episodio 2: El análisis decisivo

Continuando con la máquina de análisis de malware, procedemos a analizar estáticamente el documento.

Primero revisamos si el documento tenía o no macros, sorprendentemente no ejecuta ningún tipo de macro, esto se puede deber a un formato erróneo del documento, a que ejecuta macros de otro tipo como las macros 4.0 o bien porque utiliza CVEs para ejecutarse.

Continuamos explorando el documento en busca de características relevantes, así como de su método de ejecución. De esta forma observamos que el documento aparentemente tiene dos páginas: Sheet 2 y Sheet3.

¿Dónde está la “Sheet1”?

Al tratar de mostrar la hoja que falta, de nuevo nos encontramos con el problema del documento protegido, así que nos ponemos manos a la obra a quitarle dicha protección. Para ello utilizamos un conocido script en VBA para la recuperación de contraseñas de documentos cifrados.

Sub PasswordRecovery()

Dim i As Integer, j As Integer, k As Integer

Dim l As Integer, m As Integer, n As Integer

Dim i1 As Integer, i2 As Integer, i3 As Integer

Dim i4 As Integer, i5 As Integer, i6 As Integer

On Error Resume Next

For i = 65 To 66: For j = 65 To 66: For k = 65 To 66

For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66

For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66

For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126

ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & _

Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _

Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)

If ActiveSheet.ProtectContents = False Then

MsgBox «One usable password is » & Chr(i) & Chr(j) & _

Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _

Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)

Exit Sub

End If

Next: Next: Next: Next: Next: Next

Next: Next: Next: Next: Next: Next

End Sub

Más información en: http://excelzoom.com/how-to-recover-lost-excel-passwords/.

Una vez se ha ejecutado, nos aparecerá una ventana con una contraseña que, a pesar de no ser la original, sirve para desproteger el documento y ver que contiene la hoja “Sheet1”:

Password: AABBABAABBBR

 El contenido de la hoja no es más que un objeto similar a una fotografía con caracteres extraños. Este objeto está identificado con el id «574». Al tratarse de un objeto OLE, se procede a utilizar la herramienta oledump.py de DiddierStevens para analizar el documento y ver que está escondiendo.

Esta herramienta, nos permite identificar y extraer los objetos de tipo «OLE» que contiene un documento de office.  Un objeto «OLE» no es más que un elemento externo al documento de office que ha sido incrustado. Habitualmente se utiliza para insertar documentos en otros documentos, imágenes o gráficos generados dinámicamente, no obstante, los atacantes han encontrado la forma de explotar estos objetos para almacenar código y ejecutarlo.

Previamente a la ejecución de oledump.py se debe guardar el documento descifrado, ya que de lo contrario sus elementos y estructura no podrá ser identificada. Como podemos comprobar, el hash del documento desbloqueado ha cambiado al SHA1: 670808970da87937f46665da9d5febeb2c3a4498, así como el tipo de fichero ha pasado de ser CDFV2 Encrypted a Microsoft Excel 2007+.

Mime type de los ficheros de Excel.

Al ejecutar el comando oledump.py sobre el fichero en cuestión se observa como este únicamente tiene un objeto «OLE» incrustado se trata de oleObject1.bin (SHA1: 9920e6d873421507dc6c7d2e516a068f00d08129). Si seleccionamos dicho objeto y le extraemos las cadenas de caracteres podemos ver lo siguiente:

Contenido del OLE oleObject1.bin

Se comprueban las sospechas de que el objeto 574 era un objeto malicioso, ya que su contenido es una URL contra la que debería haber contactado el documento. Como vemos esta accede a la dirección ip 172.245.142[.]47 y descarga el documento www.doc.

Episodio 3: El último enviado

Habiendo visto cómo actuar en caso de encontrarnos con un documento protegido, solo queda ver el desenlace de este caso. Al no conseguir que el documento se ejecutara, hemos descargado el documento www.doc(SHA1: 71374d2aaf0090b04e33cd3d7dc3c8fbc4a1fa38) directamente desde servidor de los atacantes.

Este es un documento de tipo Rich text format, con lo que a priori parecen ser datos aleatorios. Sin embargo, se puede observar que no se trata de un documento legítimo ya que los atacantes le han introducido una serie de modificaciones que dificultan su análisis. Por suerte para nosotros, este documento sí que se ejecuta correctamente, por lo que no será necesario analizarlo estáticamente.

Por destacar una de las modificaciones que han hecho los atacantes, han editado las cabeceras del fichero de forma que no se pueda identificar fácilmente como fichero RTF. Esto se puede detectar analizando las cabeceras del fichero si después de la palabra RTF se encuentra un número que no coincide con una versión de RTF.

Fichero RFT modificado por los atacantes.

Fichero RTF Legítimo.

 Al igual que en la primera parte, procedemos a lanzar el documento any.run y enseguida vemos como este intenta contactar contra una nueva IP (84.38.132[.]25) desde la que descarga un fichero. Segundos después se ejecuta el fichero descargado, el cual resulta ser un cliente de Putty (SHA1: 73016558c8353509b15cd757063816369e9abfa7), al que llaman vbc, el cual no ejecuta nada más.

  Comunicación desde eqnedt32.exe.

Tras revisar el árbol de procesos generado, se puede ver como hace uso del CVE-2017-11882 el cual utiliza una vulnerabilidad en la gestión de la pila del proceso EQNEDT32.exe (proceso encargado de la edición de ecuaciones) para ejecutar código directamente en la memoria. De esta forma los atacantes han podido descargar este Putty y automáticamente trabajar con él sin pasar por disco.

Árbol de procesos de www.doc

 Dada la falta de información sobre cómo se ejecutaba el primer documento, no podemos tener una total certeza de que hacían los atacantes con el binario de Putty descargado.

Reglas de hunting:

TTP ID Descripción Microsoft ATP Palo Alto Cortex XDR SentinelOne
T1218 Contacto contra una dirección IP desde el proceso del editor de equaciones. DeviceNetworkEvents

| where InitiatingProcessFileName == «eqnedt32.exe» and RemoteUrl matches regex @’\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}’

config case_sensitive = false

| dataset = xdr_data

| filter event_type = enum.NETWORK and actor_ process_ image_ name = «eqnedt32.exe» and action_ external_ hostname ~= ‘\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}’

src.process.name contains («eqnedt32»)

|  filter dst.ip.address matches «.+»

| columns event.time , endpoint.name , src.process.cmdline, dst.ip.address

T1036 Comunicación contra URL con caracteres “-“, “.” y “_” alternados DeviceNetworkEvents

| where RemoteUrl matches regex @’\/[\.\_\-]+\/’

config case_sensitive = false

| dataset = xdr_data

| filter  http_​req_​uri ~= ‘\/[\.\_\-]+\/’

event.category = «url»

| filter url.address matches («\/[\.\_\-]+\/»)

| columns event.time , endpoint.name , src.process.cmdline,  tgt.process.cmdline, dst.ip.address, url.address

Regla yara automática:

rule ERISCERT_auto_2022_11_09_PO080M2022_xlsx {
meta:
description = «Automatically generated rule – file
PO080M2022.xlsx»
author = «SOTHIS SOC – ERISCERT»
reference = «
https://www.sothis.tech»
date = «2022-11-09»
hash1 = «786f1e09be7324d3a2a977447cf12770d522b5e1c221aca258d628b212f5f8d8»
strings:
$s1 = «EncryptedPackage2» fullword wide
$s2 = «Root Entry» fullword wide /* Goodware String – occured 46 times */
$s3 = «Microsoft Enhanced RSA and AES Cryptographic Provider» fullword wide /* Goodware String – occured 153 times */
$s4 = «PkNi[B~3{+» fullword ascii
$s5 = «HD.xCe*» fullword ascii
$s6 = «VOcX;{Q» fullword ascii
$s7 = «#HYzppsyO7>`uZ» fullword ascii
$s8 = «BUXW2.oQ» fullword ascii
$s9 = «xcpcB2~» fullword ascii
$s10 = «StrongEncryptionDataSpace» fullword wide /* Goodware String – occured 1 times */
$s11 = «Microsoft.Container.EncryptionTransform» fullword wide /* Goodware String – occured 1 times */
$s12 = «
\\!Znbf» fullword ascii
$s13 = «j,tw#;,BXP6r» fullword ascii
$s14 = «%$r}]{» fullword ascii
$s15 = «W/wQmuA» fullword ascii
$s16 = «Lm`B(x» fullword ascii
$s17 = «f8gkbp» fullword ascii
$s18 = «0(!I9{» fullword ascii
$s19 = «:5h`=w» fullword ascii
$s20 = «E_a;pAj2f» fullword ascii
condition:
uint16(0) == 0xcfd0 and filesize < 200KB and
8 of them

}

IOCs:

TIPO IOC
SHA1 c42cfc7914aa1b64706ff6f6db062902faa4edf6
SHA1 670808970da87937f46665da9d5febeb2c3a4498
SHA1 9920e6d873421507dc6c7d2e516a068f00d08129
IP 172.245.142[.]47
SHA1 71374d2aaf0090b04e33cd3d7dc3c8fbc4a1fa38
IP 84.38.132[.]25
SHA1 73016558c8353509b15cd757063816369e9abfa7
Comparte

No es sólo un blog

Noticias y avances sobre
tecnología

Te queremos descubrir los beneficios de sistema PLM,...
Estos días estoy inmersa en un montón de...
El nuevo impuesto especial sobre envases de plástico...
Todas las empresas medianamente grandes disponen de un...
Gestionar y retener al mejor talento se ha convertido...

¡Gracias!

Tu formulario se ha enviado correctamente-