Einge der letzten Einträge hier waren vielleicht etwas wirr oder schwer verständlich. Nebenher bloggen, wenn man eigentlich keine Zeit hat, erlaubt keine ausführlichen Erklärungen. Die konkreten Regeln wurden erst zeitgleich mit dem Passwort für das Image veröffentlich und ab dem Zeitpunkt blieb keine Zeit für lange Einträge. Daher möchte ich zuerst nochmal kurz erklären um was es ging:
Entgegen früheren CTF-Wettbewerben war das Ziel des Wettbewerbs dieses Jahr nicht das stehlen und schützen von Flaggen, sondern die Teams waren eine Bank und mussten ihr Geld verteidigen und bei anderen Banken „klauen”. Das Geld konnte zwischen den Teams auf zwei verschiedene Art und Weisen verschoben werden. Entweder als elektronische Schecks oder als inter-Bank Transaktion. Das Ziel jedes Teams war also, ihr Geld zu vermehren. So lange die verschiedenen Dienste auf dem Server verfügbar waren, konnte diese für Transaktionen genutzt werden. Vom Gameserver aus kamen immer wieder Kunden und versuchten Geld einzuzahlen. Wenn das funktioniert, weil die Services laufen und funktionsfähig sind, dann erhöht sich das Vermögen der Bank. Das entspricht der devensiven Wertung beim bisherigen Wertungssystem. Bei der offensiven Wertung mussten wir bei anderen Banken möglichst viel Geld abzweigen. Teils pro Transaktion, teils pro Runde gab es aber eine Obergrenze, wieviel man bei eine Art und Weise bei einem anderen Team abzweigen konnte. Wenn man zu hoch pokerte konnte es auch passieren, dass man einen negativen Betrag „abhob”.
Neben aktivem und passivem Geldbeschaffen gab es noch eine dritte Möglichkeit, wie man an Geld kommen konnte. Die Hauptbank (Gameserver) veröffentlicht in unregelmäßigen Abständen Nebenaufgaben (Quests), mit denen man auch noch Geld sammeln konnte.
Die detaillierte Regelbeschreibung findet sich hier.
Wie ich im letzten Eintrag angekündigt habe, hier ein kleiner Rückblick, wie das ganze Event aus meiner Sicht verlief:
Bei den Vorbereitungen am Anfang bastelten die meisten so vor sich hin, Ich war mir dabei nicht sicher, ob wir nun alles so vorbereitet hatten, wie wir es später benötigen würden. Eine Checkliste wäre dazu evtl. hilfreich gewesen. Das sollte später aber nicht entscheidend sein. Aber der Reihe nach: Nach Erhalt des Passworts für das Image gegen 18:00 mussten wir uns zuerst mal mit den Regeln vertraut machen und ins System finden. Besonder letzteres war gar nicht so einfach, da nirgends seine genaue Funktionsweise dokumentiert war. Wir mussten also schauen, welche Services laufen und wo mögliche Sicherheitslücken sein könnten. Wir haben die Bereiche zu Beginn mal grob verteilt. Unklar war zu diesem Zeitpunkt, wann es losgeht. Wir gingen eigentlich davon aus, dass sich der Zeitplan um eine Stunde nach hinten verschoben ist. Als kurz nach halb Sieben aber die Meldung kam, dass es in etwa 20 Minuten losgeht, wurde es hier etwas unruhig. Jeder wusste, dass wir nicht mal ansatzweise ein sicheres System hatten. Als dann um 19:00 Uhr das Routing aktiviert wurde und die einzelnen Teilnehmer sich gegenseitig erreichen konnten bestätigte sich das Gefühl. Wir waren offen wie ein Scheunentor. Mehrfach habe ich angemeldete Benutzer von anderen Teams von unserem Rechner gekickt. Ebenso waren unsere Services lange für die Zentralbank nicht erreichbar.
Nach einiger Zeit wurde es aber besser, wir bekamen die meisten Services zum laufen und hatten auch die ersten Erfolge beim "erleichtern" der anderen. Es gab während des Spiels kein Gesamtranking, an dem man ablesen konnte, wie gut man insgesamt da steht, aber als wir zeitenweise bei den besten "Hackern" als zweiter gelistet waren, wussten wir, dass wir nicht ganz so schlecht sind. Unser Kontostand wuchs langsam aber beständig, auch wenn immer mal wieder etwas abgezogen wurde. Letzteres war ein Indiz dafür, dass wir irgendwo noch Löcher haben. Mit der Zeit hatten sich Teams gebildet, die sich der verschiedenen Probleme angenommen haben. Einige haben sich hauptsächlich um die Quests gekümmert, andere mehr um die offensive Aspekte und wieder andere haben sich um die Sicherheitslücken in unserem System gekümmert.
Wenn ich es im Nachhinein überdenke, dann hatte vermutlich niemand den Überblick, wer wirklich an was gearbeitet hat und ob wir alle Bereiche bearbeiten oder etwas wichtiges übersehen oder vergessen.
Kontinuierliches Monitoring der Aktivitäten auf unserem System hat meines Wissens niemand gemacht. Das war möglicherweise auch der Grund, weshalb wir nicht genau wussten wohin gegen halb eins unser Geld plötzlich ging und wie wir es stoppen konnten. Wir verloren binnen kürzester Zeit von unseren zwischenzeitlich angesammelten 1,8 Millionen fast mehr als eine halbe Million. Daher haben wir uns dazu entschieden, die Dienste unseres Systems abzuschalten und abzuwarten. Leider verringerte sich unser Kontostand weiter. Wir schoben das zuerst auf die Zeitverzögerung zwischen Diebstahl und Aktualisierung des Kontostandes. Leider sank der aber weiter, so dass wir uns dazu entschieden haben, auch die Testsysteme ganz vom Netz zu nehmen, da wir vermuteten, dass die Transaktionen darüber abgewickelt würden. Nach weiteren Runden des wartens bleib unser Kontostand dann endlich bei etwa 7900$ stehen. Die Enttäuschung war riesengroß, denn wir hatten binnen einer halben oder dreiviertel Stunde fast 1,8 Millionen Dollar verloren. Es machte sich Resignation breit und es wurden Überlegungen gemacht, ob es wohl am besten wäre, einfach die Systeme runtergefahren zu lassen, um nicht vollends zu verlieren. In der Zwischenzeit hat Torsten versucht eine Sicherheitslücke weiterzu nutzen und erreichte damit immerhin, dass unser Kontostand wieder auf etwa 58.000 stieg. Kein vergleich zum vorherigen Stand, aber es reichte, um die Stimmung wieder zu heben. Alle zogen wieder an einem Strang und versuchten in der letzten Stunde nochmal alles zu geben. Mit näherrückendem Ende wurden wir aber nochmal ausgenommen und unser Stand sank wieder auf die knapp 8000$. Kurz vor Schluss schaffte aber Robert, diese Martix-Verschlüsselung umzukehren und wir setzten unsere Hoffnung in die Punkte, die wir über die Quests erhielten. Am Anfang fragten einige, weshalb die Quest-Punkte nicht sofort auf den Kontostand addiert würden, im Nachhinein waren wir aber froh, dass sie erst zum Schluss addiert wurden, da sie den Hauptteil unseres Endstandes ausmachte.
Wir wussten bis zum Schluss nicht, wer wie welche Lücke bei uns wo ausgenutzt hat. Wir vermuteten aber, dass es eine Lücke war, die wir zwar auf unserem Primär-System gepatch hatten, aber nicht auf unserem Test-System. Da ich primär die Betreung der Systeme selbst gemacht habe, war ich mir nicht sicher, ob ich sogar direkt an dem Problem Schuld war: Wir hatten im Vorfeld insgesamt drei Systeme aufgesetzt, in denen die VMware-Images laufen konnten. eines davon war das "Live-System" zwei dienten zum testen und als Backup. Entgegen der Annahme der meisten waren die Testrechner aber totzdem für alle anderen Teams erreichbar. Zum Testen genutzt haben wir aber nur eines. Das andere stand im Prinzip die ganze Zeit rum und lief mitsamt aller Services. Beachtet oder benutzt hat das System niemand. Für das System verantwortlich war aber im Prinzip ich, da es direkt in meiner Ecke stand. Wenn dieser Rechner das einfallstor gewesen wäre, dann hätte ich die Niederlage zu 100% auf auf meine Kappe nehmen müssen. Das war auch der Grund, weshalb ich heute nochmal in den PiPool gegangen bin, um die Images und Logfiles zusammen zu packen um nach schauen können, was auf dem System so alles ablief, da es mich einfach nicht in Ruhe ließ und ich mir nicht sicher war, ob das System das Einfallstor war. Immerhin war darauf gar nichts gepatcht und sogar das Passwort für den Benutzer Team war noch "team". Soweit ich das momentan beurteilen kann, habe ich Glück gehabt. Wir hatten glücklicherweise auf der Teambox, also dem Rechner, der die Verbindung zum VPN war, zum fraglichen Zeitpunkt einen TCP-Dump am laufen, den wir auch gespeichert haben. Insgesamt haben wir von 00:12:42 Uhr 58:53 min lang aufgezeichnet und dabei 590887 Paktete mitgeschnitten. Somit konnte ich jeglichen Netzwerkverkehr, der über diesen Rechner lief nachvollziehen und dabei erleichtert feststellen, dass im Zeitraum des Dumps gerade mal 20 Pakete an diesen Rechner gerichtet waren oder von ihm kamen. 8 davon waren DNS-Anfragen von ihm selbst, 8 die zugehörigen Antworten, 2 waren Pings und 2 Antworten darauf. Da der Anteil dieser nichtssagenden Pakete im Vergleich der Gesamtmenge vernichtend gering ist und keine Pakete über die Leitung gingen, die einen Hinweis darauf geben, dass jemand anderes das System nutzt, bin ich mir ziemlich sicher, dass das System zu dem Zeitpunkt noch sauber war. Außerdem gab es auf dem System selbst auch keine Hinweise darauf, dass jemand das System benutzt hat. Der Benutzer "Team" war noch nie eingeloggt, in /tmp gab es keine verdächtigen Dateien oder Verzeichnisse und die zuletzt geänderten Dateien ergaben auch keine Auffälligkeiten. Auf der Maschine hatte ich also noch einmal richtig "Schwein" gehabt.
Bei der Analyse der Netzwerkdaten bin ich auf einige Auffälligkeiten gestoßen, die darauf hinweisen, dass es Team 12 (int80) war, dass uns dermaßen ausgenommen hat. Wie es scheint, haben sie durch einen Overflow mit einem präparierten Paket an den UDP-Port 2342 eine Shell auf TCP-Port 20000 geöffnet. Über diese haben sie Schecks in unserem Namen auf ihr Team ausgestellt. Zuerst haben sie es auf unserem eigentlichen Server probiert. Wenn man von diesem sowas macht, bekommt man aber die Meldung, dass es aus Sicherheitsgründen von einem anderen Rechner aus unserem IP-Bereich machen soll. Dann haben sie sich daran gemacht, nach Alternativen zu schauen. Zuerst wollten sie nmap direkt in der Shell verwenden. Das klappt aber nicht, da es nicht installiert war. Daher haben unser Netz von der ersten bis zur letzten IP mit einem Ping und einem Verbindungsversuch nach laufenden Rechnern durchsucht. Die laufenden Rechner wurden dann der Reihe nach mit einem Verbindungsversuch auf den UDP-Port 2342 und den TCP-Port 20000 bedacht. Der erste Rechner, den die Jungs von der GeorgiaTech gefunden haben war dann der primäre Testrechner. Ebenso hätten sich auch die andere Maschine ansprechen können, von der ich vorhin geredet habe. Von der IP her wäre sie sogar niedriger gewesen, scheinbar hat sie aber länger zum Antworten gebraucht. Ich vermute, dass es aber in dem Fall keinen Unterschied gemacht hätte, auf welcher Maschine sie ihre Sachen machen. In dem Fall hätte nur geholfen, dass wir nicht fahrlässig die Testrechner genauso erreichbar halten wie das "Live-System", sondern den Zugriff auf diese explizit nur unserem Netz erlauben.
Nachdem das System entdeckt war, hatte int80 leichtes Spiel. Immer wieder eine Anfrage generieren, die einen Scheck erstellt, diese von unserem Server an den Zentralserver schicken und die Antwort wieder an sich ausgeben lassen. Das haben sie dann auch innerhalb 15 Minuten 38x wiederholt. Mit Schecks zu je 50.000$. Beim 39. und 40. Scheck bekamen sie die Meldung, dass wir wahrscheinlich Pleite sind und ließen es. Aus dieser Rechnung wären wir zum Zeitpunkt des Beginns der Pleite sogar über 1,9 Millionen gewesen.
Die letzten 50.000, die Torsten nochmal erkämpft hat, haben vermutlich auf dem selben Weg den Besitzer gewechselt. Da lief zwar der Mitschnitt nicht mehr, aber das genau 50.000$ nochmal abgezogen wurden, legen diesen Schluss nahe.
Bitter ist die Erkenntnis für mich dreifach: Erstens hätte das abschotten der Testmaschinen zu meinem Aufgabengebiet gehört. Zweitens das man zuschauen muss und keine Ahnung hat, wie das Geld eigentlich davonläuft und drittens wären wir mit den 1,9 Millionen auf Platz 7 (1,9 Mio + 0,46 Mio von den Quests) gelandet.
Trotz der bitteren Erfahrung kurz vor Schluss glaube ich, dass es allen anderen aus dem Team Squareroots genauso viel Spaß gemacht hat wie mir. Es war eine geniale Mischung aus Spaß, Streß, Lernen und über die Fähigkeiten andere Staunen.
Als nach dem Ende der Session über das "nächste Jahr" gesprochen wurde, musste ich feststellen, dass ich da vermutlich nicht mehr dabei sein kann. Leider.
Als Wolfgang und Laura mich letzten Donnerstag auf der FIM-Fete gefragt haben, ob ich zum Mitmachen Lust hätte wusste ich nicht so richtig, ob mir sowas Spaß machen würde. Da ich nichts anderes vor hatte, dachte ich mir, dass ich ja mal mitmachen könnte.
Im Nachhinein weiß ich, dass es kein Fehler war und ich, wenn sich die Möglichkeit bietet, wieder an einem CTF teilnehmen werde.
Für alle interessierten habe ich die Bilder Online gestellt, die Martin Mink und ich während des ICTF geschossen haben. Zum gesammelten Download gibt es auch ein tgz.