I. Les concepts
I.1 Définition
Un serveur Web est un ordinateur, un logiciel ou la combinaison des deux, qui permet de stocker des fichiers (si c’est un ordinateur) d’un site web donné, contrôler la manière d’accéder à ces fichiers (si c’est un logiciel), les traiter et délivrer des pages web dudit site à travers des réponses de requêtes http déjà reçues venant d’un client.
Il utilise le protocole http pour transmettre les requêtes et les réponses de ces requêtes échangées avec un client.
I.2 Les composants d’un serveur web
Un serveur web est principalement composé :
- D’une racine de document : qui permet de stocker les fichiers HTML critiques des pages web d’un nom de domaine ;
- D’une racine du serveur : qui permet le stockage de la configuration du serveur, ses erreurs, ses exécutables et ses fichiers de journalisations ;
- D’un arbre de document virtuel : qui fournit un stockage sur une machine différente ou un disque dur après que le disque original soit rempli ;
- D’un proxy web (mandataire) : qui se situe entre le client et le serveur web pour prévenir les blocages d’adresse IP et garder l’anonymat.
Exemples de serveurs web : IIS (conçu par Microsoft et présent dans Windows Server) et Apache (conçu par la fondation Apache Software et présent dans les systèmes Unix et Windows).
I.3 Problème de sécurité d’un serveur web et impact
Les attaquants ciblent généralement les vulnérabilités de logiciel et les erreurs de configurations pour compromettre les serveurs web.
Les attaques au niveau des réseaux et des systèmes d’exploitation peuvent être défendues grâce aux IDS, aux pare-feu, etc.
Par contre, les serveurs web restent beaucoup plus vulnérables aux attaques, à cause :
- de mauvaises configurations ;
- de mauvaises authentifications ;
- des fichiers inutiles qui y sont stockés ;
- de l’utilisation de l’auto-signé et des signes par défaut ;
- de manque de politique de sécurité appropriée ;
- de conflits sur la sécurité, des services inutilement activés ;
- des paramétrages par défaut.
Tout cela peut influencer la compromission des comptes d’utilisateurs, le vandalisme du site web, les attaques mineures sur les serveurs, l’accès en mode « root » sur d’autres serveurs, des altérations et vols de données.
Par exemple certaines attaques DoS/DDoS permettent d’envoyer de fausses requêtes pour rendre indisponible ou faire crasher un serveur.
II. Les possiblilités d’attaques d’un serveur web
II.1 Attaques liées au DNS
II.1.1 C’est quoi un serveur DNS ?
DNS est un protocole qui permet de traduire un nom de domaine en adresse IP. Il est la base de l’Internet.
Par exemple, si un utilisateur souhaite accéder au site web d’une organisation, il tape le nom de domaine c’est-à-dire le lien du site web (www.exemple.com) sur son navigateur.
S’il envoie cela, on dit qu’il a envoyé une requête au serveur web de l’organisation.
Mais avant que la requête parvienne au serveur web correspondant, l’organisation dispose d’un serveur DNS qui, à son tour, dispose d’un résolveur de nom de domaine qui va transformer le nom de domaine en adresse IP (adresse IP du serveur web correspondant au nom de domaine).
Ensuite, la requête sera transmise à cette adresse.
II.1.2 Détournement de DNS (DNS Hijacking)
Le principe du DNS Hijacking consiste à rediriger les requêtes des utilisateurs vers des serveurs web malveillants que le pirate à mis en place.
Avec le DNS Hijacking, les paramètres du serveur DNS vont être changés par l’attaquant, soit depuis le serveur DNS que le fournisseur d’accès Internet à mis en place pour ces clients, soit depuis le routeur d’accès de sa victime, soit depuis un ordinateur local de sa victime.
L’attaquant change les paramètres (adresses IP des serveurs web) dans le DNS en y mettant des adresses IP qui mènent vers d’autres serveurs malveillants.
II.1.3 Attaques par amplification de serveur DNS (DNS Amplification)
Ce type d’attaque exploite la fonctionnalité de résolution de nom de domaine des serveurs DNS.
En effet, il s’agit d’une attaque par déni de services distribués (DDoS) au cours de laquelle l’attaquant va usurper des adresses IP et utiliser des machines zombies pour envoyer des requêtes au serveur DNS cible.
Ces requêtes peuvent être de petites tailles et ne pouvant pas amplifier ou faire crasher le serveur DNS, mais la quantité volumineuse des réponses de ce dernier va mener vers la saturation de la bande passante ; ce qui va rendre indisponible ce serveur DNS.
Du coup si le serveur DNS est mort, il sera impossible d’accéder au serveur web de l’organisation. Donc aucune page web de l’organisation ne sera disponible.
II.2 Attaques par traversée de répertoires (Directory Traversal)
Le principe de cette attaque est d’explorer à distance les fichiers et répertoires du serveur web afin d’afficher ou de modifier des informations confidentielles.
En effet, le pirate exploite les vulnérabilités du serveur en utilisant les méthodes et des tentatives jusqu’à obtenir un accès à celui-ci. Ensuite il y navigue afin de trouver des fichiers contenant des informations compromettantes pour s’en servir.
Si la tentative d’accès réussit, il peut modifier les configurations du serveur, injecter du code malveillant, etc.
Exemple : il est possible de naviguer sur un serveur vulnérable en utilisant seulement des « ../ » (admin/../../../).
II.3 Attaques par l’homme du milieu (Man In The Middle)
Ce type d’attaque permet à l’attaquant d’intercepter la communication entre le client et le serveur.
Le principe est simple. L’attaquant se met entre le client et le serveur et se comporte comme un Proxy pour intercepter les communications entre ces deux (les requêtes/réponses échangées) afin de les altérer ou les utiliser à des fins malveillantes.
L’attaquant va répondre, à la place du serveur légitime, aux requêtes du client à travers son propre serveur malveillant.
I.4 Attaques par Hameçonnage (Phishing)
Cela consiste à obliger les utilisateurs de se connecter sur un faux site qu’ils croient légitime.
En se connectant à ce site, l’attaquant pourra voler leurs identifiants pour effectuer des opérations malveillantes ou non autorisées.
I.5 Dégradation de site web (Website Defacement)
L’attaque va altérer l’apparence visuelle de la page web d’un serveur en y ajoutant du style de propagande.
I.6 Mauvaise configuration de serveur web
Cela correspond à la faiblesse de la configuration de l’infrastructure web qui peut être exploitée par un attaquant pour lancer diverses attaques telles qu’une attaque par traversée de répertoires, par intrusion et par vol de données sur un serveur.
Les causes de cette faiblesse sont en général :
1) les messages d’erreurs détaillés
2) les noms d’utilisateurs et mots de passe par défaut ou anonymes
3) les exemples de configuration et les fichiers de script
4) les fonctions d’administration à distance
5) l’activation des services inutiles
6) les mauvaises configurations u les certificats SSL par défaut.
Exemples :
Le fichier de configuration de Apache « httpd.conf » donne le statut du serveur, les hôtes en cours d’utilisation du serveur.
Le php.ini donne les messages détaillés des erreurs.
I.7 Attaques par fragmentation de réponse http (HTTP Response Splitting)
L’attaquant va ajouter des données de réponse dans le champ d’entrée afin que le serveur fragmente la réponse en deux. De ce fait, il pourra contrôler la première réponse pour rediriger l’utilisateur vers son site malveillant. L’autre réponse sera rejetée par le navigateur.
I.8 Attaques par empoisonnement de cache d’un serveur web (WEB cache Poisoning)
Les attaquants échangent le contenu mis en cache d’un URL au hasard avec un contenu infecté. De ce fait, les utilisateurs de la source de ce cache vont inconsciemment ce contenu au lieu du vrai contenu.
I.9 Attaque par force brute SSH
SSH permet de se connecter à un hôte via un tunnel crypté afin de transférer des données non cryptées sur un réseau non sécurisé.
Les attaquants peuvent récupérer les informations de connexion SSH afin d’obtenir un accès non autorisé en attaquant brutalement le protocole SSH par la méthode force brute.
I.10 Craquage de mot de passe d’un serveur web
Les mots de passe peuvent être craqués manuellement en le devinant ou en effectuant des attaques de dictionnaire, force brute, etc.
Des outils comme cain & abel, Hydra, medusa, etc. peuvent être utilisés aussi.
Les principales cibles sont les serveurs de messagerie, de fichiers, les tunnels SSH, les serveurs de partages web.
Les attaquants utilisent n’importe quel moyen pour, au final, être considérer comme des utilisateurs valides.
Pour craquer un mot de passe, on peut utiliser BRUTE-FORCE, DICTIONARY ATTACK, HASHCAT, HYDRA, NCRACK, etc.
I.11 Attaques sur les applications web
Les applications web peuvent être attaquées en manipulant cookies, sabotant les paramètres, par détournement de session, par des attaques (DoS, XSS, CSRF, Injection de code SQL, Injection de commande, Injection de fichier, traversée de répertoires), par divulgation de code source, etc.
III. Méthodologie d’attaque sur un serveur web
Il existe une multitude de méthodologie pour attaquer un serveur web.
Ainsi, on peut citer :
- La collecte d’information :
Cette méthodologie est la plus importante dans un processus d’attaque. Il faut d’abord récolter des informations suffisantes sur la cible avant de mener une attaque.
Internet est un bon outil de collecte d’informations avec les forums de discussion, les panneaux d’affichage, etc.
L’outil whois.net (whois lookup) est un bon moyen d’obtenir des noms de domaine et des adresses IP.
Il y aussi le fichier Robots.txt qui contient une liste de fichiers et répertoires de serveur web.
- La reconnaissance de serveur web / capture de bannière :
Il faut collecter des données précieuses au niveau du système comme le système d’exploitation utilisé, les détails sur les comptes d’utilisation, les noms de serveur, les détails sur le schéma de base de données, etc.
L’outil Telnet peut être utilisé pour se connecter au serveur afin de collecter ces informations.
Netcraft, httprecon, ID serve sont de bons outils pour effectuer une reconnaissance.
Autres outils utiles : Recon-ng, Uniscan, Nmap, Satori, Spiderfoot,
- L’énumération de serveur web avec Nmap :
Nmap est un outil très utilisé par les hackers. Il est très avantageux pour la reconnaissance et surtout pour faire une énumération.
Ses commandes, combinées avec ses scripts, servent énormément sur l’énumération d’un site web ou d’un serveur web ciblé.
Citons quelques exemples de commandes nmap :
nmap sV -O -p target IP
nmap -SV –script=http-enum target IP
nmap target IP -p 80 –script=http-frontpage-login
nmap –script http-passwd –script-args http-passwd.root =/ target IP address
- L’imitation d’un site web :
Cela consiste à créer un profile exact et complet d’un site web en créant un miroir de ce site avec des outils tels que HTTPrack web copier pro et consort.
Pour faire cela, il est nécessaire de faire de la reconnaissance en utilisant les commentaires dans le code source HTML.
- Trouver des identifiants par défaut du serveur web :
Beaucoup d’interfaces de serveurs web administratifs sont publiquement accessibles et situées dans le répertoire racine du serveur web. Elles ne sont pas configurées correctement, des configurations par défaut sont mises seulement.
Ce qui peut causer des dégâts au niveau de la sécurité, car si un attaquant identifie l’application qui tourne sur le serveur, il peut consulter la documentation de son interface administrative et ainsi avoir des mots de passe par défaut.
Des outils comme metasploit, cirt.net, Open Sez me.
- Trouver du contenu par défaut de serveurs web :
Les fonctionnalités et les contenus par défaut vont permettre aux attaquants de rentabiliser leurs attaques.
Les outils comme Nikto2, exploit db security focus peuvent être utilisés pour identifier les contenus par défaut.
- Listage de répertoire de serveurs web :
Cela consiste à envoyer une requête pour lister un répertoire, ses ressources, erreurs et tout son contenu.
Le listage de répertoire permet parfois de découvrir des vulnérabilités comme les contrôles d’accès non autorisés, l’accès à la racine de serveurs web, etc.
Si un attaquant réussit à lister le contenu d’un répertoire, il pourra exploiter les vulnérabilités du serveur web.
- Scan de vulnérabilité de serveurs web :
Cela permet d’identifier les faiblesses d’un serveur web.
Les scanneurs de vulnérabilités tels que ACUNETIX permettent de découvrir les systèmes actifs, les services sur un serveur, etc.
Des vulnérabilités trouvées sur un serveur web peuvent être exploitées en utilisant des outils comme SecurityFocus.com, Exploit-db.com.
- Détournement de session :
Cela consiste à prendre possession à des identifiants valides pour obtenir un accès non autorisé à un serveur web.
Les attaques XSS et fixation de session peut être utilisées afin de capturer des identifiants et des cookies session valide.
Des outils comme BURP, Firesheep, JHijack, etc. sont bons pour cela.
- Utilisation d’un serveur d’application comme proxy
Les serveurs web avec les fonctionnalités de Reverse proxy et de réexpédition activées permettent aux attaquants :
1) de mener leurs attaques sur une tierce partie de systèmes sur Internet ;
2) de se connecter arbitrairement sur des hôtes dans le réseau interne d’une organisation et sur d’autres services en cours d’exécution sur le proxy lui-même ;
3) d’utiliser des requêtes GET et CONNECT pour utiliser les serveurs web vulnérables comme proxy afin de se connecter et d’obtenir des informations sur les systèmes utilisant des serveurs proxy.
IV. Les outils d’attaque d’un serveur web
Il y a de nombreux outils qui permettent de faciliter une attaque sur un serveur web, à savoir Wfetch, THC hydra, Mpack, w3af.
Mais nous allons nous intéresser principalement d’un outil très sophistiqué qui est Metasploit.
Cet outil sert entièrement d’exploitation automatisée de serveurs web en abusant des vulnérabilités connues et en exploitant leurs mots de passe faibles via Telnet, SSH, http et SNMP.
Il présente différents modules que sont :
- Le module Metasploit exploit:
C’est le module de base dans metasploit utilisé pour encapsuler un exploit avec un seul.
Ce module vient avec des champs de méta-informations simplifiés.
En utilisant un mélange de caractéristiques, les utilisateurs peuvent aussi modifier le comportement de l’exploit dynamiquement, par des attaques force brute, des tentatives d’exploits passives, etc.
- Le module Payload :
Ce module permet d’établir un canal de communication entre MSF et l’hôte victime.
Il combine un code arbitraire qui est exécuté comme un résultat d’un exploit réussi.
Il peut générer des mots de passe, en sélectionnant d’abord une charge utile en utilisant la commande use window/shell_reverse_tcp.
- Le module Auxiliary :
Ce module peut être utilisé pour effectuer de manière arbitraire un balayage de port, une DoS, même fuzzing.
Pour lancer ce module, il faut utiliser la commande run ou exploit.
- Le module Nops :
Ce module permet de générer une instruction de non fonctionnement pour bloquer les Buffers externes.
Pour la génération, il faut utiliser la commande generate.
La taille va être arbitrairement choisie et ce qu’on a généré va être affiché dans un format donné :
msf > use x86/opty2
msf nop(opty2) > generate –h
V. Les contremesures et techniques de défenses
V.1 Contremesures à travers le placement des serveurs web dans le réseau
Pour bien sécuriser un réseau et ses serveurs web, il faut le subdiviser au moins en trois segments : le réseau Interne ou privé, le réseau public (Internet) et le DMZ (segment pour sécuriser les serveurs).
Ce dernier est isolé du réseau interne ainsi que du réseau public en général par un pare-feu.
V.2 Contremesures à travers les correctifs et les mises à jour
Pour éviter ou minimiser les attaques sur un serveur web, il faut :
1) faire des scans de vulnérabilités, des correctifs et des mises à jour régulièrement sur le logiciel du serveur ;
2) avant d’appliquer des packs de services (hotfix ou correctif de sécurité), vérifier la documentation correspondante ;
3) appliquer toutes les mises à jour ;
4) tester les packs de service et les correctifs dans l’environnement de non production ;
5) s’assurer que, pour les pannes de serveur, un ensemble complet de sauvegarde et de réparation de disques est disponible ;
6) avoir un plan de reprise d’activité ;
7) planifier des mises à niveau périodiques de packs de service et ne jamais essayer d’avoir plus de deux packs de services derrière.
V.3 Contremesures à travers les protocoles
Utiliser les protocoles pour élaborer des contremesures sur les attaques des serveurs web revient à :
1) bloquer les ports et les protocoles qui ne sont pas nécessaires (ICMP, SMB, etc.) ;
2) durcir la pile TCP/IP, appliquer des mises à jour ;
3) si les ports des services SMTP, POP3, FTP sont utilisés, il faut fournir une authentification et une communication sécurisée en utilisant par exemple les politiques de sécurité de IPSec.
4) désactiver l’extension d’http sur la gestion à distance des fichiers d’un serveur web (WebDAV) ;
5) utiliser le tunneling et le cryptage pour les accès à distance.
V.4 Contremesures à travers les comptes d’utilisation
Pour les comptes d’utilisations, il faut :
1) supprimer toutes celles qui ne sont pas utilisées et les extensions d’application ;
2) désactiver les comptes par défaut non utilisées ;
3) lors de la création d’un nouveau répertoire racine sur un serveur web, accorder à l’utilisateur le moins possible de permissions sur les systèmes de fichier au niveau du serveur IIS ;
4) éliminer les utilisateurs non nécessaires de la base de données et stocker les procédures ;
5) utiliser des permissions sécurisées sur le serveur, sur le système de fichier, des mécanismes de contrôle d’accès .NET framework incluant une autorisation sur les URL ;
6) utiliser une politique de mot de passe robuste et résistante contre les attaques de dictionnaires, force brute, etc.
7) exécuter les processus en utilisant moins de comptes privilégiés ainsi que de services et d’utilisateurs de comptes.
V.5 Contremesures à travers les fichiers et les répertoires
Sur les fichiers et répertoires, il faut :
1) éliminer les fichiers inutiles (par exemple les fichiers .jar) ;
2) désactiver les listages de répertoires de serveur ;
3) éliminer les informations de configuration sensibles à l’intérieur des byte codes ;
4) éviter le mappage de répertoires virtuels entre deux serveurs différents ou sur un réseau ;
5) surveiller et vérifier les journalisations (logs) comme les logs de service réseau, les logs d’accès au site web, les logs d’accès au serveur de base de données, etc. ;
6) désactiver certains types de fichiers en créant un mappage de ressource.
V.6 Contremesures à travers la détection de tentatives de piratage de serveur web
L’outil WebsiteCDS (website change detection system) permet de détecter les tentatives de piratage d’un serveur web.
Il lance un script spécifique sur le serveur pour détecter n’importe quel changement dans les fichiers exe ou de savoir si de nouveaux fichiers ont été ajoutés.
Il compare périodiquement les valeurs de hachages sur le serveur avec la valeur de hachage principale pour détecter des modifications. Si des modifications sont détectées, une alerte sera lancée.
V.7 Les techniques de défenses
Il est possible de se défendre contre les attaques sur un serveur web par diverses techniques :
- Les ports : auditer les services qui tournent derrière les ports afin de limiter les trafics ;
- Les certificats de serveur : garantir la portée des données de certificat, s’assurer que certains certificats soient révoqués et certaines clés publiques aussi ;
- La configuration de machine : s’assurer que les ressources protégées sont mappées au gestionnaire et que les modules http sont supprimés.
- La sécurité sur les accès par code : implémenter des pratiques de codage sécurisées, restreindre les accès par code, configurer le serveur IIS pour rejeter les URL incluant «../.» ;
- L’outil URLSCAN :
C’est un outil de sécurité qui permet de restreindre les types de requêtes http que le serveur IIS traite, prévenir les potentielles requêtes nocives, le filtrage des requêtes basé sur un ensemble de règles par l’administrateur, réduire les injections SQL.
Il fournit des logs au format W3C pour une analyse facile par les solutions d’analyse de log telle que microsoft Log parser 2.2.
- L’outil SAM (Secure Stand Alone Server) :
Il permet d’appliquer les ACL et de bloquer les administrations de registre à distance.
Il permet aussi de supprimer les filtres ISAOI inutiles sur les serveurs web, d’activer un niveau minimum pour l’audit, d’implanter des sites et des répertoires virtuels pour les partitions non-système.
- Il est possible d’utiliser une machine dédiée comme serveur web, créer prudemment un mappage d’URL vers les serveurs internes, utiliser un suivi d’identifiant de session côté serveur, utiliser des outils de sécurité fournis avec les scanneurs et le logiciel du serveur web, filtrer les requêtes des trafics entrants, limiter les fonctionnalités du serveur, n’autoriser personne à se connecter sur le serveur excepté l’administrateur.
- Défense contre HTTP RESPONSE SPLITTING et WEB CACHE POISONING :
- Pour l’administration du serveur : utiliser la dernière version du logiciel du serveur web, faire régulièrement les mises à jour et correctifs du système d’exploitation, exécuter le scanneur de vulnérabilité sur le serveur ;
- Pour les développeurs d’application : restreindre l’accès à des adresses IP unique, interdire le retour chariot et les caractères de saut de ligne ;
- Pour les serveurs proxy : éviter le partage des connexions TCP entrantes, utiliser différentes connexions TCP avec un proxy pour les hôtes virtuels différents, implémenter « maintain request host header » correctement.
- Défense contre DNS Hijacking :
- Choisir un registraire accrédité par l’ICANN et encourager le à définir un verrou sur le nom de domaine ;
- Protéger les informations du compte du titulaire ;
- Inclure le DNS Hijacking dans les réponses d’incidence et le planning de continuité de travail ;
- Eviter le téléchargement de vidéo, audio, etc. sur des sites non fiable ;
- Changer le mot de passe par défaut de votre routeur ;
- Utiliser des outils et services de surveillance de DNS ;
- Utiliser et mettre à jour régulièrement vos programmes d’antivirus.
VI. Gestionnaire des correctifs
Les Hotfixs sont des mises à jour qui permettent de corriger un problème spécifique d’un client et ne sont pas toujours distribués à l’extérieur de l’organisation du client.
Ils sont parfois des packages autrement dit un ensemble de correctifs appelé hotfix combiné ou pack de service.
Un patch (ou correctif) est un petit morceau de logiciel désigné à corriger des problèmes, des vulnérabilités et des bugs afin d’améliorer la performance du serveur.
Un gestionnaire de correctif est un processus qui s’assure que les correctifs appropriés sont installés sur un système et il aide à corriger les vulnérabilités connues.
Il permet la détection, l’évaluation, l’acquisition, le test, le déploiement et le maintien.
Pour installer des patchs, il faut d’abord :
- Identifier les sources appropriées pour les mises à jour et les correctifs : cela revient à planifier le gestionnaire de correctif, de trouver les correctifs et les mises à jour, de pouvoir recevoir les alertes ;
- Installation des correctifs : les correctifs peuvent être installés via web, manuellement (téléchargements) et par une installation automatique (par application) ;
- Implémentation et vérification d’un patch de sécurité : il faut vérifier la source, utiliser un programme de gestion de correctif, être en mesure de surveiller le système patché.
Les outils comme GFI Languard, software vulnerability manager, MaaS360 patch analyzer, Symantec client management suite peuvent être utilisés.
Il y a aussi des scanneurs de sécurité d’application web : SYHUNT HYBRID, N-STALKER, SCANMYSERVER, QUALYSGUARD MALWARE DETECTION SERVICE, ACUNETIX WVS, RETINA CS, NSCAN, NETIQ SECURE CONFIGURATION MANAGER, SAINT SCANNER.
VII. Test de pénétration sur un serveur web
Pour identifier, analyser, rapporter les vulnérabilités, les faiblesses d’authentification, il faut :
1) identifier la cible
2) rechercher des informations sur la cible, à travers les forums de discussion, les panneaux d’affichage
3) effectuer une ingénierie sociale en utilisant les réseaux sociaux, les fouilles dans les poubelles
4) interroger les bases de données Whois, avec les outils WHOIS, TRACEROUTE, etc.
5) documenter toutes les informations trouvées sur la cible
6) relever les empreintes digitales du serveur web, en utilisant NETCRAFT et HTTPRECON
7) surfer lentement sur les sites web en utilisant HTTTRACK
8) énumérer les répertoires du serveur web avec NMAP
9) effectuer une attaque de type traversée de répertoires avec DIRB
10) examiner les fichiers de configuration
11) effectuer une évaluation de vulnérabilité
12) réaliser l’attaque HTTP response spliting
13) réaliser l’attaque Web cache poisoning
14) craquer l’authentification du serveur web
15) réaliser l’attaque force brute sur SSH, FTP et sur d’autres services
16) réaliser un détournement de session
17) réaliser l’attaque man in the middle
18) effectuer un test de pénétration l’application web
19) examiner les logs du serveur web
20) exploiter l’environnement
21) documenter les résultats.
Outil : CORE IMPACT