Compliance

Durch Wettkämpfe Cybersicherheits-Fähigkeiten verbessern!

Capture the Flag: Ein Spiel für H̶a̶c̶k̶e̶r̶ ... ich meine Cybersicherheits-Expert:innen

02.08.2022 Lesedauer ca. 17 Min.

Dieser Artikel wird die verschiedenen Arten und Kategorien eines Capture the Flag (CTF)-Wettkampfs beschreiben und ich werde euch von meiner persönlichen Erfahrung mit CTFs erzählen. Dazu werden einige einfache Beispielaufgaben gezeigt, die aus einem CTF stammen, an dem mein Team und ich teilgenommen haben. Keine Sorge, der Fokus liegt nicht in den kleinsten technischen Details.

Durch das Teilen meiner Begeisterung für dieses Thema, wird vielleicht die ein oder andere Cybersicherheit affine Person dazu ermutigt, in die Welt der Hacker-Wettkämpfe einzutauchen.

1. Was sind CTFs? 1. Was ist Capture the Flag?

In der Welt der IT-Sicherheit steht die Abkürzung CTF für „Capture the Flag“. Diese Bezeichnung steht für Wettkämpfe, in denen Teams bestehend aus Spezialist:innen für Cybersicherheit und Hobby-Hacker:innen gegeneinander antreten, um ihre Kenntnisse der Informations-Sicherheit unter Beweis zu stellen.

In diesen Wettkämpfen werden die Teams vor Aufgaben gestellt, in denen es das Ziel ist, eine versteckte „Flagge“ zu finden. In der Regel handelt es sich bei einer “Flag” um eine Zeichenkette mit zufälligen Daten oder Text in einem bestimmten Format.

Beispiel:
flag{y0u_f0und_th3_fl4g}

Nach der erfolgreichen Kompromittierung eines Systems oder Lösung der Aufgabe, erhält man die Flagge. Diese kann anschließend eingereicht werden und das Team bekommt Punkte für die bewältigte Aufgabe. Das Team mit den meisten Punkten gewinnt den Wettkampf.

2. Welche Arten von CTFs gibt es? 2. Welche Arten von CTFs gibt es?

Das am meisten verbreitete CTF-Format ist „Jeopardy“. Hier werden die verschiedenen Kategorien aufgeteilt dargestellt.

Jeopardy

Es gibt auch das anspruchsvollere Format „Attack/Defense“. Hier hat jedes der Teams einen Server zur Verfügung, der vor dem anderen Team verteidigt werden muss. Parallel dazu versucht das Team Schwachstellen am Server des Gegners zu suchen und auszunutzen. Hat es ein Team geschafft in das andere System einzudringen, wird eine festgelegte Datei überschrieben.

Nun muss das Team die Sicherheitslücke schließen und den Angreifer wieder aussperren. Somit muss dieser nun andere Wege in das System finden und so geht es hin und her. Das Team, welches die meiste Zeit den anderen Server unter Kontrolle hatte, gewinnt.

3. Was man durch CTFs lernen kann? 3. Was man durch CTFs lernen kann?

Diese überwiegend virtuell veranstalteten Events haben eine großartige Eigenschaft. Sie fügen dem Erlernen von Cyber-Sicherheits-Themen und dem praxisnahen Ausnutzen von Schwachstellen verschiedensten IT-Systemen, einen großen Spaß- und Motivationsfaktor hinzu. Viele dieser Aufgaben haben einen direkten Bezug zu Fähigkeiten, die im Arbeitsleben der IT-Sicherheit Branche erforderlich sind.

Meist tritt man als Team an und bekommt so die Möglichkeit, sich mit anderen Menschen über die teils sehr kniffligen Aufgaben auszutauschen. Jede Person bringt ihre Erfahrungen und individuellen Fähigkeiten ein, dadurch ist ein gegenseitiges Lernen möglich.

Es kommt auch nicht selten vor, dass eine Aufgabe richtig frustriert, da man einfach keinen Lösungsansatz zu finden scheint. Auch hier ist es hilfreich, die bereits gewonnenen Erkenntnisse mit seinen Teammitgliedern zu teilen und sich gemeinsam darüber zu beraten, welche möglichen Ansätze noch nicht genutzt wurden. Diese Momente der Frustration sollten aber nicht allzu stark demotivieren, denn je schwieriger die Aufgabe ist, desto euphorischer ist das Gefühl bei erfolgreicher Lösung.

