Accéder au contenu principal

Sécurité et Audit d'application WEB



Étapes d’un audit d’application WEB :

  1. Identification de la version du serveur WEB;
  2. Identification de la plateforme utilisée (Content Management System et Langage) utilisé ;
  3. Identification des failles associées à la plateforme ;
  4. Cartographie du site (identification des fichiers et de la base de données) ;
  5. Vérification des méthodes et technologies de transfert d’informations ;
  6. Identification des failles communes ;
  7. Analyse du code source pour identification des erreurs de conceptions restantes.

La majeure partie des failles de Sécurité Web provient d’erreur de développement.

Identification du serveur

1. Identifier le type et la version du serveur

  • Avec Telnet ou ncat : telnet 192.168.0.1 80
    HEAD / HTTP/1.0
    On peut aussi utiliser une erreur pour charger une page : GEE / JOJO/5.0 ou GET / HTTP/1.0
    Par message d’erreur en demandant une page inexistante : GET /toto/titi.asp HTTP/1.0
  • Avec Nmap : nmap -sV -p 80 -vvv 192.168.0.1
  • Avec Nikto : nikto -h www.google.fr -findonly
  • Avec Wget : wget -S –spider www.google.fr
  • Avec Httprint, par statistique sur la réponse : httprint -h http://www.google.fr -s signature.txt
  • Par technologie : ASP.NET = IIS
  • Par historique Internet : http://toolbar.netcraft.com/site_report?url=http://www.google.fr

2. Identification de la plate forme utilisée (CMS et Langage)


3. Identification des failles liées à la plateforme


4. Cartographie du site


5. Vérification des méthodes et technologies de transfert d’informations :

  • Vérifier que ces méthodes soient désactivées : OPTIONS, PUT, CONNECT, DELETE et TRACE
  • Utilisation d’un proxy HTTP/HTTPS : Zap ou Burp
  • Par défaut un URL de type http://www.google.fr/search?hl=fr&q=test montre l’utilisation de méthode GET (paramètres séparés par &).
  • Vérifier les fichier de style (CSS), javascripts (JS), et défaut (phpinfo.php, /admin:. . .).
  • Vérifier la verbosité des messages d’erreur.

6. Identification des failles communes

Failles de sécurité : développement

  • XSS (Cross-Site Scripting) : Permet à un utilisateur de faire exécuter du javascript à une page vue par un autre utilisateur.
  • CSRF/XSRF (Cross-Site Request Forgery) : Utilise les droit de l’utilisateur consultant une page pour lui faire exécuter une tâche grâce au javascript.
  • XSSI (Cross Site Script Inclusion) : Variante du XSRF qui permet d’inclure un fichier à exécuter sur une page.
  • Injection SQL : Correspond à envoyer des données non prévues à une page, afin de s’authentifier, ou effectuer des tâches sur la base de données.
  • Faille include : Inclusion d’un fichier pour exécution sur un serveur de notre code.
  • Failles de sécurité : serveur/navigateur WEB
  • Path Traversal : Consiste à essayer d’accéder à des fichiers normalement inatteignables (fichiers système, configuration, mots de passe) en essayant de remonter dans l’arborescence.
  • Data tampering : Utilisation du Path Traversal pour remplacer un fichier (par exemple système) lors d’un upload de fichier sur un serveur.
  • Code Execution : Attaque utilisant une faiblesse du navigateur WEB pour exécuter du code sur la machine client.

Failles de sécurité : technologies

  • AJAX (Asynchronous JavaScript And XML) : Moyen de dialogue utilisant les technologies HTML/XHTML, XML, CSS, DOM, Javascript, XMLHttpRequest, peut permettre l’exploitation de failles (DOS, Phishing, integer overflow. . .).
  • ISAPI (Internet Server Application Programming Interface) : Interface de programmation (ou API) de l’application IIS de Microsoft, fonctionne comme un langage de page dynamique de type PHP, ASP, CGI, sous forme de DLL.
  • SWF (ShockWave Flash) : application flash décompilable, pouvant comporter des mots de passe et être vulnérable.

Outils gratuits pour l’identification et l’exploitation de vulnérabilité


7. Analyse du code source pour identification des erreurs de conceptions restantes.

Configuration

  • Rendre anonyme la bannière de connexion du serveur et des services.
  • Personnaliser les messages d’erreurs et limiter au strict minimum les informations transmises.
  • Protéger le serveur WEB par un pare-feu ou un reverse-proxy de type Apache+ModSecurity, avec des règles de filtrage éprouvées, le mode Apache mod_rewrite permet aussi d’implémenter l’URL Rewriting.
  • Supprimer les fichiers inutiles (exemples : info.php, phpinfo.php).
  • Mettre à jour le serveur Web et les modules Web installés.

