|
Injecteur de librairies DLL dans un processus distant sous Microsoft Windows Vista 32 bits
Par Rédaction,
secuobs.com
Le 29/01/2009
Résumé : Contournement du système de randomisation ASLR, preuve de concept et principes de l'injection de librairies de liens dynamiques dans un processus distant exécuté sur un système Microsoft Windows Vista pour des architectures 32 bits. - Lire l'article
Nicolaou George ( Astalavista – lien ) vient de publier un papier de recherche portant sur l’injection de bibliothèques de liens dynamiques ( lien et lien ) au sein des systèmes d’exploitation de type Microsoft Windows Vista. Le document en question traite plus particulièrement du cas de ces systèmes lorsqu’ils régissent des ordinateurs équipés de microprocesseurs présentant une architecture 32 bits ( lien ).
La méthodes décrite dans ce document permet d’effectuer des injections de librairies dynamiques ( DLL - lien ) en prenant en compte la présence du système de randomisation des espaces d’adressage mémoire ASLR ( voir notre dossier - lien http interne url:[click] ) sur les systèmes Microsoft Windows Vista. Cette randomisation est censée ( voir la vidéo - lien ) permettre aux systèmes, qui intègrent ASLR, de complexifier l’exploitation des vulnérabilités pouvant être à l’origine d’injections de DLL (ou autres), comme les débordements de mémoire tampon ( Buffer Overflow - lien ).
Pour comprendre cette technique d’injection, il est nécessaire de différencier conceptuellement les processus des threads, un processus pouvant notamment contenir un ou plusieurs threads ( multi-threads - lien ). Dans un processus, chacun des threads, que l’on peut définir comme des processus « légers », représente un fil d’exécution parallèle des instructions du programme relatif à ce processus. A savoir que les différents threads d’un processus partagent entre eux le même espace d’adressage mémoire, ce qui n’est pas le cas des processus qui bénéficient chacun d’un espace propre.
L’analyse minutieuse du code en question peut permettre de mieux comprendre les mécanismes qui régissent l’injection de librairies dynamiques au sein des systèmes Microsoft Windows Vista. Concrètement, le concept sous-jacent à cette technique consiste à créer à l’aide de la fonction CreateRemoteThread ( lien ) un nouveau thread à l’intérieur d’un processus distant déjà existant, « explorer.exe » par exemple ( voir la vidéo - lien ). Grace à la version ANSI ( lien ) de la fonction LoadLibrary ( lien ), il est alors possible via ce nouveau thread distant d’injecter la librairie souhaitée. A noter que LoadLibraryA est appelé avec un seul argument correspondant au chemin d’accès de la librairie à injecter.
Pour ce faire, il est nécessaire de contourner le système de randomisation ASLR, l’adresse mémoire de la librairie kernel32.dll, qui contient la fonction LoadLibraryA, étant fort probablement modifiée de façon « aléatoire » par ASLR à chaque redémarrage de la machine. L’adresse mémoire de kernel32.dll étant la même dans le processus d’injection que dans le processus cible, il est alors possible d’utiliser les fonctions GetProcAddress ( lien ) et GetModuleHandle ( lien ) afin de récupérer cette adresse, ou le déplacement ( offset - lien ) correspondant dans la mémoire, afin d'injecter ensuite la DLL souhaitée par l'intermédiaire de LoadLibraryA.
Lors de l’utilisation de LoadLibraryA, le chemin d’accès à la libraire, que l’on souhaite injectée, ne peut cependant pas être utilisé directement en tant qu’argument tant qu’il ne réside pas en tant que valeur à l’intérieur de l’espace d’adressage mémoire du processus distant ciblé. Il est donc impératif d’appeler la fonction VirtualAllocEx ( lien ) afin d’allouer la mémoire nécessaire dans le processus distant pour ensuite y fixer, à l’aide de WriteProcessMemory ( lien ), la valeur équivalente au chemin d’accès de cette librairie à injecter.
Une fois l’injection réalisée, la fonction principale de la librairie injectée va recevoir la notification DLL_PROCESS_ATTACH ( lien ) et son exécution pourra alors commencer. Cette technique peut par ailleurs être utilisée de façon similaire afin de placer directement un Shellcode ( voir notre dossier - lien ) au lieu de la DLL injectée. Le Shellcode est placé en tant qu'arguments pour la fonction WriteProcessMemory en lieu et place du chemin d'accès à la DLL du cas exposé. La fonction CreateRemoteThread doit alors être ici appelée avec une adresse de départ lpStartAddress pointant vers l'adresse mémoire où WriteProcessMemory a placé le Shellcode.
Une preuve de concept ( POC - lien ) est fournie, en tant qu’exécutable compilé, dans l’archive ( lien ) qui contient également le papier de recherche. Les codes relatifs à ce POC sont aussi fournis dans ce document, ils ont été développés en langage assembleur à l’aide d’un environnement intégré de développement spécifique ( MASM32 avec WinASM IDE - lien ).
Source : PacketStorm ( lien ) et IT Solutions Knowledge Base ( lien )
- Article suivant : Les serveurs DNS toujours utilisés pour les attaques DDoS basées sur l'usurpation IP
- Article précédent : Le cloud computing est-il sûr ?
- Article suivant dans la catégorie Outils : Metascanner un scanner d'exploitabilité pour interfacer NMAP et Metasploit
- Article précédent dans la catégorie Outils : Perspectives, une extension firefox pour vérifier la validité des certificats
Mini-Tagwall des articles publiés sur SecuObs : | | | | sécurité, exploit, windows, attaque, outil, microsoft, réseau, audit, metasploit, vulnérabilité, système, virus, internet, usbsploit, données, source, linux, protocol, présentation, scanne, réseaux, scanner, bluetooth, conférence, reverse, shell, meterpreter, vista, rootkit, détection, mobile, security, malicieux, engineering, téléphone, paquet, trames, https, noyau, utilisant, intel, wishmaster, google, sysun, libre |
Mini-Tagwall de l'annuaire video : | | | | curit, security, biomet, metasploit, biometric, cking, password, windows, botnet, defcon, tutorial, crypt, xploit, exploit, lockpicking, linux, attack, wireshark, vmware, rootkit, conference, network, shmoocon, backtrack, virus, conficker, elcom, etter, elcomsoft, server, meterpreter, openvpn, ettercap, openbs, iphone, shell, openbsd, iptables, securitytube, deepsec, source, office, systm, openssh, radio |
Mini-Tagwall des articles de la revue de presse : | | | | security, microsoft, windows, hacker, attack, network, vulnerability, google, exploit, malware, internet, remote, iphone, server, inject, patch, apple, twitter, mobile, virus, ebook, facebook, vulnérabilité, crypt, source, linux, password, intel, research, virtual, phish, access, tutorial, trojan, social, privacy, firefox, adobe, overflow, office, cisco, conficker, botnet, pirate, sécurité |
Mini-Tagwall des Tweets de la revue Twitter : | | | | security, linux, botnet, attack, metasploit, cisco, defcon, phish, exploit, google, inject, server, firewall, network, twitter, vmware, windows, microsoft, compliance, vulnerability, python, engineering, source, kernel, crypt, social, overflow, nessus, crack, hacker, virus, iphone, patch, virtual, javascript, malware, conficker, pentest, research, email, password, adobe, apache, proxy, backtrack |
|
|
|
|
|