4. Welche Kategorien gibt es? 4. Welche Kategorien gibt es?

Die Kategorien variieren zwischen den verschiedenen Events. Typischerweise findet man folgende Kategorien:

  • Web - Bei dieser Kategorie bekommt man eine IP oder URL zu einer Webseite, die auf irgendeine Art und Weise eine Schwachstelle beinhaltet. Hier kann jede erdenkliche Schwachstelle (z. B. XSS, SQL injection, IDOR etc.) der Ansatz sein, um an die Flag zu kommen. Manchmal bekommt man auch den vollständigen Quellcode des Webservers, der dann nach Implementierungs- oder Logikfehlern abzusuchen ist.

    Die in dieser Kategorie benötigen Fähigkeiten, findet man in der Arbeitswelt der IT-Branche durchaus wieder. Web-hacking ist einer der Hauptbestandteile eines Web-based Pentest oder der generellen Applikationssicherheit, die beide in der IT-Sicherheit relevant sind.

  • Crypto - Hier sind nicht die Kryptowährungen gemeint, die in aller Munde sind, sondern das große Thema Kryptografie. Hier geht es darum Daten für eine sichere Übermittlung zu verschlüsseln (unlesbar zu machen) und anschließend wieder zu entschlüsseln, damit die Daten wieder lesbar sind und ihren Zweck erfüllen können. Klassischer Weise bekommt man hier eine unlesbare Flag und den Quellcode des Verschlüsselungsverfahren. Die Aufgabe besteht darin zu verstehen, welche kryptographischen Verfahren die Flag durchlaufen hat und diese dann in umgekehrter Weise anzuwenden, um sie wieder lesbar zu machen.

    Kryptografie bildet die Basis von sicherer Datenübertragung und ist aus der Welt der IT-Sicherheit unentbehrlich. Zu verstehen, wie diese Verfahren und Technologien funktionieren ist durchaus bereichernd.

  • Pwn / Reverse engineering - In dieser Kategorie geht es um Themen, die die meisten Leute wahrscheinlich unter dem Wort “Hacken” vermuten. Bei Pwn geht es darum ein Programm, das auf einem Server läuft unter die Lupe zu nehmen und potenzielle Schwachstellen auszunutzen. Üblicherweise bekommt man hierfür die Binärdatei des Programms zur Verfügung gestellt und die Adresse und den Port des laufenden Servers.
    Die Aufgabe besteht darin die Binärdatei zu reverse engineeren und sie dabei auf der untersten Ebene, die für den Menschen noch lesbar ist, anzuschauen und zu verstehen. Dafür nutzt man gewisse Debugger Tools (z. B. Ghidra), die eine Binärdatei in Assemblersprache übersetzen. Diese Übersetzung des Binärcodes befindet sich auf der Ebene von CPU-Anweisungen und Speicherverteilung, noch eine Ebene tiefer und man schaut nur auf eine Reihenfolge von Einsen und Nullen. Die meistverbreitete Schwachstelle, die man hier findet, ist ein Buffer Overflow. Hat man den Programmablauf verinnerlicht und die Schwachstelle gefunden, wird ein Exploit geschrieben. Dieser Exploit ist ein kleines Script das sich mit dem Server auf dem angegeben Port verbindet und dem Programm Eingaben gibt, welches den Buffer Overflow ausnutzt und schon hat man die Flag.

    Reverse engineering ist ein großer Bestandteil der Kategorie Pwn, sie ist aber auch eine komplett eigene Kategorie in der mehr Fokus auf das Debuggen und Verstehen gelegt wird.

  • Forensics / Steganography - Es wird eine Bild-, Audio-, Betriebssystem Abbild- oder PCAP-Datei bereitgestellt, die durchleuchtet werden muss, um die versteckte Flag zu finden. Steganografie ist die Kunst eine Nachricht innerhalb anderer Daten zu verstecken. Hier ist viel Kreativität gefragt, um herauszufinden wie die Flag versteckt worden ist. Oftmals sind andere Dateitypen z. B. in einer Bilddatei versteckt und sind mit einigen Techniken und Tools auffindbar. Besonders interessant sind PCAP-Dateien, die einen Mitschnitt von Neztwerktraffic beinhalten, und mit dem Verständnis von verschieden Netzwerkprotokollen in knifflige Aufgaben verbaut werden.

    In der IT-Arbeitswelt kommen diese Fähigkeiten in der digitalen Forensik, Incident respons und Malware-detection zur Anwendung.

