Moin Moin!
»» Und mal so am Rande, weil immer wieder gern gebaut: Exponenziell ansteigende Sperrzeiten oder gar vollständiges Sperren eines Benutzeraccounts bei mehreren falschen Logins ist eine wunderbare Vorgabe für DoS-Angriffe. Einfach ein paar Mal mit einem Wörterbuch über die Login-Seite rennen und schon sind 99% aller User dauerhaft ausgesperrt.
Ich schicke mein Script nur mal 5 Sekunden schlafen.
OK, laß mich mal spielen:
Ich bin böse auf Dich, weil mir Deine Socken absolut nicht gefallen und Du absolut nicht dazu zu bewegen bist, Dir Socken wie Pippi Langstrumpf anzuziehen. Also will ich Dich bei Deinen Kunden möglichst nachhaltig unbeliebt machen.
Ich merke, dass Dein Script anfängt zu trödeln, wenn ich mein Wörterbuch mit einem dummen Script Deinem Server sequenziell reindrücke.
Mein Angriffsrechner ist reichlich mit CPU, RAM und Internet-Bandbreite ausgestattet. Also schmeiß ich 10 weitere Zeilen in mein Script, zerteile das Wörterbuch in 1000 Teile, und lasse jeden Teil in einem eigenen Prozess auf Deinen Server einschlagen.
Dein Webserver darf jetzt nahezu parallel 1000 PHP-Aufrufe verdauen, entweder mit mod_php oder mit dem PHP-CGI. Vermutlich greift schon vorher irgendwo die Bremse, z.B. beim Apachen durch ServerLimit, MaxClients, oder
ThreadsPerChild. Und alle Prozesse bzw. Threads sind mit sleep() beschäftigt, statt weiter Requests zu beantworten. Dein Server ist tot (genauer: reagiert nicht mehr auf HTTP-Requests).
Du hast einen fähigen und flinken Provider, der meinen einen bösen Rechner an der unüblich hohen Last erkennt und den Zugiff auf Deinen Webserver per Firewall blockt. Oder Du richtest eine entsprechende Paketfilterregel auf Deinem Server ein. Dein Server lebt wieder.
Ich wechsle meine IP-Adresse und das Spiel beginnt von vorne. Dein Server ist wieder tot.
Mir gehen die IP-Adressen aus. Ich kaufe mir Zugriff auf ein Botnet und lasse den Angriff von ein paar tausend ungepatchten Windows-Gurken quer über die ganze Welt verteilt laufen, jeder mit einem tausendstel des Wörterbuchs, und so lange, bis ich ein paar Accounts geknackt habe. Dein Server ist tot.
Du bzw. Dein Provider muß tausende IP-Adressen sperren und sperrt damit auch einen Teil deiner Kunden aus. Ziel teilweise erreicht. Tut er das nicht, ist Dein Server tot. Ziel komplett erreicht.
Du bzw. Dein Provider muß also sperren, um den Server erreichbar zu halten, auch wenn er damit Kunden aussperrt. Ich kaufe bei irgendwelchen zwielichtigen Gestalten noch ein paar 10.000 Zombie-PCs dazu, die Deinen Server weiterhin zum Schlafen bewegen sollen.
Du / Dein Provider muß noch mehrere 10.000 IP-Adressen in die Blacklist eintragen und auch wieder austragen (dynamische IP-Adressen!), was die Firewall bzw. den Paketfilter oder wenigstens die Nerven ziemlich belastet.
Irgendwann ist das Maß voll und Du / Dein Provider blockiert ganze IP-Ranges, mit entsprechenden Kollateralschäden bei Deinen Kunden. Und trotzdem kommen noch immer genügend Anfragen durch, um Deinen Server im Koma zu halten -- oder aber der Server ist so abgeschottet, dass Deine Kunden auch nicht mehr darauf zugreifen können. Ziel erreicht.
Kurz bevor Du Dir im Astrid-Lindgren-Gedenk-Webshop 10 Paar Pippi-Langstrumpf-Socken bestellst, rät Dir ein Freund, das sleep() mal auszukommentieren, schon fällt der Angriff in sich zusammen.
Alexander
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".