Comment puis-je configurer AWS WAF pour protéger mes ressources contre les attaques courantes ?

Lecture de 7 minute(s)
0

Comment puis-je configurer AWS WAF pour protéger mes ressources contre les attaques courantes ?

Résolution

Migrer d’AWS WAF Classic vers AWS WAF (le cas échéant)

Si vous utilisez AWS WAF Classic, nous vous recommandons de migrer vers AWS WAF. Pour effectuer cette migration, vous pouvez utiliser l’outil de migration automatique. Pour en savoir plus, consultez Pourquoi migrer vers AWS WAF ?

Effectuer le test de pénétration sur votre application pour identifier les vulnérabilités

Chaque application reçoit son propre type de requêtes. Ainsi, les règles du pare-feu qui protègent votre application doivent être personnalisées.

Effectuer le test de pénétration sur votre application pour en comprendre les vulnérabilités spécifiques. Pour en savoir plus, consultez :

Examiner les requêtes entrantes afin d’optimiser vos règles personnalisées

Avant de définir des règles personnalisées pour protéger votre application, examinez les requêtes entrantes dans votre environnement.

Commencez par générer des journaux à l’aide de :

  • AWS WAF
  • Amazon CloudFront
  • Application Load Balancer
  • Amazon API Gateway

Stockez ensuite ces journaux sur Amazon Simple Storage Service (Amazon S3). Enfin, utilisez Amazon Athena pour interroger les journaux et identifier des modèles. Vous pouvez par exemple consulter des modèles comme :

  • requêtes adressées à votre environnement pour des URI qui n’existent pas

  • Pour reconnaître ce modèle, vous devez connaître tous les URI pris en charge

  • Exemple de requête Athena exécutée sur les journaux AWS WAF pour compter les requêtes associées à chaque URI :

SELECT count("httprequest"."uri") as URIcount, "httprequest"."uri"
FROM waf_logs
GROUP BY "httprequest"."uri"
ORDER BY URIcount DESC
  • requêtes contenant un en-tête HTTP Host non pris en charge par votre serveur Web -OU- requêtes contenant une adresse IP au lieu du nom de domaine de votre site Web

  • Exemple de requête Athena exécutée sur les journaux AWS WAF pour compter les requêtes avec différentes valeurs d’en-tête Host :

SELECT header.value as HostHeader, count(header) as count
FROM waf_logs, UNNEST(httprequest.headers) AS x(header)
WHERE "header"."name" = 'Host'
GROUP BY  header
ORDER BY count DESC

Après avoir identifié un modèle, vous pouvez créer des règles AWS WAF en mode COUNT pour vous assurer que la règle est bien configurée pour correspondre à ces requêtes. Faites passez ensuite la règle en mode BLOCK.

Par exemple, si votre application prend en charge uniquement l’en-tête Host « www.exemple.com » :

  • Créez un NOT match sur l’en-tête HOST avec la valeur « www.exemple.com »
  • Définissez l’action sur BLOCK

Toutes les requêtes adressées à votre environnement qui n’ont pas d’en-tête Host « www.exemple.com » sont désormais bloquées. 
Remarque : cette règle bloque également les requêtes vers le nom de domaine complet qualifié (FQDN) fourni par AWS.

Utiliser les règles gérées AWS pour vous protéger contre les attaques courantes

Utilisez les règles gérées AWS pour empêcher les attaques courantes qui s’appliquent à la plupart des applications, notamment les requêtes qui :

  • ne contiennent pas d’agent utilisateur
  • représentent les requêtes des robots
  • utilisent « localhost » comme en-tête HTTP Host
  • utilisent la méthode HTTP PROPFIND

Incluez ces groupes de règles de base dans votre liste de contrôle d’accès Web (ACL Web) en mode COUNT. Choisissez bien « Activer le mode Count » dans le groupe de règles. Examinez ensuite les journaux AWS WAF et les métriques CloudWatch pour déterminer si la règle gérée correspond à un trafic légitime. Dans le cas contraire, faites passer le groupe de règles en mode BLOCK en désactivant « Activer le mode Count ». Pour désactiver une règle spécifique dans le groupe de règles gérées AWS, choisissez « Annuler l’action des règles » pour cette règle.

