• 4 heures
  • Facile

Partez à la chasse aux failles

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Si vous avez déjà créé votre site et qu'il est monstrueusement grand, la chasse aux failles peut s'avérer longue et fastidieuse. Surtout si vous ne savez pas comment vous y prendre ! Et même après inspection, il est fort possible que vous en ayez oublié quelques-unes. Je vais donc vous montrer comment détecter certaines failles, puis je vais vous présenter quelques outils qui vont vous aider dans la recherche de vulnérabilités.

Nous allons donc effectuer des "tests d'intrusion" (aussi appelé pentesting). Le principe est relativement simple : on considère le serveur comme une boîte. Il existe trois types de tests d'intrusion différents. 

  • Le test en boîte noire (black box) : on ne voit pas ce qu'il y a dans la boîte. Le testeur se met à la place d'un hacker. Il doit tenter d'infiltrer le service sans connaître le code qui se cache derrière.

  • Le test en boîte grise (grey box) : on voit une partie de ce qui se cache dans la boîte. Le testeur dispose d'un accès classique au site avec un nombre restreint d'informations.

  • Le test en boîte blanche (white box) : on voit tout ce qui se cache dans la boîte. Le testeur a accès à toutes les données du site (code source, FTP, architecture des répertoires, etc.).

Dans ce chapitre, nous n'allons pas littéralement pirater votre site, mais nous allons apprendre à mettre le doigt là où ça fait mal. On va se mettre à la place d'un hacker et procéder grosso modo comme lui le ferait. Je ne parlerai que de test en boîte noire ici. Pour analyser votre code, détecter la présence de failles et sécuriser le tout, je vous invite à consulter les chapitres de la partie 1 correspondants aux failles en question.

Prérequis

Avant toute chose, j'aimerais vous parler de certains outils, et notamment de Vega. Vega est un logiciel capable de scanner votre site, à la recherche d'éventuelles failles de sécurité. Bon, bien que cet outil soit vraiment efficace, il ne permet que de trouver les failles les plus critiques et peut parfois en louper. Ce n'est pas parce que le scan n'a rien donné qu'il n'y a aucune faille ! Cet outil est dédié à compléter vos recherches personnelles, non à les remplacer. 

Ce logiciel vous permettra également de corriger toutes sortes d'erreurs anodines (ou non) comme détecter des protocoles obsolètes, des répertoires non protégés, des cookies sans HTTPOnly Flag, etc.

Bien évidement, il en existe de nombreux autres, plus ou moins complets et plus ou moins complexes à utiliser. Sachez cependant que les outils de fuzzing (technique pour tester des logiciels) les plus performants sont souvent développés pour tourner sous GNU/Linux.

Si vous avez pour projet d'acquérir un bon niveau dans le domaine de la sécurité informatique, il est important de maîtriser un des systèmes d’exploitation fonctionnant avec le noyau Linux. Eh oui les amis, bien que les distributions Linux n'aient pas une bonne réputation parmi le commun des mortels, ce sont des mines d'or pour toute personne qui s'intéresse de près ou de loin à l'informatique. Je vous conseille donc vivement de vous familiariser avec une distribution, cela vous sera très utile. De toute façon, même si vous êtes réticent, je suis intimement persuadé qu'après la lecture de ce chapitre, vous aurez compris à quel point cela peut vous simplifier la vie. :)

Ubuntu est selon moi un bon choix pour des débutants qui souhaitent appréhender l’environnement Linux, bien que certaines distributions (comme Kali) soient plus adaptées pour ce genre de test. Debian et Fedora sont également des distributions très complètes, qui ont déjà fait leurs preuves dans le milieu professionnel.

Installation de Linux