5. Wo findet man diese Events? 5. Wo findet man diese Events?

Es gibt verschiedene Plattformen, auf denen bevorstehende CTFs aufgelistet und weitere Information bereitgestellt werden. Als Beispiel stelle ich hier die Webseite CTFtime vor. Auf dieser Seite werden die meisten Events aufgelistet. Dort gibt es auch weltweite und länderspezifische Ranglisten der Teams.

Ranking

Ist ein CTF vorbei, wird das Scoreboard des Wettkampfes übernommen, in denen alle teilnehmenden Teams und deren erzielte Punkte festgehalten sind.

Anschließend gibt es ein voting auf CTFtime zum vergangenen Event, in denen die Spieler die sogenannte „Weight“ festlegen können. Die Weight eines CTFs sagt aus, wie gut organisiert das Event war und welche Schwierigkeitsstufe es hatte. Wenn das Voting beendet ist, wird anhand der Weight und der vom Team erzielten Punkte errechnet, wie viele Punkte das Team für die Rangliste der Plattform bekommt.

Weight-Vote

Für mich ist solch ein System sehr anspornend. Wenn man nach einem guten CTF, in den man viele Aufgaben lösen konnte, in die Rangliste blickt und sieht, dass man sich unter den 25 besten Teams des eigenen Landes befindet, zeigt das den Vergleich zu anderen und gibt ein schönes Gefühl.

Jetzt kommen wir zu einen der wichtigsten Aspekte der Plattform, nämlich „Writeups“. In writeups dokumentieren Spieler, wie ihr Lösungsweg zu einer spezifischen Aufgabe aussah. Wenn das Event vorüber ist, gibt es für jeden Spieler die Möglichkeit, seine Writeups auf die Plattform hochzuladen. Wenn man durch das Teilnehmen an CTFs die eigenen Fähigkeiten erweitern möchte, ist es unfassbar wertvoll sich Writeups zu Aufgaben anzuschauen, die man nicht lösen konnte.

6. Drei einfache Beispiel-Aufgaben 6. Drei einfache Beispiel-Aufgaben

Hier werde ich meine eigenen Writeups des VishwaCTF 2022 vorstellen, um euch einen Einblick in einfache Aufgaben und deren Lösungsansätze zu geben. Dieser Part wird etwas technisch sein und wird um vereinfachte Erklärungen zu den Lösungen ergänzt.

Beispiel 1

Titel: So Forgetful
Kategorie: Forensics
Beschreibung: Once my friend was connected to my network, he did some office work and left. Next day he called me that he forgot his password and wanted me to rescue him <3
Flag format: vishwactf{pass}

Es wird eine Datei Names Ghost.pcap zum Download zur Verfügung gestellt. Unser Freund möchte, dass wir sein vergessenes Password finden.
Öffnen wir die die PCAP-Datei mit dem Netzwerkanalysetool Wireshark, sehen wir eine detaillierte Netzwerk-Aufzeichnung:

Wireshark

Nach grobem Überfliegen der Aufzeichnung und der Aufforderung ein Password zu finden, habe ich links oben einen Filter auf das Protokoll HTTP gesetzt. In diesem Fall interessieren uns die TCP, UPD und ICMP Pakete nicht.

Hier sehen wir jetzt den kompletten HTTP Traffic, den unser Freund in unserem Netzwerk verursacht hat. Im Unterschied zu HTTPs werden bei HTTP Daten unverschlüsselt übertragen.

Das markierte HTTP Paket zeigt, dass hier ein POST-Request an eine Webseite durchgeführt wurde. Bei einem POST-Request werden Daten an den Webserver geschickt, wie es üblerweise bei einem Login der Fall ist. Schauen wir uns dieses Paket doch mal genauer an:

Wireshark

Jetzt haben wir die unverschlüsselten Zugangsdaten vor uns:

Username & Passwort:
Form item: "userid" = "spiveyp"
Form item: "pswrd" = "S04xWjZQWFZ5OQ=="

Das Passwort könnte schon unsere Flag sein, jedoch steht am Ende des Passwort ==. Das ist ein typischer Hinweis das eine Zeichenkette mit Base64 encodiert ist.

