DDoS Angriffe nicht mittlerweile nicht mehr wegzudenken. Doch viele dieser Attacken sind meistens kleiner als sie aussehen. In diesem Beitrag zeige ich Dir, wie Du Dich dagegen schützen kannst.

Vorerst: Ich nutze hierfür kein Cloudflare und Du solltest es auch nicht tun. Du wirst im Angriffsfall leider nicht mehr als ein paar Filter aktivieren und den Support kontaktieren können.

Schritt 1: Schaue Dir Deine aktuelle Infrastruktur an

Wo läuft Dein Webserver? Gibt es dort schon eine DDoS Protection? In den meisten Fällen nur für Layer 4, also nicht für den Application Layer, auf dem unter anderem Webserver aufbauen. Schaue dir auch die verfügbaren Ressourcen auf Deinem Server an. Wie viele Kerne und wie viel Arbeitsspeicher hat dieser?

Schritt 2: Die Möglichkeiten der Filterung evaluieren

  • Loadbalancing
  • JavaScript Validierung der User
  • GEO Blocking
  • Analyse der einzelnen Benutzer(User Agents, Quell ASN usw.)
Loadbalancer sind eine gute Möglichkeit, große Lasten auf verschiedene Server zu verteilen. HAProxy ist extrem flexibel und einfach einzurichten. Außerdem unterstützt die Software ebenfalls TCP Loadbalancing. Ebenfalls können Limitierungen pro IP Adresse fest definiert werden.
Eine weitere Möglichkeit ist das DNS Loadbalancing: Einer Domain werden mehrere IP Adressen hinzugefügt. Der DNS Server weist dann einem Besucher der Webseite eine zufällige IP Adresse zu, mit der er sich zur Webseite verbindet. Leider erkennt keiner in diesem Setup einen Ausfall. Wenn der zugewiesene Server ausfällt, kann die Webseite nicht aufgerufen werden, bis der DNS Cache abläuft und eine neue IP Adresse zugewiesen wird. (Vorausgesetzt, es wird nicht die gleiche zugewiesen).

JavaScript Validierung

Cloudflare, Incapsula, Akamai und andere große Anti-DDoS Anbieter nutzen diese Strategie, um Bots von Usern zu trennen. Leider ist es relativ einfach, diese Checks zu umgehen. Wenn du es allerdings richtig machst, könnten damit einige, wenn nicht fast alle schädlichen Anfragen abgehalten werden. Das ganze System funktioniert folgendermaßen:
Falls kein JavaScript ausgeführt wird, wird auch die richtige Webseite nicht geladen.

GEO Blocking

Eine Blockierung per Land ist mittlerweile relativ selten, da es meistens sehr wenig Wirkung gezeigt hat. Vorallem dann, wenn die Länder vom Webserver und nicht von einer Firewall blockiert werden. Also verwende es bitte nicht. Es wird Dir nur noch mehr Arbeit machen, da ständig IP Adressen aus anderen Ländern auch nach Europa bzw. Deutschland umgezogen werden.

Analyse der einzelnen Benutzer

“Mozilla/5.0 (Windows NT 10.0; Win64; x64)

So sieht ein normaler User Agent aus, also die Zeichenkette, die den genutzen Client/Browser identifiziert. Interessant ist allerdings, dass die meisten Angriffe User Agents nutzen, die aus einzelnen Buchstaben aus dem Alphabet bestehen. Kein Browser der Welt würde sich als “x” oder “y” bei einem Webserver ausgeben. Solch eine Analyse kostet allerdings Performance, die eigentlich an einer anderen Stelle gebraucht wird. Deswegen solltest Du eine Möglichkeit finden, die wichtigsten Merkmale schnell zu erkennen und falls nötig zu blockieren. Hierzu lässt sich übrigens NGINX mit der entsprechenden Konfiguration wunderbar nutzen.

Auch eine Blockierung per ASN(Autonomous System Number) ist möglich. Jede IP Adresse bzw. jedes IP Subnet muss, wenn es global geroutet werden soll, einem ASN angehören. Ein ASN fasst sehr viele Netzwerke und IP-Adressen zusammen. Jedes größere IT-Unternehmen besitzt solch einen ASN.

Um diese Methode der Filterung zu nutzen, solltest du mit Deinem Hosting Provider sprechen. Eine Filterung der ASN Nummer kann direkt im BGP Protokoll mittels FlowSpec passieren. FlowSpec ist ein RFC Standard, der es möglich macht, direkt während des IP Routings bestimmte Pakete zu filtern.

Hast Du schon einmal UDP Traffic auf Port 443 gesehen?

Nein? Gut so, denn das UDP Protokoll gehört hier nicht hin. Darüber denkt fast niemand nach, Protokolle, die überhaupt nicht für den Service bestimmt sind, zu blockieren.

Warum hilft denn eine Firewall nicht gegen DDoS Angriffe?

