8.1 KiB
Sécurité des applications Web
William Petit - S.C.O.P. Cadoles
La fondation OWASP
Open Web Application Security Project
- Fondé en 2001
- Organisation internationale à but non lucratif
Quelques projets en particulier
- OWASP Top Ten - Top 10 des failles impactant les applications Web
- OWASP Code Review Guide - Guide de la revue de code appliquée à la sécurité
- OWASP ASVS - Standard des vérifications de sécurité des applications Web
- OWASP Webgoat - Application(s) volontairement faillible(s) illustrant les principales failles de sécurité actuelles.
Les principales failles
Epicfaild
https://forge.cadoles.com/wpetit/epicfaild
Lancer avec Docker
docker run -it --rm -p 8888:8080 bornholm/epicfaild
# Puis ouvrir l'URL http://localhost:8888/
# dans votre navigateur
OWASP WebGoat
https://github.com/WebGoat/WebGoat
Lancer avec Docker
docker run -p 8080:8080 -it --rm webgoat/webgoat-8.0 /home/webgoat/start.sh
# Puis ouvrir l'URL http://localhost:8080/WebGoat/
# dans votre navigateur
Injections SQL (SQLI)
Pratique
Epicfaild: Gate 3 et 4 WebGoat: Injection Flaws (- XEE)
Risques
- Vol de données
- Altération de données
- Prise de contrôle du serveur
Mitigation
- Exécuter le moteur de base de données avec un utilisateur dédié.
- Valider TOUTES les entrées utilisateur.
- Utiliser des requêtes préparées.
- Installer un NIDS au niveau du serveur HTTP
Contournement de la session
Pratique
Epicfaild: Gate 3 WebGoat: Authentication Bypass
Risques
- Vol de session
- Vol de données
- Prise de contrôle de l'application
Mitigation
- Valider TOUTES les entrées utilisateurs
- Journaliser les origines des connexions
Cross Site Scripting (XSS)
Pratique
Epicfaild: Gate 1 WebGoat: Cross Site Scripting
Risques
- Vol de sessions
- Hameçonnage
Mitigation
- Valider TOUTES les entrées utilisateurs
- Assainir les données avant de faire leur rendu
Mauvais contrôle des accès
Pratique
WebGoat: Access Control Flaws
Risques
- Accès non autorisés à des fonctionnalités critiques
- Vol de données
- Prise de contrôle de l'application
Mitigation
- Journaliser tous les accès à des ressources critiques (qui, quoi, quand, quel contexte ?)
- Utiliser une double authentification pour l'accès aux ressources critiques
Attention L'obfuscation des accès n'est pas une méthode de sécurisation des points d'entrée.
Fuite d'informations sensibles
Pratique
Epicfaild: Gate 4/5
WebGoat: Insecure communication, Client Side/Client side filtering
Risques
- Vol de données
Mitigation
- Ne retourner à l'utilisateur que les données dont il a besoin (approche "frugale").
- Limiter la zone d'action de l'utilisateur à ses seuls besoins.
Cross Site Request Forgery (CSRF)
Pratique
WebGoat: Request Forgeries
Risques
- Hameçonnage
- Vol de session
- Vol d'identité
Mitigation
- Utilisation de
nonce
(aussi appelé CSRF Token) - Utilisation de requêtes
POST|PUT|DELETE
pour toutes les actions autres que la "consultation" - S'assurer que les mécanismes de type "HTTP Method Override" ne sont pas activés en production (Exemple pour Symfony3)
Mauvaise politique de maintenance
Pratique
WebGoat: Vulnerable components
Risques
Les risques dépendent du composant faillible...
Mitigation
- Activer les mécanismes de mise à jour automatique
- Vérifier les mises à jour des librairies de manière automatisée.
- Suivre la publication des CVE/NVD
Métrologie applicative appliquée à la sécurité
Méthodologie générale
Modélisation de menace
Identification des flux de données
Les facteurs d'une bonne métrique
Exemple d'outil: Prometheus
Méthodologie générale
- Définir le modèle de menace
- Identifier et isoler les scénarios d'attaque pour les différentes menaces
- Trouver les indicateurs "clés" pour ces scénarios i.e. identifier les métriques pertinentes pour la détection des comportements suspects
- Mettre en place les sondes pour les métriques
- Définir les seuils d'alerte et les réponses à apporter
La modélisation de menace
- Identification des dépendances externes. Exemple: serveur GNU/Linux, base de données
- Identification des points d'entrées Exemple: formulaire de contact, port de la base de données
- Identification des assets Exemple: Comptes utilisateurs de l'application, données personnelles, droits d'accès
- Identification des niveaux de confiance Exemple: Utilisateur anonyme, administrateur
Identification des flux de données
Les facteurs d'une bonne métrique
- Concision Le domaine de mesure est il correctement défini ? La métrique n'essaye t-elle pas de mesurer trop de choses ?
- Fidélité La mesure est elle reproductible ? Mesure t-elle toujours la même chose ?
- Intégrité Le processus de mesure est il vulnérable à la falsification ?
- Utilité La métrique apporte elle une information utile au processus décisionnel ?
Exemple d'outil: Prometheus
Configuration générale
Instrumentation de l'application
Modèle de données
Les différents types de métriques
Visualiser les métriques
Effectuer des requêtes sur les métriques
Modèle de données
Prometheus stocke des échantillons (mesures) sous la forme de séries temporelles. Il créait une nouvelle série pour chaque association (nom_métrique, label1=value, label2=value, ...).
Chaque couple (label, valeur) est appelée dimension de la métrique.
Représentation
http_total_requests{ method="POST", path="/test" }
| name | labels |
Les différents types de métriques (1)
Compteur
Un compteur est une métrique dont la valeur ne peut faire qu'augmenter au cours du temps.
Exemple Nombre total de connexions d'un compte sur un site
Les différents types de métriques (2)
Jauge
Une jauge est une métrique dont la valeur peut augmenter ou diminuer au cours du temps.
Exemple La température d'une pièce
Les différents types de métriques (3)
Histogramme
Un histogramme est une métrique répartissant les données dans des "paquets" (ou "buckets" en anglais) configurables et comptant le nombre total et par "paquet" d'échantillons ainsi que leur somme.
Exemple Le temps de réponse des requêtes HTTP
Configuration de l'alertmanager
Écriture de règles d'alertes
Exercice: métrologie orienté sécurité d'une application Symfony3
- Créer une nouvelle application Symfony3 et configure une authentification de type "Basic Auth" sur une route.
- Implémenter une
Listener
pour l'évènementsecurity.authentication.failure
(voir ce tutoriel) - Installer et configurer le bundle tweedegolf/prometheus-bundle
- Mettre en place une sonde pour détecter les tentatives répétées d'authentification échouées pour une adresse IP donnée.
- Mettre en place une alerte lorsque le nombre d'authentifications échouées dépasse un certain seuil dans un espace de temps donné.