Incursion dans le piratage sans malware, Partie I

malware

Lorsque j’ai commencé à étudier le thème des hackers qui « vivent de la terre », c’est-à-dire qui utilisent les outils et logiciels qu’ils trouvent sur la machine de leur victime, j’étais loin de me douter que cela deviendrait une tendance majeure du piratage. Ce phénomène fait maintenant les gros titres des articles technologiques , et les professionnels de la sécurité disent qu’il est en train de s’amplifier. Le moment est donc particulièrement propice pour écrire une série de billets IOS sur le sujet.

Également appelé attaque sans fichier (file-less) ou sans empreinte (zero-footprint), ce piratage sans malware utilise généralement PowerShell sur les systèmes sous Windows pour exécuter de manière furtive des commandes visant à rechercher et exfiltrer du contenu ayant de la valeur. Pour les équipes de sécurité informatique chargées de surveiller les activités de piratage, les attaques sans fichier sont très difficiles à localiser, car elles échappent souvent aux antivirus et autres systèmes de détection basés sur une signature.

En bref, une défense classique n’est pas vraiment armée pour parer à ce type d’attaque. Bien sûr, il existe des logiciels de sécurité capables d’identifier les activités malveillantes qui se déroulent dans les systèmes de fichiers.

D’ailleurs, j’ai déjà évoqué certaines de ces idées dans ma série de billets sur l’obfuscation PowerShell, mais d’un point de vue plus théorique. Par la suite, j’ai découvert le site d’Hybrid Analysis, sur lequel vous pouvez trouver des échantillons de malwares capturés en situation réelle.

PowerShell sauvage

Je me suis dit que ce serait l’endroit parfait pour rechercher des spécimens de malware sans fichier. Je n’ai pas été déçu. Au passage, si vous voulez vous lancer dans votre propre chasse aux programmes malveillants, vous devez préalablement montrer patte blanche aux spécialistes d’Hybrid Analysis pour qu’ils sachent que vous êtes du côté des gentils. En ma qualité de blogueur spécialisé dans la sécurité, cela n’a été qu’une formalité. Je suis sûr qu’il en sera de même pour vous.

En plus de fournir des échantillons, ils proposent aussi de précieuses informations sur ce que fait le malware. Hybrid Analysis exécute le programme malveillant dans son propre bac à sable et surveille les appels au système, les processus lancés et l’activité Internet, tout en extrayant les chaînes de texte suspectes.

Dans le cas des fichiers binaires et autres exécutables pour lesquels vous ne pouvez même pas regarder le code réel, cette technique de conteneur permet à HA de décider si la menace présente un danger ou si elle est simplement suspecte en raison de son activité d’exécution. Ensuite Hybrid Analysis note l’échantillon.

J’ai pu voir le code réel du PowerShell sans malware et des autres échantillons de script (Visual Basic, JavaScript, etc.) que je recherchais. Je suis par exemple tombé sur cette créature PowerShell :

malware powershell

Vous aussi, vous pouvez exécuter le PowerShell codé en base64 pour échapper à la détection. Notez l’utilisation du paramètre Noninteractive dans cet échantillon réel fourni par Hybrid Analysis.

Si vous avez déjà lu mes billets sur l’obfuscation, vous savez que le paramètre -e indique que ce qui suit est codé en base64. Hybrid Analysis fournit aussi le PowerShell décodé. Si vous voulez essayer de décoder vous-même le PowerShell en base64, vous pouvez exécuter cette commande : $DecodedText = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($EncodedText))

Allons encore plus loin

J’ai décodé le script à l’aide de cette technique et vous pouvez voir le malware PowerShell sous forme de texte brut ci-dessous.

malware PowerShell

Notez la sensibilité temporelle de ce programme malveillant PowerShell et l’utilisation de cookies pour transmettre encore plus d’informations. J’ai modifié cet échantillon réel dans le cadre de mes propres tests.

J’étais un peu nerveux à l’idée de manipuler cette menace active sur mon propre ordinateur portable. Note à l’intention du service de sécurité informatique de Varonis : j’ai utilisé une console PowerShell en ligne ainsi que mon propre environnement AWS indépendant. Alors pas de stress, OK ?