Base de données

  • Renommer la base de données, les comptes et tables par défaut.
  • Appliquer des droits sur la base de données et sauvegarder les mots de passe sous forme de hash.
  • Utiliser des comptes utilisateurs SQL à accès limité (en lecture seule) quand cela est possible.
  • Utiliser des procédures stockées, à la place du SQL dynamique. Les données entrées par l’utilisateur sont alors transmises comme paramètres, limitant ainsi les risques d’injection.
  • Utiliser des requêtes SQL préparées (requêtes à trous envoyées au serveur, qui se charge d’échapper les caractères selon le type de paramètre).
  • Effectuer un contrôle des requêtes en limitant les droits aux commandes telles que EXEC, SELECT, INSERT, DROP, CREATE, ALTER, UPDATE…

Requêtes et variables

  • Vérifier le lien de référence (referrer) contenu dans les requêtes (compliquer à implémenter).
  • Tester systématiquement les valeurs transmises : $_GET$_POST$_COOKIE$_REQUESTAJAX
  • Préférer l’envoi des données via la méthode $_POST plutôt que $_GET.
  • Ne pas utiliser $_REQUEST (permet l’utilisation du même paramètre en $_GET et $_POST).
  • S’assurer à chaque requête de l’authentification de l’utilisateur et que l’action correspond à ses droits.
  • Les cookies et numéros de session doivent avoir une limite de validité.
  • Ne jamais transmettre de données confidentielles aux clients (son numéro de client dans l’URL. . .).
  • Utiliser l’attribut .innerText au lieu de .innerHtml afin de se protéger contre les XSS, n’utiliser .innerHtml que pour de l’affichage HTML (technologie AJAX).
  • Vérifier le type et la validité des variables à exploiter isset()is_numeric()ereg()filter_var()filter_input()filter_var_array() ou filter_input_array().
  • Utiliser la fonction PHP mysql_real_escape_string() ou addslashes() (depuis PHP6 les Magic Quotes ont disparus) qui permet de convertir les caractères non standards ( » devient n »).
  • Désactiver les Magic Quotes qui sont insuffisantes contre les injections (et inutiles en cas d’exploitation de pages externes) et qui utilisent trop de ressources (voir fichier php.ini magic_quotes_gpc = Off).
  • Pour afficher une variable, utiliser systématiquement : htmlspecialchars(...,ENT_QUOT) qui permet de convertir les caractères en HTML et de se protéger contre des failles XSS.
  • Dans les messages des forums désactiver l’utilisation du javascript.
  • Désactiver allow_url_include pour évitr les failles include (inclusion de fichiers distants).
  • En cas d’utilisation de technologie AJAX (XmlHttpRequest), encoder les données transmises (escape()encodeURI()encodeURIComponent()).
  • Toujours prévoir un historique des traitements effectués (avec : requête, compte, IP, date et heure).

Commentaires

Posts les plus consultés de ce blog

Dossier de base sur un serveur Windows

Dossier de base Pour les utilisateurs de domaine Windows AD, il est possible de créer un dossier de base via l’activation du service dossier utilisateur. Ainsi, chaque utilisateur du domaine disposera d’un dossier personnel pour le stockage et la sauvegarde de ses fichiers sur le serveur de partage. Le dossier utilisateur permet de plus aux administrateurs de sauvegarder les fichiers de chacun des utilisateurs.

Le protocole ICMP | Echo Echo Response : Le ping | Le TTL

Le protocole ICMP Introduction Nous avons pu remarquer dans les chapitres précédents qu'IP était essentiellement accès sur les fonctions d'adressage et de routage. Il est configuré pour fonctionner comme si aucun problème ne pouvait survenir sur le réseau ( perte de datagrammes, congestion, problème de routage, etc .). Si un problème survient, sa solution est expéditive :  il ne route pas  ! Il a tout juste accepté de prendre en charge les problèmes de fragmentation ! Ce mode de fonctionnement n'est pas un problème en soi ( il suffit de regarder la notoriété et l'implantation d'IP ! ). Mais il est nécessaire de pouvoir dans certains cas informer les émetteurs du devenir de leurs datagrammes. C'est le rôle d' ICMP  ( I nternet  C ontrol  M essage  P rotocol) qui, comme son nom l'indique, est un  protocole d'information du contrôle de réseau . ICMP ne résoud rien, ou du moins pas grand chose, il informe ! Lorsque certains problèmes de...

énigme : Le mystère de deux portes : deux gardes, un dit la vérité, un ment

 Le mystère de deux portes : deux gardes, un dit la vérité, un ment Énoncé  Vous êtes devant deux gardiens : l'un qui dit la vérité et l'autre qui ment toujours.  Vous devez choisir l'une des deux portes : l'une vers la liberté et l'autre vers la prison.  Vous ne pouvez poser qu'une seule question à l'un des gardes. Alors vous devez choisir ! Solution  Un problème possible pour distinguer le vrai du faux et déterminer quelle porte offre la liberté.  Pour déterminer quel tuteur dit la vérité ou ment, il est nécessaire de poser des questions à l'un en impliquant l'autre.  C'est le principe de l'encapsulation : « Si je demande au gardien2 si cette porte offre la liberté, que va-t-il me dire ?  Dans ce principe, vous impliquez l'autre gardien dans votre question, on peut donc en déduire que la réponse est  Qu'est-ce que donné par un menteur est donné par celui qui dit la vérité ! Décryptons  Si je demande à l’autre gardien si cette porte ...