eic kyf msh nnz uhz tv nt
Fr, 11:11 Uhr
14.06.2024
Anmerkung techn. Support

0x02 - zeitbasierte Attacken und das fehlende »(int)«

Im Januar sind die Seiten unserer Nordthüringer Onlinezeitungen auf einen neuen Server umgezogen. „Mehr Bums“ war die Grundidee. Wenn etwas Wichtiges passierte, sollten die Seiten nicht mehr gleich in die Knie gehen. Den ersten Härtetest (Kommunal- und Europawahlen) hatte die neue Technik bestanden, dafür hatten wir ein paar Tage später wieder einen unerklärlichen Totalausfall...

Etwas Matrix. (Foto: vgf) Etwas Matrix. (Foto: vgf)

Bei den Zugriffen auf unsere Seite kann man drei große und eine kleine Gruppe unterscheiden:

Leser
Die lieben Leser. Der beste Anteil. Aktuell generiert diese Gruppe ca. 4.5 Millionen Seitenaufrufe im Monat alleine über die Nordhäuser Seite, unsere „nnz“. Das ergibt ca. 150.000 Seitenaufrufe am Tag. Eigentlich kein Problem für den Web-Server, die Ausnahmen waren bis zum Umzug besondere Ereignisse, wie z.B. Wahlen, Brände, Bombenfunde und dergleichen mehr. Alles gut zu handhaben, wären da nicht die „Crawler“.

Crawler, die Erste
Sogenannte Crawler, übersetzt heißt das buchstäblich „Krabbler“, sind Software-Programme, die das Internet automatisiert durchsuchen. Dabei analysieren und indizieren sie Inhalte von Websites wie Texte und Bilder oder auch Videos. Für uns von Bedeutung sind „Krabbler“ von Google und anderen Suchmaschinen. Aktuell erfolgen 40 % aller Verweise auf unsere Seiten über eine Suchmaschine.

In Summe schätze ich mal, dass ein Drittel aller Zugriffe auf unsere Seite automatisiert, durch Suchmaschinen erfolgen. Somit hätten wir weitere 4,5 Millionen Seitenaufrufen im Monat. Auch das ist eigentlich kein Problem für den Web-Server, wäre da nicht noch die andere Art von „Crawlern“.

Anzeige symplr (4)
Crawler, die Zweite
Besonders KI-Firmen durchforsten seit dem vergangenen Jahr das Netz und „füttern“ in schier unersättlichem Hunger ihre Systeme mit Bildern und Texten. Wie die Suchmaschinen-Crawler indizieren sie hierbei alles, was sie irgendwie lesen können, haben aber im Gegensatz zu den Suchmaschinen keinerlei Nutzen für uns. Von der KI bekommen wir keine Besucher.

Diese Crawler sind auch deutlich aggressiver als Suchmaschinen-Crawler. Sie erzeugen häufig viele Zugriffe in kurzer Zeit und halten sich selten an definierte Regeln zum Indizieren unserer Seiten. Stichwort hierbei »robots.txt«. In dieser Datei kann man grob festlegen, was indiziert werden darf und was nicht, die KI-Krabbler ignorieren diese Vorgaben gerne und oft.

Diese Besuche erzeugen aktuell etwa ein weiteres Drittel unserer Zugriffe. Macht alles zusammen in Summe ca. 13,5 Million Seitenaufrufe pro Monat.
Auch das muss noch kein Problem für den Web-Server sein, wären da nicht noch die „die bösen Jungs“ und damit nähern wir uns der Crux der ganzen Sache.

Die bösen Jungs – gezielte Angriffe
Bis vor kurzem habe ich immer zu Peter Stefan Greiner gesagt, die wollen nichts von uns konkret, wir sind irgend ein Ziel im Internet. Das läuft alles automatisiert. Beim letzten Mal haben wir die Angriffe mit einer Schrotflinte verglichen, ein bestimmtes Ziel gibt es nicht, wir bekommen beim Generalangriff auf das Netz aber wie alle anderen auch immer mal ein paar Körner ab.

Diese Meinung muss ich nun revidieren. Aktuell laufen, fast täglich nachvollziehbar, gezielte Versuche, unser Datenbanksystem auszuspionieren bzw. Zugriff darauf zu erlangen. Besonders perfide sind hierbei zeitbasierte Attacken über die von uns genutzten MySQL-Datenbank.

Zeitbasierte Attacken in MySQL
Zeitbasierte Attacken können genutzt werden, um grundlegende Informationen zu einer Datenbank zu ermitteln oder das Vorhandensein einer Schwachstelle ausfindig zu machen.

Vereinfacht dargestellt, wenn es gelingt, eine Zeitverzögerung über ein Formular oder eine URL einzubringen, hat der Angreifer die Möglichkeit geschaffen, der Datenbank eine „Ja/Nein“-Frage zu stellen. Die Antwort des Datenbanksystems hängt von diesem Zeitfaktor ab und kann mitunter ungewöhnlich lang ausfallen. Daraus kann ein Angreifer ermitteln, ob die Antwort „Ja“ oder „Nein“ war und sich weiterführende Informationen erschließen. Über wiederholte Anfragen wird so die Datenbankstruktur Schritt für Schritt „ausgeforscht".

Diese Verzögerungen führen, wenn wir sie nicht rechtzeitig bemerken und durch technische Maßnahmen verhindern, zum Zusammenbuch des Web-Servers.

Wie können aber nun solche Abfragen bis in zur Datenbank gelangen? Die Antwort ist einfach: Da hat jemand (ich) bei der Programmierung etwas übersehen!