Soit dit en passant, nous avons déjà vu ce type d’attaque — dans la série de billets sur l’obfuscation PowerShell — dans laquelle le PowerShell codé en base64 tire lui-même d’autres éléments de la menace depuis un autre site pour créer un objet Net Framework WebClient se chargeant de faire le gros du travail.

Pourquoi cette approche ?

Au niveau du logiciel de sécurité qui analyse le journal des événements Windows, le codage base64 empêche la fonction chargée d’établir des correspondances entre les modèles d’après le texte de procéder facilement à la détection / correspondance en fonction, par exemple, de la chaîne « WebClient ». Et puisque la partie véritablement dangereuse du malware est alors téléchargée et injectée dans l’appli PowerShell elle-même, cette approche permet d’échapper totalement à la détection. Enfin, c’est ce que je croyais.

Il s’avère qu’en activant une journalisation Windows PowerShell plus avancée (voir mon billet), la chaîne téléchargée apparaît dans le journal des événements. Je félicite Microsoft (comme d’autres avant moi !) pour ce niveau de journalisation supplémentaire.

Toutefois, les hackers ont répondu à cette amélioration en codant en base64 le PowerShell téléchargé depuis le site distant de façon qu’il n’apparaisse pas dans le journal des événements Windows comme dans l’échantillon codé ci-dessus. Logique, non ?

Le tout saupoudré de script

Les échantillons réels d’Hybrid Analysis poussent le concept un peu plus loin. Les hackers sont malins : ils dissimulent cette attaque PowerShell dans des macros Microsoft Office écrites en Visual Basic et dans d’autres scripts. L’idée, c’est que la victime reçoive un e-mail de phishing émanant par exemple de FedEx, avec en pièce jointe un document Word présenté comme étant une facture. La personne clique sur le fichier .doc qui lance une macro. Celle-ci lance à son tour le PowerShell réel.

Souvent, même le script Visual Basic est obfusqué, de manière à échapper aux outils antivirus et antimalware.

Oui, c’est compliqué et diabolique. Et je ne fais qu’effleurer le sujet.

Dans le même esprit, j’ai décidé d’intégrer, à titre d’exercice, le PowerShell ci-dessus dans du JavaScript obfusqué. Voici le résultat de mes travaux pratiques de piratage :

javascript

JavaScript obfusqué dissimulant le PowerShell codé. Bien entendu, les vrais hackers font cela avec plus d’habileté.

J’ai emprunté une technique aux échantillons obtenus à partir de cas réels : l’utilisation de Wscript.Shell pour lancer le PowerShell codé réel. C’est de cette façon que vous sortez de l’environnement de script pour interagir avec le reste du système.

Au passage, JavaScript est à lui seul un vecteur de fourniture de malware. De nombreux environnements Windows sont dotés par défaut du Windows Script Host, qui exécutera directement JS. Dans ce scénario, le malware JS servant de contenant est joint sous forme de fichier portant le suffixe .doc.js. Windows n’affichera que le premier suffixe et le fichier apparaîtra à la victime sous forme de fichier .doc. L’icône JS est représentée par un parchemin. Comme on peut s’en douter, les gens cliquent sur cette pièce jointe en pensant que c’est un document.

Ne cliquez pas sur cette icône JS qui ressemble à un parchemin ! Sinon, le programme malveillant se téléchargera. Vous aurez été prévenu.

Pour mon propre malware JavaScript servant de contenant, j’ai modifié l’échantillon PowerShell ci-dessus de façon à télécharger un script depuis un site Web que je contrôle. Le script PS distant imprime simplement « Programme malveillant diabolique ».

Rien de bien méchant.

Bien entendu, les vrais hackers veulent accéder à un ordinateur portable ou à un serveur, par le biais, par exemple, d’un shell…

Dans le prochain billet, j’expliquerai comment procéder en utilisant PowerShell Empire, auquel j’ai déjà consacré un billet.

Nous sommes probablement allés un peu trop loin pour un billet d’introduction. Je vais donc vous laisser reprendre votre souffle, et je reviendrai là-dessus une prochaine fois. Le sujet étant à présent bien dégrossi, nous pourrons commencer à comprendre dans le détail les attaques sans malware que l’on trouve en conditions réelles.