Suite à de nombreuses attaques contre notre site web et en se basant sur les réflexions que nous avons pu avoir lors de la résolution de notre incident.
Nous avons décidé de vous donner quelques idées de règles Pare-Feu afin de vous protéger. Afin de gérer au mieux et le plus en amont possible ce traffic illégitime, nous avons établi des règles depuis notre CDN Cloudflare que nous vous conseillons fortement.
Pour rappel, comme pour tous nos clients, notre site est isolé des autres pour ne pas impacter ou être impacté par d'autres. Une limite de ressources (CPU, RAM, I/O, ..) est donc défini. Suite à ce DDoS, le site web s'est donc mis en "sécurité" refusant ainsi toute demande dépassant ce seuil.
Peu d'impact donc, sauf que le site n'était que peu disponible pour nos vrais visiteurs.
Le but était donc de filtrer le trafic légitime et de bloquer le reste.
Une option simple et efficace dans la plupart des cas existe déjà sur Cloudflare et elle s'appelle le mode 'Under attack' permettant de faire un filtre systématique sur tous vos visiteurs.
Malheureusement, dans notre case, cette option n'était pas suffisante pour stopper pleinement l'attaque DDoS. De plus, elle a la contrainte de faire perdre du temps à de potentiels clients et donc de les faire partir.
Plusieurs axes de réflexion ont été étudiés :
- Bloquer certains pays entièrement, pour lesquelles nous n'avons pas ou peu de traffic. Cette règle, un peu barbare, aura le mérite d'être efficace.
- Bloquer le type de requête demandée en masse par les bots de notre attaquant. Efficace mais bloquera toute demande légitime du même genre.
- Utiliser des fonctionalités natives de Cloudflare (Bots connus, Menace Score, ..)
Plutôt que de bloquer un pays ou une requête entièrement, nous avons décidé d'empiler plusieurs règles afin de bloquer par pallier un maximum de requêtes non souhaitées.
Pour cela, nous avons dû regarder en détails les requêtes de notre attaquant.
1 - Filtrage HTTP
Il a été repéré que ces requêtes étaient toutes orientées vers notre page /login et portés par l'ancienne version du protocole HTTP/1.
Comme indiqué, nous ne pouvons bloquer les demandes vers /login au risque de bloquer nos vrais clients. Nous avons donc décidé de bloquer toute requête portée par HTTP 1, 1.1 ou 1.2. Notre site étant entièrement compatible HTTP/2 et même HTTP/3.
Le risque est donc de bloquer certains clients utilisant un navigateur tellement vieux qu'il ne gère pas le HTTP/2, mais également d'autres API partenaires utilisant encore du HTTP/1 (ex. Googlebot, bingbot, ..)
Une règle de filtrage avec des exceptions à donc été créée permettant de bloquer près de 30 millions de requêtes en 24heures.
Exemple de requêtes reçue par millions :
2 - Filtrage selon le score IP
Cloudflare défini un "Menace Score" pour chaque IP qu'il repère. Globalement, tout serveur ou personne ayant un comportement légitime aura un score de 0. L'erreur étant humaine, nous avons exclu les IPs supérieures ou égale au score de 2.
3.5 millions de requêtes économisés en 24 heures.
Exemple de remontée de filtrage :
3 - Filtrage temporaire par pays
Bien que nous ne souhaitions pas bloquer de pays, lors de nos recherches nous avons aperçu un pays que nous ne connaissions pas : TOR.
Cloudflare semble filtrer la navigation en oignon comme un pays à part entière.
Notre trafic devant être légitime, nous avons exclu ce 'pays' et économisé 500'000 requêtes supplémentaires.
Exemple de filtrage par pays :
4 - Filtrage sur les bots connus
Nous avons tenté de mettre en place cette règle proposée par Cloudflare, pensant qu'il s'agissait d'IPs connus comme étant des 'bots' liés au DDoS, mais au final elle est plutôt orienté bots renommés tels que pingdom, linkedin, facebook, google, etc ...
Attention avec ce blocage, l'impact sur votre SEO peut être important si plus aucun robot ne peut venir indexer votre site web. Rappelez-vous de cela lors de la mise en place de vos exceptions concernant la règle 1 (HTTP).
Cloudflare propose, en plus de la règle que vous pouvez régler, une option directement pour lutter contre ces bots :
Cependant, tout comme la règle cela peut bloquer votre supervision ou certains de vos outils. Dans notre cas, cela à posé de nombreux problèmes et n'a pas bloqué de robots dangereux. Nous avons donc désactivé cette règle.
Egalement, en cas d'attaque de type DoS et non DDoS (donc via une seule IP ou via un nombre très limité) vous pouvez tout à fait bloquer à l'unité ou par rangée une liste d'IPs, qu'elles soient v4 ou v6.
Un article complémentaire, qui pourrait vous intéresser, concernant le blocage d'un pays mais au niveau du Firewall CSF
5 - Outils d'analyses
Si vous souhaitez comprendre comment rendre efficace vos règles de Pare-Feu, Cloudflare vous propose un outil d'analyses très complet vous permettant de cibler aux mieux vos axes d'amélioration
Ayez notamment accès à la bande passante économisée sur une plage donnée et ainsi voir l'intérêt de vos règles et les impacts en cas de changement :
Le 'Client HTTP' utilisé et type de contenu visité peuvent également vous permettre de voir si le trafic à un comportement habituel
Vous pouvez également voir heure par heure et en temps réel votre nombre de visiteurs et les requêtes associées :
D'autres articles fournis par CF peuvent vous être utiles :
https://developers.cloudflare.com/firewall/known-issues-and-faq#why-isnt-my-regular-expression-pattern-matching-working
https://developers.cloudflare.com/firewall/cf-firewall-rules