Si vous êtes très attaché à votre Windows (ou même à votre OS X, personne n'est parfait), que vous n'avez qu'un ordinateur, mais que vous voulez quand même découvrir Linux, n'ayez crainte ! Il existe des solutions pour vous.

Le dual-boot

Cette technique est utilisable sur Windows et Mac (sur les modèles équipés d'un processeur Intel, donc tous ceux construits après 2006). Cela consiste en fait à installer un deuxième OS sur votre ordinateur. Au démarrage, vous aurez alors le choix entre vos deux OS (ou plus !).

Il vous suffit d'avoir une connexion Internet, une clé USB ou un CD, et au moins une dizaine de Go libre sur votre disque dur.

  • Tout d'abord, rendez-vous sur le site officiel de l'OS que vous souhaitez télécharger. Dans mon cas, je téléchargerai Ubuntu, mais la procédure est la même pour toutes les distributions.

  • Cliquez sur l'onglet "Télécharger Ubuntu".

  • Téléchargez l'image disque (.iso) de la distribution.

Pour les 64 bits, cliquez simplement sur "Télécharger". Pour les 32 bits, cliquez sur "Plus d'options" et cochez la case 32 bits.

Vous pouvez également choisir de le télécharger avec BitTorrent, à votre guise.

  • Une fois l'image disque en votre possession, il vous faut maintenant un logiciel permettant de transformer votre clé USB (ou CD) en clé bootable, c'est-à-dire qu'au démarrage votre ordinateur sera en mesure de démarrer dessus. Il en existe des centaines disponible sur Internet. Pour ma part, j'utilise UNetbootin qui est très intuitif avec une interface très épurée.

  • Maintenant que votre logiciel est téléchargé, assurez-vous que votre périphérique contient suffisamment de mémoire pour contenir l'image disque (environ 1 Go pour Ubuntu si je ne m'abuse). Puis formatez-le (clic droit, "formater").

  • Lancez le logiciel, sélectionnez votre .iso, votre périphérique et lancez l'opération.

  • Maintenant la partie la plus délicate. Éteignez votre ordinateur, connectez votre périphérique et démarrez à nouveau l'ordinateur. À ce moment, il va falloir être très rapide ! Pendant quelques secondes, une image apparaît (comme à chaque démarrage) avec des options proposées en bas. Appuyez sur la touche correspondant à "Boot option", généralement F8, F11ou F12. À l'aide des flèches de votre clavier, sélectionnez votre périphérique et validez.

  • Maintenant deux choix s'offrent à vous. Si vous ne souhaitez pas directement installer Ubuntu sur votre ordinateur, vous avez la possibilité de l'essayer sans rien modifier sur votre disque. Sinon, vous pouvez l'installer. La première option est vraiment préférable pour les débutants. Vous aurez un premier aperçu du système, et vous aurez ensuite la possibilité de l'installer à partir de cette session live.

  • Une fois l'installation lancée et les formalités remplies (langage, etc.), un choix crucial s'offre à vous. Il ne faut surtout pas vous tromper ici. Si vous souhaitez installer Ubuntu en plus de votre OS actuel, sélectionnez l'option "Installer Ubuntu à côté des autres". Si vous voulez n'installer qu'Ubuntu et supprimer tous vos fichier actuels (OS, musiques, vidéos, logiciels... sélectionnez l'option "Effacer le disque et installer Ubuntu". Cette opération est irréversible et effacera votre partition Windows/Mac donc réfléchissez bien avant de vous lancer.

  • Pour la suite, rien de bien compliqué. Selectionnez la part de votre disque que vous souhaitez allouer à Ubuntu, votre langue, vos données personnelles, et lancez l'installation.

  • Au terme de l'installation, l'installateur vous demandera de redémarrer l'ordinateur. Faites-le sans broncher. Un menu vous proposant le choix entre vos différents OS devrait alors s'afficher.

La machine virtuelle

La machine virtuelle, plus couramment appelée VM (Virtual Machine) est un ordinateur virtuel que vous allez générer sur votre propre ordinateur. C'est un ordinateur dans l'ordinateur. Cette technique est un peu moins efficace et propre que la première dans la mesure ou les deux OS (votre système d'exploitation + la machine virtuelle) doivent de partager la mémoire vive, le processeur, etc. Mais elle fonctionne très bien et peut s'avérer très pratique dans certains cas.

  • Commencez par suivre les étape de la technique précédente pour télécharger l'iso. Arrêtez-vous après la création de la clé bootable.

  • Téléchargez VirtualBox, installez-le et lancez-le.

  • Cliquez sur "Nouvelle", puis indiquez le nom que vous souhaitez lui donner, l'OS, et la version.

  • Sélectionnez ensuite la taille de la mémoire vive que vous souhaitez lui allouer. Cela dépend de ce que vous recherchez. Plus vous lui en donnez, plus la machine sera puissante. Ne lui donnez pas non plus 90% de votre mémoire, vous risquez d'être déçu (je parle par expérience...). Personnellement, je lui alloue 3 Go sur mes 8 Go : ça tourne suffisamment bien sans trop altérer les performances de mon PC. À vous d'équilibrer selon vos besoins.

  • Créez un disque dur virtuel qui vous permettra de stocker quelques fichiers (avec taille fixe ou dynamique).

  • Démarrez la machine virtuelle et sélectionnez votre périphérique comme disque de démarrage.

  • Utilisez le système d'exploitation installé sur la machine virtuelle normalement.

La XSS

Pour la XSS, il existe de nombreux cas différents. Tout paramètre injectable est potentiellement sensible à la XSS (formulaire de contact, barre de recherche, formulaire d'inscription…). Pour le savoir, il suffit d'injecter du code HTML et JavaScript et observer. Prenons pour exemple une barre de recherche.

Injectons un code quelconque. Un alert() JavaScript fera très bien l'affaire.

Si votre site est faillible, une jolie alerte apparaîtra au milieu de votre écran.

Sinon vous devriez obtenir quelque chose comme ça :

Mais ne vous réjouissez pas trop vite. Cela prouve que vous êtes protégé contre un type de XSS mais pas contre tous. Il existe des techniques beaucoup plus évoluées pour exploiter cette faille et bypasser toutes sorte de filtres. Vous trouverez sur Owasp une liste très complète des toutes les techniques utilisées pour contourner ces filtres.

Je vous ai donné un exemple, maintenant à vous de tester avec d'autres types d'injection.

Il existe également un petit outil nommé xsser qui s'utilise en ligne de commande. Il dispose également d'une interface graphique pour ceux qui ne seraient pas familiers des terminaux. Cet outil développé en Python est extrêmement puissant et capable de contourner de nombreux filtres anti-injection. Vous pouvez retrouver toute la documentation et les liens de téléchargement à cette adresse.

La faille include

Intéressons-nous un peu à la fonction include(). Prenons le cas d'un site qui inclut dynamiquement une page.

www.monsite.fr/index.php?page=blog.php

La page doit donc se construire autour d'une fonction include, plus ou moins comme cela :

<?php

 include($_GET['page']);

?>

Essayez alors de remplacer de mettre pour valeur "http://www.google.com". Si rien ne se passe, vous avez correctement protégé le paramètre. Sinon, Google s'exécute sur votre serveur… Posez-vous des questions quant à la sécurité de votre site !

L'injection SQL

Un grand classique. Le risque d'injection SQL est partout là ou SQL est. Formulaire d'inscription, de connexion, barre de recherche, pagination…

Prenons l'exemple d'un formulaire de connexion.

Pour le mettre à l'épreuve, contentons-nous d'injecter des guillemets simples dans "Email" et des guillemets doubles dans password (par exemple).

Si tout est bien protégé vous devriez avoir un charment message d'erreur du type

Par contre, si vous obtenez une erreur MySQL qui ressemble à ça :

Warning: mysql_numrows(): supplied argument is not a valid MySQL result resource

autant vous dire que ça sent pas très bon et que vous devriez aller faire un petit tour dans la partie 1 de ce cours pour réviser un peu votre code…

Il existe un outil très puissant pour tester la présence de faille SQL nommé sqlmap. Totalement open source, il saura vous dire si le paramètre est injectable ou non en quelques minutes seulement. Pour lancer le scan :

sqlmap -u http://monsite.com/index.php?page=

WordPress

Si vous utilisez WordPress, méfiez-vous ! On a trop souvent tendance à croire que comme c'est un CMS très reconnu, il est invincible. Que nenni ! Il est même plus en danger que les autres, et cela est notamment dû au fait qu'il y ait un très grand nombre de thèmes et/ou plugins développés par des indépendants. Dans la majorité des cas, on ne parlera pas de "faille", mais plutôt d'exploit.

Si vous voulez vérifier la sécurité de votre site sous WordPress, je vous conseille vivement WPScan, un outil développé pour tourner sous l'ensemble des distributions Linux (eh oui, je vous avais prévenus). Fournissez-lui simplement le nom de domaine de votre site, et il se chargera de voir si vous utilisez un plugin qui contient une faille connue. Il vous fournira alors plusieurs liens avec une explication détaillée du problème et les mesures à prendre.

Procédure d'installation de WPScan

Ubuntu < 14.04

sudo apt-get install libcurl4-openssl-dev libopenssl-ruby libxml2 libxml2-dev libxslt1-dev ruby-dev
git clone https://github.com/wpscanteam/wpscan.git
cd wpscan
sudo gem install bundler &amp;&amp; bundle install --without test

Ubuntu >= 14.04

sudo apt-get install libcurl4-openssl-dev libxml2 libxml2-dev libxslt1-dev ruby-dev build-essential
git clone https://github.com/wpscanteam/wpscan.git
cd wpscan
sudo gem install bundler && bundle install --without test

Debian

sudo apt-get install git ruby ruby-dev libcurl4-openssl-dev make
git clone https://github.com/wpscanteam/wpscan.git
cd wpscan&lt;br /&gt;sudo gem install bundler
bundle install --without test -

Fedora

sudo yum install gcc ruby-devel libxml2 libxml2-devel libxslt libxslt-devel libcurl-devel patch
git clone https://github.com/wpscanteam/wpscan.git
cd wpscan
sudo gem install bundler &amp;&amp; bundle install --without test

Utilisation de WPScan

Commençons par vérifier que la base de données de WPScan est à jour :

ruby wpscan --update

Nous allons maintenant lancer le scan de votre blog pour lister les plugins vulnérables. Je me permets de vous répéter qu'avant de lancer ce genre de scan, vous devez être absolument certain d'avoir ce genre de droits sur l'application concernée : sinon ce genre de pratique constitue une violation de la loi.

ruby wpscan.rb --url www.monsite.com --enumerate

Voilà, laissez le scan se faire tranquillement. Si des plugins vulnérables sont trouvés, ils seront listés avec des liens de documentation. Vous aurez une explication détaillée du problème ainsi que des indications sur comment s'en protéger.

Exemple de certificat de réussite
Exemple de certificat de réussite