Die Herausforderung
Die öffentliche Website eines Kunden wird häufig von automatisierten Bots besucht.
Ein automatisierter Bot, oder einfach Bot, ist eine Softwareanwendung oder ein Skript, das automatisiert und wiederholt Aufgaben im Internet ausführt. Bots sind darauf ausgelegt, verschiedene Funktionen zu erfüllen, und werden in der Regel so programmiert, dass sie mit Websites, Anwendungen oder anderen Online-Diensten interagieren. Sie können sowohl für legitime als auch für illegale Zwecke erstellt werden.
Der Kunde hat folgendes Problem: Einige Bots oder andere nicht identifizierte Webclients brauchen die Server-Ressourcen auf und verlangsamen die Reaktionsgeschwindigkeit der Server.
Der Kunde bat um eine Lösung dieses Problems, bei der möglichst keine Änderungen an der vom Webserver bereitgestellten Infrastruktur vorgenommen werden sollten.
Die Lösung
Wir haben uns für AWS WAF entschieden, weil sie sich leicht in das Setup des Kunden integrieren läßt und eine vordefinierte AWS-verwaltete Regelgruppe bietet (AWS WAF Bot Control rule group), die verschiedene Arten von Bots erkennen kann. Außerdem lassen sich sowohl ratenbasierte Regeln als auch Regeln auf Grundlage bestimmter angefragter Attribute anwenden – wie zum Beispiel HTTP-Methoden, URL-Pfade, HTTP-Header-Felder oder IP-Adressbereiche.
Bot-Kategorien
Liste aller Bot-Kategorien, die AWS WAF Bot Control bekannt sind:
Kategorie: Werbung
Beschreibung: Bots für Werbezwecke
Kategorie: Archivierung
Beschreibung: Bots für Archivierungszwecke
Kategorie: Content Fetcher
Beschreibung: Bots, die im Auftrag eines Nutzers Inhalte abrufen
Kategorie: E-Mail-Client
Beschreibung: E-Mail-Clients
Kategorie: Http-Bibliothek
Beschreibung: HTTP-Bibliotheken, die von Bots verwendet werden
Kategorie: Link Checker
Beschreibung: Bots, die nach defekten Links suchen
Kategorie: Verschiedenes
Beschreibung: Verschiedene Bots
Kategorie: Monitoring
Beschreibung: Bots für Überwachungszwecke
Kategorie: Scraping Framework
Beschreibung: Web-Scraping-Frameworks
Kategorie: Suchmaschine
Beschreibung: Suchmaschinen-Bots
Kategorie: Security
Beschreibung: Security bots
Kategorie: SEO
Beschreibung: Bots zur Suchmaschinenoptimierung
Kategorie: Soziale Medien
Beschreibung: Bots, die auf Social-Media-Plattformen zur Bereitstellung von Inhaltszusammenfassungen eingesetzt werden
Kategorie: KI
Beschreibung: Bots mit KI-Funktionen
Kategorie: Automatisierter Browser
Beschreibung: Überprüft das Token der Anfrage auf Hinweise, dass es sich um einen automatisierten Client-Browser handeln könnte
Kategorie: Bekanntes Bot-Datacenter
Beschreibung: Sucht nach Rechenzentren, die typischerweise von Bots verwendet werden
Kategorie: Non Browser User Agent
Beschreibung: Sucht nach User-Agent-Zeichenfolgen, die augenscheinlich nicht von einem Webbrowser stammen
Vorbereitende Schritte
Die nächsten Schritte werden in einer speziellen Testumgebung durchgeführt, bevor das Setup in der Produktion eingesetzt wird.
Wir schreiben zunächst einen Terraform-Code, der einen Application Load Balancer (ALB) zur Bereitstellung der WAF erstellt. Dabei ordnen wir die bestehenden Webserver einer Zielgruppe zu, an die der ALB den Datenverkehr weiterleiten wird. Der ALB fungiert dann als zusätzliche Reverse-Proxy-Schicht vor den Webservern.
Wir erstellen außerdem einen Route 53-Alias-A-Datensatz, der auf den ALB verweist, und ein TLS-Zertifikat im AWS Certificate Manager (ACM) für diesen DNS-Eintrag, da wir für ALB nur HTTPS-Datenverkehr zulassen. HTTP-Verkehr wird mit dem HTTP-Statuscode 302 fortlaufend auf HTTPS umgeleitet (der HTTP Strict-Transport-Security-Antwort-Header wird von der Caddy-Reverse-Proxy-Schicht hinter dem ALB verarbeitet).
Darüber hinaus werden die ALB- und WAF-Protokolle so konfiguriert, dass sie an Datadog gesendet werden.
AWF-Regeln hinzufügen
Bestimmte URLs filtern
Zunächst fügen wir der WAF eine Filterregel hinzu (block_webfonts_path). Sie blockiert den URI-Pfad /webfonts/2775253ec3a5.css zu einer Ressource, die auf den Webservern nicht mehr existiert, aber von einigen fehlkonfigurierten Ressourcen noch immer referenziert wird.
Bot-Kontrolle
Anschließend fügen wir die von AWS WAF Bot Control verwaltete Regelgruppe AWSManagedRulesBotControlRuleSet zur WAF hinzu und wählen die Inspektionsstufe „common“. Mit dieser Inspektionsstufe werden Bots von der WAF mittels statischer Analyse der Anfragedaten erkannt.
Stimmt die erste bot-Regel nicht überein, wird die zweite bot-Regel „bot-control-default“ angewendet.
Mit dieser Regel wird Folgendes erreicht:
Wenn eine Anfrage mit der Signatur eines verifizierten Bots übereinstimmt, zum Beispiel der Microsofts Bing-Suchmaschine, wird die Anfrage von der WAF gekennzeichnet, und anschließend wird die nächste Regel aufgerufen (Regeln, die nur Kennzeichnungen vornehmen, sind keine abschließenden Regeln – das bedeutet: Die nächste Regel wird auch dann aufgerufen, wenn es eine Übereinstimmung gibt.)
Wenn die Regel zutrifft, werden die folgenden Bezeichnungen hinzugefügt:
Wenn die WAF bei einer Anfrage keine Übereinstimmung mit den ihr bekannten Signaturen verifizierter Bots feststellen kann, stuft sie diese Anfrage als nicht verifiziert ein und blockiert sie. Es wird keine weitere WAF-Regel aufgerufen.
In diesem Szenario, bei dem wir vor allem verhindern wollen, dass den Webservern die Ressourcen ausgehen, beginnen wir mit der restriktivsten von Bot Control verwalteten Regelgruppe.
Wir wollen nicht nur nicht verifizierte Bots blockieren, sondern auch verifizierte Bots. Dafür gibt es die Regel bot-control-block-verified.
Diese Regel sucht nach Anfragen, die mit awswaf:managed:aws:bot-control:bot:verified gekennzeichnet sind und blockiert sie.
Ratenbasierte Regeln
Als letzte Regel fügen wir eine ratenbasierte Regel (rate-based-captcha) hinzu, die folgende Bedingung erfüllt:
Wenn eine bestimmte Quell-IP innerhalb von 5 Minuten mehr als 500 Anfragen sendet, wird dem Kunden für 5 Minuten ein CAPTCHA angezeigt.
Finale Regelgruppe
Unsere finale Regelgruppe sieht so aus:
Bezeichnung der Regel: block_webfonts_path
Regelpriorität: 0
Zweck: Blockiert URI-Pfad
Bezeichnung der Regel: bot-control-default
Regelpriorität: 1
Zweck: Blockiert nicht verifizierte Bots, kennzeichnet verifizierte Bots
Bezeichnung der Regel: bot-control-block-verified
Regelpriorität: 2
Zweck: Blockiert verifizierte Bots durch übereinstimmende Kennzeichnung
Bezeichnung der Regel: rate-based-captcha
Regelpriorität: 3
Zweck: Blockiert IP-Quelladressen, die das Ratenlimit überschreiten
Nach der Installation der Regelgruppe in der Testumgebung haben wir einige Tage abgewartet, um genügend Protokolle sammeln zu können. Mit diesen Protokollen konnten wir einige Statistiken zum Datenverkehr erstellen und überprüfen, ob es sich um falsch-positive Befunde (Fehlalarme – WAF blockiert Anfragen, die nicht zu beanstanden sind) oder falsch-negative Befunde handelt (WAF erkennt Schadverkehr nicht).
Wir haben keine Probleme festgestellt, so dass wir den DNS-Eintrag in der Produktionsumgebung auf den Produktions-ALB verweisen konnten, an den auch die WAF angeschlossen ist. Die DNS-Änderung leitet dann den Datenverkehr der Produktionsumgebung an die WAF weiter.
Datadog WAF-Protokolle – Beispielansichten
Resultate und Vorteile
Mit dieser Regelgruppe können wir die Anzahl unerwünschter Anfragen, die die Webserver erreichen, reduzieren und damit weitere Ausfälle verhindern.
Über PCG
Die Public Cloud Group (PCG) unterstützt Unternehmen bei ihrer digitalen Transformation durch den Einsatz von Public Cloud-Lösungen.
Mit einem Portfolio, das darauf ausgerichtet ist, Unternehmen aller Größe auf ihrer Cloud Journey zu begleiten, sowie der Kompetenz von zahlreichen zertifizierten Expert:innen, mit denen Kunden und Partner gerne zusammenarbeiten, positioniert sich PCG als verlässlicher und vertrauenswürdiger Partner der Hyperscaler.
Als erfahrener Partner der drei relevanten Hyperscaler (Amazon Web Services (AWS), Google Cloud und Microsoft Cloud) hält PCG die höchsten Auszeichnungen der jeweiligen Anbieter und berät Sie als unsere Kunden in Ihrer Cloud Journey unabhängig.