Passer au contenu

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

Lecture de 9 minute(s)
0

Je souhaite utiliser AWS WAF sur mes ressources afin de me protéger contre les attaques courantes.

Brève description

Pour utiliser AWS WAF sur vos ressources afin de vous protéger contre les attaques courantes, effectuez une ou plusieurs des actions suivantes :

  • Migrez d'AWS WAF Classic vers AWS WAF.
  • Associez votre ressource à une liste de contrôle d'accès Web (ACL Web) dans AWS WAF.
  • Examinez les requêtes entrantes afin d’optimiser vos règles.
  • Utilisez les règles gérées par AWS pour contribuer à la protection contre les attaques courantes.
  • Utilisez le taux de requêtes légitimes pour établir une base de référence pour AWS WAF.
  • Utilisez les automatisations de sécurité pour AWS WAF afin de prévenir les attaques courantes.
  • Utilisez des instructions de règles d'attaque par injection SQL et par scripts inter-site (XSS).
  • Restreignez l'accès depuis Amazon CloudFront.
  • Protégez-vous contre les attaques par déni de service distribué (DDoS).

Résolution

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l’interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre les erreurs liées à AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'AWS CLI.

Migrer d'AWS WAF Classic vers AWS WAF

Si vous utilisez AWS WAF Classic, il est recommandé de migrer vers AWS WAF. Pour plus d’informations, consultez la section Pourquoi migrer vers AWS WAF ?

Associer votre ressource à une ACL Web

Tout d'abord, créez votre ACL Web dans AWS WAF. Puis, associez votre ressource à cette ACL Web afin de permettre à AWS WAF de surveiller les requêtes entrantes. Si vous ne pouvez pas intégrer directement votre ressource à AWS WAF, examinez les alternatives suivantes. Pour plus d'informations, consultez la section Ressources que vous pouvez protéger avec AWS WAF.

Ressources qui peuvent s'intégrer à AWS WAF

Pour les ressources qui peuvent s'intégrer à AWS WAF, utilisez l'une des options d’intégration suivantes :

Ressources qui ne peuvent pas s’intégrer à AWS WAF

Pour les ressources qui ne peuvent pas s’intégrer directement à AWS WAF, utilisez l'une des options d’intégration suivantes :

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

Pour protéger vos ressources, utilisez les journaux d’application, tels que les journaux d’accès de l’Application Load Balancer ou CloudFront, afin de déterminer les modèles de requête courants.

Remarque : Il est recommandé d'utiliser les journaux AWS WAF pour stocker, interroger et analyser les journaux de requêtes HTTP.

Après avoir déterminé les modèles de requête courants, stockez vos journaux sur Amazon Simple Storage Service (Amazon S3) ou Amazon CloudWatch. Pour interroger les journaux et identifier des modèles, utilisez Amazon Athena ou CloudWatch Logs Insights.

Enfin, créez une règle AWS WAF en mode Décompte qui vérifie les requêtes entrantes, puis définissez la règle sur Bloquer :

  1. Créez une instruction de règle NOT dans l'en-tête de l'hôte pour example.com.
    Remarque : Remplacez example.com par votre en-tête d’hôte.
  2. Définissez Action sur Bloquer. AWS WAF bloque les requêtes qui n’incluent pas l'en-tête d'hôte que vous avez spécifié.

Remarque : Cette règle bloque également les requêtes vers le nom de domaine complet qualifié (FQDN) fourni par AWS.

Les exemples suivants présentent des modèles de requête courants que vous pouvez rencontrer.

Requêtes pour des URI qui n'existent pas

Pour reconnaître ce modèle, vous devez connaître tous les URI pris en charge dans votre environnement. Voici un exemple de requête Athena sur les journaux AWS WAF qui comptabilise les requêtes pour chaque URI :

SELECT COUNT("httprequest"."uri") AS URIcount, "httprequest"."uri"
  FROM waf_logs
 GROUP BY "httprequest"."uri"
 ORDER BY URIcount DESC

Voici un exemple de requête CloudWatch sur les journaux AWS WAF qui comptabilise les requêtes pour chaque URI :

fields httpRequest.uri
| stats count(*) as requestCount by httpRequest.uri
| sort requestCount desc

Requêtes contenant différentes valeurs d'en-tête d'hôte

Ce modèle inclut les requêtes dotées d’un en-tête d'hôte HTTP que votre serveur Web ne prend pas en charge. Ce modèle inclut également les requêtes qui contiennent une adresse IP au lieu du nom de domaine de votre site Web.

Voici un exemple de requête Athena sur les journaux AWS WAF qui comptabilise les requêtes incluant différentes valeurs d'en-tête d'hôte :

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

Voici un exemple de requête CloudWatch sur les journaux AWS WAF qui comptabilise les requêtes incluant différentes valeurs d'en-tête d'hôte :

fields @timestamp, @message
| parse @message '{"name":"Host","value":"*"}' as host
| stats count(*) as requestCount by host
| sort requestCount desc

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