Decodieren wir nun das Passwort S04xWjZQWFZ5OQ== mit Base64decode, erhalten wir folgendene Zeichenkette: KN1Z6PXVy9

Das sieht ziemlich stark nach einem Passwort aus.

Geben wir dem Passwort noch das Flag format: vishwactf{KN1Z6PXVy9} hinzu und schicken diese Lösung ab.

Correct Flag!

Beispiel 2

Titel: My Useless Website
Kategorie: Web
Beschreibung: I made this website having simple authentication used in it. But unfortunately I forgot the credentials. Can you help me to find the correct one ??

Gegeben ist eine URL zu der beschriebenen Webseite:

Web

Zu sehen ist eine Login Maske. In der Beschreibung steht, dass eine ganz simple Authentifizierung genutzt wurde. Um einen Authentifizierungs Bypass durchzuführen, gibt es viele Wege.

Ich habe direkt versucht, ob diese Webseite anfällig für SQL-Injections (SQLi) ist. Eine SQLi nutzt eine fehlende Reinigung von eingegebenen Daten des Nutzers aus. Mit dem Eingeben von SQL Syntax, die nicht rausgefiltert wird, können wir die Datenbank-Query, die nach unserem Usernamen und Passwort sucht, umgehen und unsere eigene Query schreiben.

Im Falle eines Authentifizierung-Bypass gibt es eine einfache Methode, die man testen kann. Im Backend des Webservers wird geprüft, ob die eingegebenen Zugangsdaten in der Datenbank existieren. Ist diese Prüfung erfolgreich, wird der Wert True zurück gegeben. Da wir keine uns bekannten Zugangsdaten haben, versuchen wir die Datenbank Query auszutricksen, indem wir die Anfrage nach Username und Passwort unterbrechen und unsere eigene Anfrage hinzufügen, die bestenfalls selbst True zurückgibt. Somit wird die Prüfung nach unseren Zugangsdaten, trotz nicht existierenden Usernamen und Passwort erfolgreich durchgeführt.

Dafür nutzen wir die SQLi Payload ' OR 1=1 ;-- in leicht abgeänderter Form. Diese SQL Syntax wird immer True zurückgeben, egal was für eine Query davor ausgeführt wurde. Also setzen wir sie anstelle des Passworts und Usernamens:

Web

Kurz nach dem Abschicken taucht folgender Alert auf:

Web

Beispiel 3

Titel: The Last Jedi
Kategorie: Forensics
Beschreibung: What it takes do you have?

Es wird eine Datei Namens Y0D4.jpg zum Download zur Verfügung gestellt.

Das Bild sieht wie folgt aus:

Yoda

In der Forensics-Kategorie werden oftmals in Dateien andere Daten oder Dateien versteckt.

Ich werde hierfür drei Tools nutzen, um die JPEG-Datei genauer unter die Lupe zu nehmen:

  • exiftool ExifTool ist ein Kommandozeilen-Werkzeug zum Lesen und Schreiben der Metainformationen von Bild-, aber auch Audio- und Video-Dateien.
  • strings For each file given, GNU strings prints the printable character sequences
  • Binwalk: Binwalk is a tool for searching a given binary image for embedded files and executable code

Schauen wir uns zunächst die Metadaten der Datei mit exiftool an:

(Unter Windows findet man diese Informationen unter dem Reiter Eigenschaften einer Datei.)

$ exiftool Y0D4.jpg

ExifTool Version Number         : 11.88
File Name                       : Y0D4.jpg
Directory                       : .
File Size                       : 698 kB
File Modification Date/Time     : 2022:03:19 18:45:07+01:00
File Access Date/Time           : 2022:04:12 17:18:46+02:00
File Inode Change Date/Time     : 2022:04:12 17:15:42+02:00
File Permissions                : rwxrwxrwx
File Type                       : JPEG
File Type Extension             : jpg
MIME Type                       : image/jpe
Comment                         : CREATOR: gd-jpeg v1.0 (using IJG JPEG v80), quality = 100.

Hier finden wir aber nichts, was uns in diesem Fall weiterhelfen könnte.

Lasst uns mit den Befehl strings fortfahren. Der Befehl wird alle lesbaren Zeichenketten der Binär Datei ausgeben, die mindestens 15 Zeichen lang sind:

$ strings -15 Y0D4.jpg

