SpiderLabs Blog

Demystifying Obfuscation Used in the Thanksgiving Spam Campaign

Written by Rodel Mendrez | Nov 26, 2018 8:49:00 PM

During Thanksgiving week, we noticed this quite unusual XML-format MS Office Document file:

 Figure 1: Email Sample

Saving a Word document file as XML is a legitimate option but criminals had taken advantage of this file format to circumvent malware scanners and spam filters.

Figure 2. XML header of a Word document file saved as XML file format
 

This Microsoft Office Word document file has an almost "hidden" TextFrame object sitting in the corner. The document also has macro in it which we will also be investigating.

Figure 3. Screen capture of the document file when opened

 

If you expand this tiny TextFrame object you will see an obfuscated CMD shell:

Figure 4. An Obfuscated CMD shell in the hidden TextFrame

 

The entire CMD code can be seen below:

Figure 5. The full CMD shell extracted from the TextFrame

 

Next in the investigation, we de-obfuscated this shell command, by first removing all the caret characters "^", this is because CMD shell omits this on execution.

Figure 6. Part of the CMD shell after removing the Caret character

 

Taking a look at the first line of code:

cmd /c %LOCalAPpdaTA:~ -3,-2%^M%SysTEmrOoT:~ +6, +1%; ; ; ; /V:^o^ ; /%appDATa:~-7, 1%"

When printing this command using the echo command, it prints "cMD; ;;; /V:o /R"

Figure 7

 

The code extracts the substring from the value of the environment variable and from this, it builds a command string. For example:

%localappdata% environment variable is equivalent to this path "C:\Users\Username\AppData\Local"

Then using substring command in cmd shell "%localappdata:~-3,-2%" it extracts a character between position 3 from the end of the string and position 2 from the end string:

"C:\Users\Username\AppData\Local"

Figure 8. How the " cMD; ;;; /V:o /R " string was built

 

We are not sure why the malware writer obfuscated this, since they already had a fairly obvious precursor "cmd" string in the command shell.

Figure 9. Highlighted in the red block is the obfuscated Powershell command, highlighted in blue is the deobfuscation routine

 

Next, we take a look at the block of obfuscated strings assigned to the variable t8Vb and the FOR loop after that (as seen in Figure 9):

for /l %m IN (2143, -4, 3) do (SeT yN5H=!yN5H!!t8Vb:~ %m, 1!) if %m==3 ;(call; %yN5H:*yN5H!=%)

The loop actually extracts each character starting from the end of the string of the variable t8Vb and steps 4 positions backward each loop until it reaches the 3rd position of the string.

To make it a lot easier, we can reverse the string block:

Figure 10. Reversing the obfuscated string

 

Then starting from the first position we extract every 4th character from the string block.

Figure 11

 

After extracting, it builds a string of the powershell command shown below:

Figure 12

 

So how does the powershell command get executed? The answer is a macro code. When a user opens this document file and enables the macros. A VBA macro code will trigger. This code extracts the string from the TextFrame then executes it using VBA Shell command


 

Figure 13

 

So what is the payload?

Figure 15. A beautified code of the Powershell command

 

The PowerShell attempts to download a binary from a list of URLs:

hxxp:// danzarspiritandtruth[.]com /J7B5TiAIp

hxxp:// littlepeonyphotos[.]ru /jPGDyvIm

hxxp:// iuyouth.hcmiu.edu[.]vn /mVayv0I7S

hxxp:// exploraverde[.]co /mmR4TaGu8

hxxp:// turkaline[.]com /zGiFH0X

Then the script saves the binary to the Windows temporary folder and executes it.

The binary files at the end of the URL are Emotet - a notorious banking trojan that rolls out different behavior such as info-stealing modules for emails and browsers.

https://www.virustotal.com/gui/file/5f8aee58ec2f1342e84ed02d276c4369b1c2359a5e57ead9269bc6fa5d67ce59/detection