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

Date de la dernière mise à jour : 27/11/2020

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

Résolution

Migrez d'AWS WAF Classic vers AWS WAF (le cas échéant)

Si vous utilisez AWS WAF Classic, il est recommandé de migrer vers AWS WAF. Pour effectuer cette migration, vous pouvez utiliser l' outil de migration automatisée. Pour plus d'informations, consultez Pourquoi migrer vers AWS WAF ?

Exécutez des tests d'intrusion sur votre application pour identifier les vulnérabilités

Chaque application reçoit son propre type de demandes. Par conséquent, les règles de pare-feu qui protègent votre application doivent être personnalisées.

Exécutez des tests d'intrusion sur votre application pour comprendre ses vulnérabilités spécifiques. Pour plus d'informations, consultez :

Passez en revue les demandes entrantes pour optimiser vos règles personnalisées

Avant de créer des règles personnalisées pour protéger votre application, passez en revue les demandes entrantes dans votre environnement.

Tout d'abord, générez des journaux en utilisant :

  • AWS WAF
  • Amazon CloudFront
  • Application Load Balancer (équilibreur de charge d'application)
  • Amazon API Gateway

Ensuite, stockez ces journaux sur Amazon Simple Storage Service (Amazon S3). Enfin, utilisez Amazon Athena pour interroger les journaux et identifier les modèles. Par exemple, vous pouvez voir des modèles tels que :

  • Demandes adressées à votre environnement pour les 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 effectuée sur les journaux AWS WAF pour compter les demandes pour chaque URI :
SELECT count("httprequest"."uri") as URIcount, "httprequest"."uri"
FROM waf_logs
GROUP BY "httprequest"."uri"
ORDER BY URIcount DESC
  • Demandes contenant un en-tête HTTP Host non pris en charge par votre serveur web -OU - requêtes qui contiennent une adresse IP au lieu du nom de domaine de votre site Web
    • Exemple de requête Athena effectuée sur les journaux AWS WAF pour compter les demandes 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 vérifier que la règle est configurée pour correspondre à ces requêtes. Ensuite, basculez la règle en mode BLOC.

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

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

Toutes les demandes adressées à votre environnement qui n'ont pas d'en-tête Host « www.example.com » sont désormais bloquées. 
Remarque : Cette règle bloque également les demandes adressées au nom de domaine entièrement qualifié (FQDN) fourni par AWS.

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

Utilisez les règles gérées par AWS pour empêcher les attaques courantes qui s'appliquent à la plupart des applications, y compris les demandes qui :

  • Ne contient pas d'agent utilisateur
  • Représentent les demandes de bot
  • 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. Assurez-vous de choisir « Activer le mode Count » dans le groupe de règles. Ensuite, passez en revue les journaux AWS WAF et les métriques CloudWatch pour déterminer si la règle gérée correspond à un trafic légitime. Si ce n'est pas le cas, basculez le groupe de règles sur 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 par AWS, choisissez « Remplacer l'action des règles » pour cette règle.

Remarque : les règles gérées par AWS peuvent être déclenchées par des demandes légitimes adressées à votre environnement. Pour plus d'informations, consultez Comment détecter les faux positifs causés par les règles gérées par AWS et les ajouter à une liste blanche ?

Important : les règles gérées par 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 par AWS ajoutent une autre couche de sécurité à vos applications. Toutefois, les groupes de règles gérées par AWS ne sont pas destinés à remplacer vos responsabilités de sécurité, qui sont déterminées par les ressources AWS sélectionnées. Consultez le modèle de responsabilité partagée pour vous assurer que vos ressources dans AWS sont correctement protégées.

Baser votre AWS WAF sur le taux de demandes légitimes

Effectuez une analyse de votre trafic pour identifier le nombre de demandes faites par les adresses IP des clients légitimes à l'aide d' Amazon Athena ou d' Amazon Quicksight dans les journaux AWS WAF. À l'aide des informations que vous obtenez de cette analyse, basez votre AWS WAF sur le taux de demandes faites par un client légitime. Ensuite, définissez un seuil tout en configurant la règle basée sur les taux d'AWS WAF.

Exemple de requête Athena effectuée sur les journaux AWS WAF pour compter le nombre de demandes provenant d'une seule adresse IP (x.x.x.x) entre une période donnée (16 novembre 2020, 9h-10h) :

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 effectuée sur les journaux AWS WAF pour compter le nombre de demandes de toutes les adresses IP entre 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 prévenir les attaques courantes

Utilisez le modèle AWS WAF Security Automations pour fournir une protection supplémentaire contre les attaques courantes. Par exemple, vous pouvez activer la protection contre :

  • Scanners et sondes
  • Mauvais bots
  • Adresses IP incorrectes

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

Protection contre l'injection SQL et les scripts inter-sites

Pour protéger vos applications contre les attaques par injection SQL et XSS (cross-site scripting), utilisez les moteurs intégrés d'injection SQL et de script inter-site. Rappelez-vous que des attaques peuvent être effectuées sur différentes parties de la requête HTTP, telles que l'en-tête HTTP, la chaîne de requête ou l'URI. Configurez les règles AWS WAF pour inspecter 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 demandes légitimes adressées à votre environnement. Pour plus d'informations, consultez Comment détecter les faux positifs causés par les règles gérées par AWS et les ajouter à une liste blanche ?

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

Protéger contre les attaques DDoS

Pour plus d'informations sur la protection contre les attaques par déni de service (DDoS), consultez Meilleures pratiques AWS pour la résilience aux attaques par déni de service (DDoS) et Fonctionnalités AWS Shield.</p


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?