Poweliks : un malware persistant sans fichier
Une toute nouvelle approche dans la conception d'un virus

Le , par LittleWhite, Responsable 2D/3D/Jeux
Nous savons tous, les antivirus scannent des fichiers. En effet, les virus ont l'habitude d'être présent sur le système sous la forme d'un fichier, il était donc logique que les antivirus scannent les fichiers pour rechercher ceux-ci. Mais, voici un malware qui change complètement la donne.
Poweliks est un virus qui réside dans la base de registre de Windows. Il est persistant, car, en effet, il est sauvegardé (contrairement à un virus en mémoire vive, qui serait supprimé après un redémarrage). Voici comment il fonctionne :
  • son point d'entrée est semblable à n'importe quel autre logiciel malveillant : un document Word malicieux diffusé par courriel. Il exploite une faille de Microsoft Word et ainsi, créé une clé dans la base de registre ;
  • la clé se trouve dans une section permettant d'être réactivée à chaque redémarrage. Pour ne pas être détectée, elle est cachée/obfusquée ;
  • le décodage de la clé permet de découvrir deux aspects : la code s'assure que le système possède Microsoft PowerShell d'installé et un code supplémentaire ;
  • le code additionnel est un script PowerShell encodé en Base 64 qui appel et exécute le shellcode (assembleur) ;
  • dernière étape, le shellcode exécute un binaire. Dans le cas analysé, le binaire essaie de se connecter à une adresse IP présente en dure pour recevoir de nouvelles commandes (contrôle à distance), mais l'attaquant peut très bien déclencher n'importe quelle autre action ;
  • toutes les activités sont stockées dans la base de registre. Il n'y a toujours aucune fichier de créé.


Pour se protéger d'une telle attaque, les développeurs d'antivirus devraient bloquer le fichier Word avant exécution (ou avant la réception dans la messagerie), ou encore, ils devraient détecter l'utilisation de la faille de Word durant l'exécution ou pour finir surveiller la base de registre d'un comportement suspect et bloquer le processus correspondant.

Analyse

Pour que Poweliks soit persistant, il faut qu'il s'installe dans la base de registre et plus précisément, dans :
Au vu du caractère final, on peut sentir que les choses commencent bien.

La clé contient :
Code javascript : Sélectionner tout
1
2
3
4
5
runddl32.exe  javascript:"\..\mshtml,RunHTMLApplication"; 
document.write("<script language=jscript.encode>"+ 
	(new ActiveXObject("WScript.Shell")). 
	RegRead("HKCU\\software\\microsoft\\windows\\currentversion\\run\\")+ 
	"</script>")

Qui permet d'ouvrir et exécuter le contenu encodé de la clé :
\\HKCU\software\microsoft\windows\currentversion\run\(default)

Le caractère spécial utilisé à la fin de la clé initiatrice du lancement du logiciel malveillant permet de cacher la clé des logiciels d'administrations. Par exemple, Regedit (Outil par défaut de Windows pour la base de registre) ne peux lire les caractères non ASCII et donc, ne peut pas ouvrir la clé et l'utilisateur ne peux pas voir la clé.

Ensuite, pour l'exécution du code, la technique utilisée rappelle les poupées russes. Le code initial contient le code et l'exécute et ce code fait de même avec ce qui suit et ainsi de suite. On démarre avec du JScript, puis un script PowerShell puis un shellcode contenant le code malicieux de Poweliks.

Étape 1 (JScript)

La première étape est la clé de la base de registre, en JScript encodé :

La technique d'encodage provient de Microsoft qui protège ainsi son code source. Toutefois, un chercheur a trouvé comment décoder ce type de message permettant de découvrir que :
  • le script vérifie si PowerShell est installé. Dans le cas contraire, il le télécharge et l'installe ;
  • il exécute le code qui suit, stocké en base64.

Le code qui suit est évidemment un script PowerShell. Toutefois, PowerShell possède une protection bloquant l'exécution de script inconnu. Mais cela n'a pas suffit, car le créateur du virus fait croire à PowerShell que le script est exécuté en mode interactif et peut donc être exécuté sans que l'utilisateur le sache.

