Einsatz von Cloudflare-Protokollen (EPF) zur Untersuchung von DDoS-Datenverkehr (nur Enterprise)

Hier lernen Sie, wie Sie Quellen von böswilligem Datenverkehr durch effektives Sortieren von Cloudflare-Protokollen (vormals EPF) erkennen können. 


Übersicht

Mit Cloudflare-Protokollen (vormals EPF) haben Sie Zugang auf nützliche Daten zur Analyse von Datenverkehr, der eventuell Muster aufweist, die auf einen DDoS-Angriff hinweisen können. Sie können diese Art von Analyse vornehmen, indem Sie Ihre Cloudflare-Protokolldaten sortieren. Gehen Sie zuerst die nachstehend aufgeführten Schritte durch und sehen Sie sich das Workflow-Beispiel an.

Bevor Sie beginnen, brauchen Sie:


Schritt 1: Sammeln der nötigen Informationen vor Abfragen der Cloudflare-Protokolle

Stellen Sie die folgenden Informationen zusammen:

  1. E-Mail-Adresse des Zonenadministrators
  2. Zonenkennung (zu finden unter Übersicht > Zonen-ID)
  3. Client-API-Schlüssel
  4. Startzeit (Beispielformat: 1529171100)
  5. Endzeit (Beispielformat: 1529171100)

Für die Zwecke dieses Tutorials können Sie die folgende Website benutzen, um Zeiten in Unix-Zeit zu konvertieren: https://www.epochconverter.com/

Schritt 2: Herunterladen und Speichern der Protokolle

Hinweis: Der Cloudflare-Endpunkt hat ein Zeitbereichslimit von 1 Stunde, und die Protokolldateigröße muss unter 1 GB pro Anfrage liegen. Wenn die Dateigröße 1 GB übersteigt, wird der Download bei 1 GB abgebrochen, auch wenn protokollierte Ereignisse aus dem angefragten Zeitbereich nicht enthalten sind. Um Abschneiden der Protokolle zu vermeiden, sollten Sie die Zeit von 1 Stunde in 45 Minuten usw. ändern, bis die Protokolldateigröße unter 1 GB liegt.

Option 1:

Download *aller* Felder aus Cloudflare-Protokollen, Speichern in els.txt:

Vorlage:

curl -sv -o els.txt -H "X-Auth-Email: email" -H "X-Auth-Key: api key" "https://api.cloudflare.com/client/v4/zones/zone id/logs/received?start=starttime&end=endtime&fields=(curl -s -H "X-Auth-Email: email" -H "X-Auth-Key: api key" "https://api.cloudflare.com/client/v4/zones/zone id/logs/received/fields" | jq '. | to_entries[] | .key' -r | paste -sd "," -)"

Beispiel (mit Werten):

curl -sv -o els.txt -H "X-Auth-Email: monkey@bannana.com" -H "X-Auth-Key: api key" "https://api.cloudflare.com/client/v4/zones/5b5f0xxxcbfbaxxxxxx0416d22f7b/logs/received?start=1529171100&end=1529171100&fields=(curl -s -H "X-Auth-Email: monkey@bannana.com" -H "X-Auth-Key: api key" "https://api.cloudflare.com/client/v4/zones/zone id/logs/received/fields" | jq '. | to_entries[] | .key' -r | paste -sd "," -)"

Option 2:

Download *spezifischer* Felder aus Cloudflare-Protokollen, Speichern in els.txt:

Dieser Befehl enthält nur die folgenden Felder in den angefragten Protokollen: CacheCacheStatus, CacheResponseBytes, CacheResponseStatus, CacheTieredFill, ClientASN.

Die vollständige Liste mit Cloudflare-Protokollfeldern finden Sie hier

Vorlage:

curl -sv -o els.txt-H "X-Auth-Email:email" -H "X-Auth-Key:api key" "https://api.cloudflare.com/client/v4/zones/zone id/logs/received?start=starttime&end=endtime&fields=CacheCacheStatus,CacheResponseBytes,CacheResponseStatus,CacheTieredFill,ClientASN

Beispiel (mit Werten):

curl -sv -o els.txt-H "X-Auth-Email:monkey@bannana.com" -H "X-Auth-Key:api key" "https://api.cloudflare.com/client/v4/zones/xx5x0xxxc45baxxxxxx0x6d23fxx/logs/received?start=1529171100&end=1529171100&fields=CacheCacheStatus,CacheResponseBytes,CacheResponseStatus,CacheTieredFill,ClientASN

Schritt 3: Sortieren der Protokolle

Sortieren Sie die Protokolle nach Feldwerten und speichern Sie sie in einer Datei.

Sortieren nach HTTP-200-Antworten, Ausgabe in eine Datei mit der Bezeichnung els-200.txt:

~$ cat els.txt| grep ":200," > els-200.txt

Sortieren nach HTTP-525-Antworten, Ausgabe in eine Datei mit der Bezeichnung els-525.txt:

~$ cat els.txt| grep ":525," > els-525.txt

Woher kommt der Feldwert „:525,“?