Remarque : les règles définies dans Règles gérées d’AWS pourraient être déclenchées par des requêtes légitimes adressées à votre environnement. Pour plus d’informations, consultez Comment puis-je détecter les faux positifs causés par les Règles gérées d’AWS et les ajouter à une liste blanche ?

Important : les Règles gérées d’AWS sont conçues pour vous protéger contre les menaces Web courantes. Lorsqu’ils sont utilisés conformément à la documentation, les groupes de règles gérées AWS ajoutent une couche de sécurité supplémentaire à vos applications. Toutefois, les groupes de règles des Règles gérées d’AWS ne sont pas conçus pour remplacer vos responsabilités en matière de sécurité. Celles-ci sont déterminées par les ressources AWS que vous sélectionnez. Consultez le modèle de responsabilité partagée pour vérifier que vos ressources dans AWS sont bien protégées.

Prendre comme référence votre AWS WAF en utilisant le taux de requêtes légitimes

Effectuez une analyse de votre trafic afin d’identifier le nombre de requêtes effectuées par des adresses IP de clients légitimes à l’aide d’Amazon Athena ou d’Amazon Quicksight dans les journaux AWS WAF. En vous servant des informations obtenues grâce à cette analyse, établissez une base de référence pour votre AWS WAF en fonction du taux de requêtes formulées par un client légitime. Définissez ensuite un seuil lors de la configuration de la règle fréquentielle AWS WAF.

Exemple de requête Athena exécutée sur les journaux AWS WAF pour compter le nombre de requêtes provenant d’une seule adresse IP (x.x.x.x) dans une période donnée (16 novembre 2020 9 h à 10 h) :

SELECT  "httprequest"."clientip", "count"(*) "count", "httprequest"."country"
FROM waf_logs
WHERE httprequest.clientip LIKE 'x.x.x.x' and date_format(from_unixtime("timestamp"/1000), '%Y-%m-%d %h:%i:%s') between '2020-11-16 09:00:00' and '2020-11-16 10:00:00'
GROUP BY "httprequest"."clientip", "httprequest"."country"

Exemple de requête Athena exécutée sur les journaux AWS WAF pour compter le nombre de requêtes provenant de toutes les adresses IP au cours de la même période :

SELECT "httprequest"."clientip", "count"(*) "count", "httprequest"."country"
FROM waf_logs
WHERE date_format(from_unixtime("timestamp"/1000), '%Y-%m-%d %h:%i:%s') between '2020-11-16 09:00:00' and '2020-11-16 10:00:00'
GROUP BY "httprequest"."clientip", "httprequest"."country"
ORDER BY "count" DESC

Utiliser le modèle AWS WAF Security Automations pour empêcher les attaques courantes

Utilisez le modèle ](https://aws.amazon.com/solutions/implementations/aws-waf-security-automations/)AWS WAF Security Automations[ pour fournir une protection supplémentaire contre les attaques courantes. Vous pouvez par exemple activer la protection contre :

  • les scanners et les sondes
  • les robots malveillants
  • les adresses IP erronées

Remarque : cette solution utilise d’autres services AWS qui entraînent des coûts.

Protection contre les injections SQL et les scripts inter-site

Pour protéger vos applications contre les attaques par injection SQL et scripts inter-site (XSS), utilisez les moteurs d’injection SQL et de scripts inter-site intégrés. N’oubliez pas que les requêtes peuvent porter sur différentes parties de la requête HTTP, comme l’en-tête HTTP, la chaîne de requête ou l’URI. Configurez les règles AWS WAF pour examiner différentes parties de la requête HTTP par rapport aux moteurs d’atténuation intégrés.

Remarque : les règles des moteurs d’atténuation peuvent être déclenchées par des requêtes légitimes adressées à votre environnement. Pour en savoir plus, consultez Comment puis-je détecter les faux positifs causés par les Règles gérées d’AWS et les ajouter à une liste blanche ?

Restreindre l’accès à partir de CloudFront (si vous utilisez AWS WAF sur CloudFront)

Se protéger contre les attaques par DDoS

Pour plus d’informations sur la protection contre les attaques par déni de service distribué (DDoS), consultez les meilleures pratiques AWS en matière de résilience aux DDoS et les fonctionnalités d’AWS Shield.


AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 3 ans