Étape 2 (PowerShell)

Le script PowerShell contient une variable stockant un shellcode en base64. Il utilise VirtualProtect() pour faire que la mémoire soit exécutable et CallWindowProcA() pour exécuter le shellcode.

Étape 3 (Shellcode assembleur)

Le shellcode alloue de la mémoire avec VirtualAlloc(), ce copie (lui et ses données) à l'adresse mémoire 0x1104 et exécute le code copié.
À l'adresse 0x1104 se trouve un code exécutable (entête MZ) avec deux chaines intéressantes : MPRESS1 et MPRESS2, provenant d'un compresseur d'exécutable : MPRESS.
Ce code se connecte à deux adresses IP au Kazakhstan pour recevoir des commandes. Au moment de l'analyse les IPs étaient inaccessibles.

Le malware est très puissant car il peut télécharger n'importe quel code et peut donc ce qu'il veut : espionnage, cheval de troie, vol, installation d'autres logiciels malveillants...

Conclusion

Poweliks est un puissant logiciel malveillant, dont la conception à ralenti la recherche et la compréhension du code. Elle expose une toute nouvelle technique où l'intégralité du logiciel est en mémoire tout en ayant la capacité de survivre aux redémarrages grâce à la base de registre. De plus, l'utilisation d'un caractère non ASCII empêche de très nombreux outils d'afficher la clé de registre, cachant ainsi le logiciel malveillant. Finalement, il peut démarrer n'importe quel logiciel sur un système infecté.

Votre opinion

Comment pensez-vous vous protéger de Poweliks ?
Que pensez-vous de ce niveau de sophistication dans les logiciels malveillants ?

Source

Analyse de Paul Rascagnères


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de Kropernic Kropernic - Membre expert http://www.developpez.com
le 06/08/2014 à 11:39
Le chemin dans la base de registre est un tantinet petit à mon goût ^^.
Avatar de LittleWhite LittleWhite - Responsable 2D/3D/Jeux http://www.developpez.com
le 06/08/2014 à 12:06
En effet.
C'est corrigé
Avatar de Bestel74 Bestel74 - Membre confirmé http://www.developpez.com
le 06/08/2014 à 12:11
Je ne comprends pas le terme "sans fichier" de l'annonce, il est bien stocké quelque part non ?
Qu'est-ce qui empêche un anti-virus de scanner le répertoire "%SystemRoot%\System32\Config", et ainsi le détecter ?
Avatar de LittleWhite LittleWhite - Responsable 2D/3D/Jeux http://www.developpez.com
le 06/08/2014 à 12:13
Si vraiment vous scannez le dossier de la base de registre (je ne sais plus sous quelle forme elle est réellement stockée) et que l'antivirus repère un virus, il fait quoi ? Il supprime le fichier de la base de registre ?
Avatar de Bestel74 Bestel74 - Membre confirmé http://www.developpez.com
le 06/08/2014 à 12:19
Citation Envoyé par LittleWhite  Voir le message
Si vraiment vous scannez le dossier de la base de registre (je ne sais plus sous quelle forme elle est réellement stockée) et que l'antivirus repère un virus, il fait quoi ? Il supprime le fichier de la base de registre ?

La suppression de cette clé n'est pas censé affecter le système, si ?