Die Struktur :525, (Doppelpunkt, Statuscode, Komma) ist eindeutig für das EdgeResponseStatus-Feld. Wenn Sie einfach nach dem HTTP-Statuscode 525 ohne Doppelpunkt und abschließendes Komma suchen, würden auch Protokolleinträge eingeschlossen, die die Ziffernfolge 525 in anderen Feldern wie z. B. in EdgeStartTimeStamp haben, das viele Zahlen enthält, zu denen auch die Ziffernfolge 525 gehören könnte.

Hinweis: Die Ausgabedateien (els-200.txt und els-525.txt) sind im ursprünglichen Zustand nicht gut lesbar. Um sie in einem besser lesbaren Format zu sehen, sollten Sie im folgenden Befehl „jq“ verwenden:

~$ cat els-525.txt | jq '.'

Zählen der Anfragen nach Feldern und Ausgabe in eine Datei

In diesem Beispiel zählen wir Anfragen nach SSL-Protokollversion, die durch das ClientSSLProtocol-Feld in den Cloudflare-Protokollen gekennzeichnet ist (beachten Sie nachstehend den Punkt vor dem Feldnamen).

~$ jq -r .ClientSSLProtocol els-200.txt |sort -n |uniq -c |sort -n > ClientSSLProtocol.txt
~$ cat ClientSSLProtocol.txt

Beispielausgaben:

Die Felder ClientRequestURI, ClientIP, ClientRequestUserAgent, ClientCountry und ClientRequestHost sind gewöhnlich am nützlichsten zum Auffinden von Angriffsmustern in diesen Protokollen.

  • Durch Sortieren nach ClientRequestUserAgent können Sie „User Agent Blocking“-Regeln aufstellen.
  • Durch Sortieren nach ClientCountry können Sie Firewall-Regeln je nach Land aufstellen.
  • Durch Sortieren nach ClientRequestURI können Sie „Rate Limiting“-Regeln für die Seiten mit der höchsten Anzahl von Anfragen aufstellen.


Workflow-Beispiel

Oft werden Sie nach vielen Feldern sortieren müssen, um die Quelle eines Angriffs analysieren und identifizieren zu können. Sehen Sie sich zum Beispiel den folgenden Workflow an:

Aktion 1: Sortieren der heruntergeladenen Cloudflare-Protokolle nach HTTP 200-Antwort, Ausgabe in els-200.txt.

Grund: Sie sind nicht an Antworten interessiert, die bereits von Cloudflare blockiert werden, d. h. Anfragen, die zu einer HTTP-Antwort 503 oder 403 führen. Eine Anfrage, die zu einer 200 HTTP-Antwort an unserer Edge führt, wird von Cloudflare nicht blockiert und geht wahrscheinlich durch bis zum Ursprung, wenn die Ressource nicht an Cloudflares Edge zwischengespeichert wird. Solche Anfragen – wenn es sich um böswillige Anfragen handelt – werden speziell gestaltet, um den Ursprung zu überlasten.

Anleitung:

~$ cat els.txt | grep ":200," > els-200.txt


Aktion 2
: Sortieren Ihrer „nur HTTP 200“-Protokolle nach URI, Ausgabe in els-200-URI.txt.

Grund: Von den 200-Antworten wollen Sie die Seiten sehen, die am meisten angefragt werden.

Anleitung:

Auffinden der häufigsten URIs:

~$ jq -r .ClientRequestURI els-200.txt |sort -n |uniq -c |sort -n > els-200-top-URIs.txt
~$ cat els-200-top-URIs.txt

Wählen Sie einen URI aus dieser Liste und speichern Sie Protokolleinträge mit diesem URI in einer eigenen Datei. Ersetzen Sie dafür /ClientRequestURI/path/to/something/ im nachstehenden Befehl mit dem von Ihnen gewählten URI:

~$ cat els-200.txt| grep "/ClientRequestURI/path/to/something/" > els-200-URI-1.txt


Aktion 3
: Zählen URI-spezifischer „nur HTTP 200“-Antworten nach IP-Adresse, Ausgabe in els-200-URI-1-Top-IP.txt

Grund: Sie wollen die häufigsten IP-Adressen sehen, die den URI anfragen und zu einer 200-Antwort führen.

Anleitung:

~$ jq -r .ClientIP els-200-URI-1.txt |sort -n |uniq -c |sort -n > els-200-URI-1-Top-IP.txt

Ausgabe des Dateiinhalts:

~$ cat els-200-URI-1-Top-IP.txt

Sie können 200-HTTP-Antworten sowohl nach Anfrage-URI als auch nach den IPs eingrenzen, die diese URIs anfragen. Sie könnten die Protokolle auch anders herum sortieren, indem Sie die Protokolleinträge nach den obersten IP-Adressen eingrenzen und dann sehen, welcher URI nach IP-Adresse am meisten angefragt wird.

 
Beachten Sie: Nur weil Sie eine große Anzahl von Anfragen von einem einzigen User-Agent oder IP sehen, bedeutet das nicht, dass der Anfragende böswillig ist. 
Not finding what you need?

95% of questions can be answered using the search tool. This is the quickest way to get a response.

Powered by Zendesk