Violation de Gestion d'Authentification et de Session
Mise en contexte Informations d’authentification : Username / password Session : Génération d’un session ID unique Session ID cookie ou URL But : Preuve d’authentification Éviter de passer les informations confidentielles du user
Présentation du problème Méthode de Hijacking Emprunte identité du user (session ID) Danger : Envoyer demandes au site web à partir des privilèges du vrai user Risque d’attaque si : - User interaction avec un site affecté - L’attaquant a réussi a prédire le session ID du user User peut ne pas se douter de l’intrusion
Environnements affectés Cookies URL de sites web Champs de formulaires invisible pour l’utilisateur Tous les Framework d’applications web sont vulnérables
Attaques possibles Prérequis: Posséder au moins 1 ID de session valide pour prédire/deviner les autres Analyser Déterminer l’algorithme de génération Attaques : Se connecter à l’application web avec ID de session trouvé Brute Force le prochain ID de session Échanger la valeur actuelle dans le cookie/URL avec l’ID du prochain user
Cas possibles Partage d’URL en étant authentifié Timeouts mal définies (fermer l’app ne déconnecte pas) Capture de paquets non sécurisés
Exemple 1 Solution : Empêcher d’accepter les ID par GET/POST session.use_only_cookies = 1 ID dans URL Mis à 0 par défaut Encrypter le session ID
Exemple 2 - Solution : Intégrer configuration SSL
Exemple 3 GET /profile.php HTTP/1.1 Requête 1: GET / HTTP/1.1 Host: example.org User-Agent: Mozilla/5.0 Accept: text/xml, image/png, image/jpeg, image/gif, */* Cookie: PHPSESSID=1234 Requête 2: GET /profile.php HTTP/1.1 User-Agent: Mozilla/5.0 (compatible; MSIE) Accept: text/xml, image/jpeg, image/png, image/gif, */*
Exemple 3 solution <?php session_start(); if (isset($_SESSION['HTTP_USER_AGENT']) && $_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT'])) { /* Vérifier le mot de passe*/ exit; } else { $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']); } ?>
Comment faire pour éviter Indices d’occurrence : User: Le site répond différemment à une entrée du user Le site arrête de fonctionner pour une raison inconnue Host: Requêtes avec ID invalide Même IP pour chaque requête d’ID différent 2 ID connectés en même temps
Comment faire pour éviter Solutions/mesures de sécurité : Grande source de hasard pour ID de session Agrandir l’ID Expirer l’ID Limiter nb d’erreurs de connection Brute Force Pas donner d’indice quant à l’origine de l’erreur Pas utiliser les informations du User pour générer Encrypter l’ID lorsqu’il est exposé au User ex : Rangé dans un cookie en format encrypté Pas exposer ID valide dans les URL/logs Accepter seulement ID générés par serveur
Conclusion Méthode doit être prise en compte: Faille évidente et compromettante Peu rendre le site vulnérable Facilement évitable sécurité
Sources http://webcache.googleusercontent.com/search?q=cache:http://projects.webappsec.org/Credential-and-Session- Prediction&gws_rd=cr&ei=egxRVpXKOcOoe6jokaAE https://www.owasp.org/index.php/Session_Prediction http://shiflett.org/articles/session-hijacking http://hungred.com/useful-information/solutions-session-attacks/ http://www.c-sharpcorner.com/UploadFile/suthish_nair/how-to-avoid-session-hijacking-in-web-applications/