EDIT: je parle bien de supprimer la clé, et non pas le fichier qui l'a contient
Avatar de LittleWhite LittleWhite - Responsable 2D/3D/Jeux http://www.developpez.com
le 06/08/2014 à 12:32
L'antivirus ne traite que les fichiers, en tant que fichier (il n'est pas capable d'analyser le contenu afin d'en extraire la partie infectée). S'il voit un fichier dans une DLL du système, il vous demande de supprimer/mettre en quarantaine la DLL. Il n'est pas capable de virer les parties infectés. Il en sera de même pour la base de registre, certes, il se pourrait que cela corresponde à la définition d'un virus, mais ... s'il supprime le fichier, le système est mort.
J'imagine que c'est peut être même pire, car même si on supprime le fichier de la base de registre, durant l'exécution de Windows, Windows à la fermeture va dumper la base de registre qu'il a en mémoire pour la remettre dans un fichier (afin que les données soient sauvegardés). Mais sur cette dernière hypothèse, je ne sais pas si c'est ce qui est fait.
Avatar de Bestel74 Bestel74 - Membre confirmé http://www.developpez.com
le 06/08/2014 à 12:53
Citation Envoyé par LittleWhite  Voir le message
L'antivirus ne traite que les fichiers, en tant que fichier (il n'est pas capable d'analyser le contenu afin d'en extraire la partie infectée). S'il voit un fichier dans une DLL du système, il vous demande de supprimer/mettre en quarantaine la DLL. Il n'est pas capable de virer les parties infectés. Il en sera de même pour la base de registre, certes, il se pourrait que cela corresponde à la définition d'un virus, mais ... s'il supprime le fichier, le système est mort.
J'imagine que c'est peut être même pire, car même si on supprime le fichier de la base de registre, durant l'exécution de Windows, Windows à la fermeture va dumper la base de registre qu'il a en mémoire pour la remettre dans un fichier (afin que les données soient sauvegardés). Mais sur cette dernière hypothèse, je ne sais pas si c'est ce qui est fait.

Je ne vois pas ce qui empêcherait l'antivirus :

- soit de réparer la base de registre
- soit de localiser la clé, et de la supprimer

L'antivirus ne traite que les fichiers => je crois que certains anti-virus "vérifie" déjà les clés non ? En tout cas ça doit être faisable, les anti-adware le font
Avatar de LittleWhite LittleWhite - Responsable 2D/3D/Jeux http://www.developpez.com
le 06/08/2014 à 13:00
Je ne comprends pas le terme "sans fichier" de l'annonce, il est bien stocké quelque part non ?
Qu'est-ce qui empêche un anti-virus de scanner le répertoire "%SystemRoot%\System32\Config", et ainsi le détecter ?

J'ai testé, les fichiers de ce répertoire sont intouchable (que ce soit pour les supprimer ou pour les ouvrir en lecture).

Oui, j'imagine que l'antivirus pourrait scanner la base de registre (pas les fichiers de la base de registre), mais je n'en suis pas sur qu'il soit vraiment capable de trouver le virus pour autant. Ce n'est pas le seul contenu encodé de la base.

Sinon, je suis perdu par votre raisonnement.
Avatar de Bestel74 Bestel74 - Membre confirmé http://www.developpez.com
le 06/08/2014 à 13:01
Citation Envoyé par LittleWhite  Voir le message
J'ai testé, les fichiers de ce répertoire sont intouchable (que ce soit pour les supprimer ou pour les ouvrir en lecture).

Oui, j'imagine que l'antivirus pourrait scanner la base de registre (pas les fichiers de la base de registre), mais je n'en suis pas sur qu'il soit vraiment capable de trouver le virus pour autant. Ce n'est pas le seul contenu encodé de la base.

Sinon, je suis perdu par votre raisonnement.

Non non je parlais bien de scanner la base de registre en elle-même, et ainsi possiblement détecter cette infection
Avatar de brnf1 brnf1 - Membre régulier http://www.developpez.com
le 06/08/2014 à 13:10
En terme de sécurité informatique, la base devrait être de fonctionner sur un compte Utilisateur et non Administrateur.
Si je ne me trompe pas, ce virus ne pourrait donc pas écrire dans la base de registre sans autorisation du compte administrateur.
Mais je me trompe peut être...
Offres d'emploi IT
Data scientist H/F
Safran - Ile de France - Magny-les-Hameaux (78114)
Data scientist inspection générale (H/F)
Société Générale - Ile de France - Hauts-de-Seine
Ingénieur développement logiciel composants biométriques H/F
Safran - Ile de France - Osny (95520)

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique Accueil