Ein Beispiel: Immer wenn Sie einen Kommentar abgeben wollen, wird als erstes geprüft ob Sie angemeldet sind. Falls das nicht der Fall ist, wird die Artikelnummer (eine Zahl) in der so genannten „Session-Datenbank“ gespeichert und Sie werden vorerst zum Login-Formular weitergeleitet. Nach erfolgtem Login wird die Artikelnummer gelesen und Sie können einen Kommentar zum Ausgangsartikel abgeben.

Der Datenbankbefehl sieht ungefähr so aus
UPDATE session_tabelle SET returnpath = 'return_path|s:94:"/kommentare/kommentar.php?ParentID=346904" WHERE sessionID = …'

Bei dem versuchten Angriff wurde aber nicht nur die Nummer übergeben, sondern noch ein Stückchen Code an die URL angehängt.

Der resultierende Datenbankbefehl sieht dann ungefähr so aus:
UPDATE nnz_p2_sessions SET data = 'return_path|s:94:"/kommentare/kommentar.php?ParentID=346904 AND (SELECT 7064 FROM (SELECT(SLEEP(5)))SKqf)-- atRY";' WHERE sessionID = …'

Wichtig ist hier das Wörtchen „sleep(5)“. Hat der Programmierer eine ordentliche Prüfung der Parameter vergessen, haben wir jetzt ein potenzielles Problem - der MySQL-Server führt ggf. den „sleep(5)“-Befehl aus. Wenn diese Bedingung erfüllt ist, geht der Server fünf Sekunden „schlafen“. Falls man viele dieser Code-Injektionen in kurzer Zeit abfeuert, ist der Server schnell mausetot.

Der Fehler hierbei war, nicht zu prüfen, ob die gesendete Abfrage wirklich nur eine Zahl enthält bzw. den übergebenen Wert explizit in eine Zahl umzuwandeln.

Das fehlende »(int)«
Die Lösung bestand hierbei in einer „expliziten Typumwandlung“.

Aus
$ParentID = $_GET['ParentID';
wurde
$ParentID = (int) $_GET['ParentID'];

Der kleine Einschub „(int)“ sorgt dafür, das alles, was übergeben wird, in eine Integer-Zahl umgewandelt wird. Der eingeschleuste Befehl kann also nicht mehr ausgeführt werden, da bei der Datenbank nur eine Zahl ankommt.

Und darum, liebe Leserinnen und Leser, haben sich unsere Seiten in den vergangenen Wochen auch Abseits von Großereignissen gerne einmal für eine Weile „verabschiedet“. Wer die Angreifer waren und woher sie kamen, lässt sich nicht mit Sicherheit sagen. Ein Check der IPs verweist nach Russland, dass ist aber nur ein Indiz, kein Beweis.

Der Abwehrkampf im Datenmeer des Internets wird weitergehen, aber für den Moment sollte erst einmal Ruhe und vor allem Stabilität auf den Seiten der Nordthüringer Onlinezeitungen einkehren.

Noch eine gute Nachricht zum Schluss: Bei den letzten Wahlen, eines der Großereignisse, die uns in der Vergangenheit regelmäßig in die Knie gezwungen haben, hat der Server geschnurrt wie ein Kätzchen.

Volker Georg Franke
technischer Support nnz
Angelo Glashagel
Redaktion


P.S.: Wer mehr über den Angriffsvektor wissen möchte, findet hier genauere Erklärungen: it-forensik.fiw.hs-wismar.de


Lesen Sie auch 0x01 - Session-Verwaltung, SQL-Injektion und anderer Spaß.
Autor: vgf

Kommentare
reiner3000
14.06.2024, 11.17 Uhr
never touch a running system
never touch a running system ! :-)

Dann weiterhin viel Spass - ich schätze Eure Arbeit sehr.
deralte
14.06.2024, 11.51 Uhr
Vielen Dank.....
.....der Artikel hat eine Bildungslücke bei mir geschlossen und viele neue Bildungsfragmente aufgebaut.
Hoffen wir gemeinsam auf die Zukunft?
Anmerkung techn. Support:
Hoffnung ist keine Strategie. 😂
Fönix
14.06.2024, 11.53 Uhr
Auch von mir herzlichen Dank für
die unschätzbare Arbeit, die hier geleistet wird. Schließlich wird hier die Grundlage geschaffen für all das Geeifer und Gekeifer, das ganz offenbar für nicht wenige von uns (mich eingeschlossen) ein wichtiges Lebenselexier darstellt. Für die vielen "normalen" Beiträge und Kommentare natürlich auch.

Viele Grüße und die besten Wünsche für ein schönes Wochenende (für die Zeit danach selbstverständlich auch!)

der Fönix
Paulinchen
14.06.2024, 13.27 Uhr
Hallo liebe nnz-online
Liebe Redakteure merkt Euch das, ohne Euch, wird die Stadt Nordhausen, zu einem leeren Fass!

Vielen Dank für die bisherige Arbeit, welche nicht selbstverständlich ist.
Caesar
14.06.2024, 13.28 Uhr
Danke für die Aufklärung
Danke für die erläuternden Worte, die mein technisches Verständnis vermutlich etwas übersteigen, aber aufgrund der anschaulichen Darstellung hatte man zumindest das Gefühl, es im Groben verstehen zu können.
Lautaro
14.06.2024, 14.54 Uhr
Danke an Volker Georg Franke und Angelo Glashagel...
für den erhellenden Artikel ! :-)
Dass man sich als Journalist auch noch mit solchen Strolchen herum ärgern muss, war zu Augsteins Zeiten sicher weniger ein Problem.
Haltet durch ! :-)
Kommentar hinzufügen
Es gibt kein Recht auf Veröffentlichung.
Beachten Sie, dass die Redaktion unpassende, inhaltlose oder beleidigende Kommentare entfernen kann und wird.
Anzeige symplr (1)
Anzeige symplr (3)