<CREATOR: gd-jpeg v1.0 (using IJG JPEG v80), quality = 100
flag:{f00l3d_y0u}Rar!
0_MACOSX/Sacred archives/Dont open/is_this_it.jpg
/Sacred archives/Dont open/Is_This_Really_It.jpg
!_MACOSX/Sacred archives/Dont open
_MACOSX/Sacred archives
Sacred archives/Dont open
Sacred archives
0_MACOSX/Sacred archives/Dont open/is_this_it.jpg
/Sacred archives/Dont open/Is_This_Really_It.jpg

Hier finden wir eine false Flag flag:{f00l3d_y0u} der Text sagt es schon, dass wir hier hinters Licht geführt wurden.

Aber dahinter ist noch ein Hinweis Rar!, der uns darauf aufmerksam macht, dass hier vielleicht ein .rar Archiv versteckt ist. Das würde auf jeden Fall auch die komischen Dateipfade erklären, die im unteren Part zu sehen sind (Normalerweise sind keine Dateipfade in Bilddateien). Hier sehen wir schon, dass noch zwei weitere JPEG Dateien auf uns warten.

Um das zu bestätigen, kommt jetzt binwalk zum Einsatz. Damit suchen wir nach eingebetteten Dateien:

$ binwalk Y0D4.jpg

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             JPEG image data, JFIF standard 1.01
369525        0x5A375         RAR archive data, version 5.x

Hier sehen wir die Bestätigung, dass sich in der Binär Datei des Bildes noch ein RAR Archive versteckt.

Mit dem befehl unrar e können wir das Archive extrahieren:

$ unrar e Y0D4.jpg

Extracting from Y0D4.jpg

Extracting  is_this_it.jpg                                            OK
Extracting  Is_This_Really_It.jpg                                     OK
All OK

Jetzt haben wir zwei weitere JPEG-Dateien vor uns. Aufgrund des Namens ignorieren wir is_this_it.jpg erstmal und fokussieren uns auf:

Is_This_Really_It

Führen wir den Befehl strings auf die Datei Is_This_Really_It.jpg aus, erhalten wir folgendes:

$ strings -15 Is_This_Really_It.jpg

<CREATOR: gd-jpeg v1.0 (using IJG JPEG v80), quality = 100
flag:{H1DD3N_M34N1NG}

Das sieht doch nach unserer Flag aus flag:{H1DD3N_M34N1NG}.
Nach Abschicken dieser Flag erhalten wir:

Correct Flag!

7. Zusammenfassung 7. Zusammenfassung

CTFs sind Events, die herausfordernd, spannend und spaßig sind. In meinen Augen einer der besten Wege das eigene Wissen über die diversen Themen der IT-Sicherheit zu erweitern.
Mir nimmt es die Hemmung in für mich komplett neue Themengebiete der IT-Sicherheit reinzuschauen. Denn auch wenn ich es nicht schaffe eine Aufgabe zu lösen, habe ich mich mit dem Thema auseinandergesetzt und werde somit Schritt für Schritt an ein neues Thema herangeführt. Anschließend kann ich mir mehr Informationen über dieses Thema beschaffen und schauen, wie die Aufgabe am besten gelöst wird. So kann ich mein Wissen über alle diese Kategorien erweitern und habe dabei viel Spaß.

Darüber hinaus ist es für mich auch ein richtiges Happening, dass ich mit meinen Freunden teile. Sich gemeinsam die Nächte um die Ohren zu schlagen und dabei zu versuchen anspruchsvolle Rätsel und Herausforderungen zu meistern, lässt jedes noch so trockene Thema attraktiv erscheinen. Ich kann nur jede und jeden ermutigen, einen Blick in die Welt der CTFs zu werfen.

Bei der Marke governance2compliance der frobese GmbH bündeln wir diese Motivation und Erfahrungen, um in der Welt der IT-Sicherheit etwas zu bewegen. Der Bedarf an Fachkräften in diesem Themengebiet wächst und wächst. Viele Unternehmen können es sich nicht erlauben die Sicherheitsaspekte der IT zu ignorieren. Unser Dienstleistungsspektrum reicht dabei von IT-Security Consulting über Security Awareness bis zum Penetration-Testing.

Wir freuen uns auf spannende Projekte!

Über Felix Gebhardt

Felix Gebhardt
Felix Gebhardt

Trainee bei der frobese it-akademie GmbH | IT-Security Consultant bei g2c