Pour utiliser les règles gérées par AWS, identifiez les modèles de requête courants et les attaques contre lesquelles vous souhaitez vous protéger. Puis, ajoutez les groupes de règles gérées par AWS pertinents. Pour vous protéger contre les tâches spécialisées, vous pouvez utiliser les groupes de règles suivants moyennant des frais supplémentaires :

Ajoutez les groupes de règles appropriés à votre ACL Web en mode Décompte. Puis, examinez 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 la règle ne correspond pas à un trafic légitime, désactivez l’option Activer le mode Décompte afin que le groupe de règles bloque le trafic. Pour désactiver une règle spécifique dans le groupe de règles gérées par AWS, sélectionnez Annuler l’action des règles pour cette règle.

Remarque : Les requêtes légitimes adressées à votre environnement peuvent lancer les règles gérées par AWS. Pour plus d'informations, consultez la section Comment personnaliser le comportement des règles gérées par AWS pour AWS WAF.

Utiliser le taux de requêtes légitimes pour établir une base de référence pour votre AWS WAF

Pour vous protéger contre les attaques volumétriques, analysez votre trafic afin d'identifier le nombre de requêtes soumises par des adresses IP clients légitimes. Pour analyser votre trafic, utilisez CloudWatch Logs Insights, les requêtes Athena ou Amazon Quick Sight sur les journaux AWS WAF. Utilisez les informations de l'analyse pour établir une base de référence pour votre AWS WAF. Puis, configurez une instruction de règle fréquentielle pour définir un seuil de requête.

Voici un exemple de requête Athena sur les journaux AWS WAF qui comptabilise les requêtes provenant d'une adresse IP unique au cours d'une période donnée :

SELECT  "httprequest"."clientip", "count"(*) "count", "httprequest"."country"
  FROM waf_logs
 WHERE httprequest.clientip LIKE '10.0.0.0' 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"

Remarque : Remplacez 10.0.0.0 par votre adresse IP, et 2020-11-16 09:00:00 et 2020-11-16 10:00:00 par votre période.

Voici un exemple de requête CloudWatch Insights sur les journaux AWS WAF qui comptabilise les requêtes provenant d'une seule adresse IP :

fields httpRequest.clientIp, httpRequest.country
| stats count(*) as requestCount by httpRequest.clientIp, httpRequest.country
| filter httpRequest.clientIp = "10.0.0.0"

Remarque : Remplacez 10.0.0.0 par votre adresse IP.

Voici un exemple de requête Athena sur les journaux AWS WAF qui comptabilise toutes les requêtes provenant d'adresses IP au cours d'une période donnée :

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

Remarque : Remplacez 2020-11-16 09:00:00 et 2020-11-16 10:00:00 par votre période.

Voici un exemple de requête CloudWatch Insights sur les journaux AWS WAF qui comptabilise les requêtes provenant d'adresses IP au cours d'une période donnée :

fields httpRequest.clientIp, httpRequest.country
| stats count(*) as requestCount by httpRequest.clientIp, httpRequest.country
| sort requestCount desc

Utiliser les automatisations de sécurité pour AWS WAF afin de prévenir les attaques courantes

Pour garantir une protection supplémentaire contre les attaques courantes, vous pouvez utiliser les automatisations de sécurité pour AWS WAF.

Remarque : Cette solution utilise d’autres services AWS susceptibles d’entraîner des coûts.

Utiliser les instructions de règles d’attaque par injection SQL et XSS

Pour protéger vos applications contre les attaques par injection SQL et les attaques XSS, utilisez des instructions de règles d'attaque intégrées pour l’injection SQL et XSS. Les attaques peuvent se produire 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 vos règles AWS WAF pour inspecter les différentes parties de la requête HTTP par rapport aux instructions des règles d'attaque.

Remarque : Les requêtes légitimes adressées à votre environnement peuvent déclencher les instructions de règles d'attaque. Pour plus d’informations, consultez la section Comment puis-je détecter les faux positifs causés par les règles gérées par AWS ?

Restreindre l'accès depuis CloudFront

Vous pouvez restreindre l’accès en fonction des adresses IP CloudFront. Puis, ajoutez un en-tête personnalisé dans CloudFront pour les requêtes d’origine. Sur l’origine, n’autorisez l’accès que si l’en-tête et la valeur personnalisés sont présents. Si l'origine est un Application Load Balancer ou un API Gateway, utilisez AWS WAF sur l'origine. Cette action autorise les requêtes contenant l'en-tête et la valeur personnalisés.

Protection contre les attaques par DDoS

Pour vous protéger contre les attaques par DDoS, consultez la section Bonnes pratiques d’AWS en matière de résilience face aux attaques DDoS et Fonctionnalités d’AWS Shield.

Informations connexes

Modèle de responsabilité partagée

Gestion des faux positifs dans AWS WAF