Wenn Deine Netzwerkkarte maximal 1Gbps Durchsatz hat und der Angriff größer als 1Gbps ist, hast Du schlechte Karten. Deshalb sollten volumetrische Angriffe von Deinem Upstream Provider bzw. Hosting Provider blockiert werden. Du wirst den Traffic nicht entfernen können, er ist direkt für Deinen Server bestimmt. Mit einer Firewall lässt sich höchstens der angegriffene Service etwas entlasten, aber nicht mehr.

Wie sieht solch ein Angriff in der Praxis genau aus?

Hier sehen wir einen UDP Flood auf meinen Webserver, der sofort vom Filter erkannt wurde.

In diesem Beispiel haben wir es mit einem direkten Angriff auf meinen Webserver zu tun. 75000 requests pro Sekunde mögen hier wenig aussehen; fast kein normaler Webserver kann diese allerdings konstant aushalten.

Ein DDoS Filter ist niemals perfekt, sollte aber gängige Angriffe erkennen

Täglich werden neue Angriffsvektoren erfunden und ausprobiert. Zwar gibt es intelligente Filter, die sich neuen Methoden anpassen, aber auch diese kommen an ihre Grenzen. Menschlische Intervention wird auch hier noch lange gebraucht werden. Gerade im Bereich Gameserver gibt es viele Möglichkeiten, den Schutz zu umgehen. Simple UDP/TCP Floods müssen allerdings erkannt werden, da diese die Basis für automatische Filtermethoden sind.

Blackholing ist kein DDoS Schutz!

Viele Anbieter schützen lieber ihr eigenes Netzwerk und priorisieren nicht die Erreichbarkeit der Server des Kunden. Bei einem zu großen Angriff wird eine Blackholing Regel erstellt, die sowohl den schädlichen als auch den legitimen Traffic blockiert. Zwar wird es DDoS genannt, es ist aber keiner. Der Name darf nur dann gegeben werden, wenn legitimer Traffic nicht oder nur minimal beeinflusst wird.

Und wenn die Angreifer meine Webseite doch offline halten - was soll ich dann tun?

Erstelle unter Linux oder Windows ein Packet Capture mit tcpdump bzw. für Windows Wireshark. Dort werden alle Anfragen aufgezeichnet und bestimmte Merkmale mit gespeichert.
Die Angreifer nutzen mittlerweile auch Proxies, die IPv6 Support haben. Bedenke dies bitte auch bei den oben genannten Schritten, jegliche Regeln und Filterungen sollten auch, sofern Du IPv6 verwendest, angewandt werden. Schaue Dir die Paketgröße und unnormales Verhalten der Anfragen an. Am Anfang mag es sehr unübersichtlich erscheinen, aber mit der Zeit wirst Du immer mehr nicht valide Anfragen erkennen.

Teste Deine Filter regelmäßig

Natürlich nur dann, wenn es dir Dein Hosting Provider erlaubt oder der Angriff so klein ist, dass andere Kunden dadurch nicht beeinträchtigt werden. Zeichne jeden Angriff, der nicht gefiltert wird, auf und schaue ihn dir wieder in Ruhe an. Lasse auch andere Personen dich angreifen, damit du siehst, ob fremde Methoden erkannt werden. Diese Strategie nutze ich sehr oft, um zu sehen, ob meine Änderungen Wirkung zeigen. Bitte gebe aber nicht mit Deinem Schutz an, sondern frage einfach in einigen bekannten “Pentesting” Kreisen nach Leuten, die dich angreifen wollen.

Deep Packet Inspection ist ein NoGO

Es besteht die Möglichkeit, eine gewollte MitM(Man-in-the-middle-attack) durchzuführen. Hierbei wird jeglicher TLS Traffic entschlüsselt und überprüft. Anschließend wird dieser wieder verschlüsselt und zurück an den Client gesendet. Sobald darüber Zahlungsverkehr laufen soll, ist in den meisten Fällen eine PCI Compliance erforderlich, die bestätigt, dass entschlüsselte Daten nicht ausgelesen werden können und der Service für den Zahlungsverkehr sicher genutzt werden kann.

Wir reden hier immerhin von Kreditkarten und Passwörtern

Desweiteren kostet das Entschlüsseln unnötig Performance. Bitte verwende diese Methode nicht, es wird Dir keinen großen Vorteil bringen.
Die oberen genannten Punkte sollten Dir gezeigt haben, dass ein guter DDoS Schutz nicht einfach ist und einiges an Zeit braucht, bis man erste große Ergebnisse sehen kann. Falls du nichts davon umsetzen kannst, bleibt Dir keine Möglichkeit als Deine Webseite durch einen Anti DDoS Provider schützen zu lassen. Der Markt ist mittlerweile sehr groß, also informiere dich genau über Preise und die genauen Filtermethoden, besonders wie oben erwähnt die Deep Packet Inspection.