No cON Name CTF 2014 Finale

    Vom 30. Oktober bis 1. November fand in Barcelona die internationale Konferenz zur Informationssicherheit No cON Name 2014 statt, auf der zum zweiten Mal das Finale des Capture The Flag- Wettbewerbs stattfand . Das Team der Innopolis University BalalaikaCr3w nahm an diesem Wettbewerb teil und gewann den ersten Platz. Unter dem Schnitt unsere Geschichte darüber, wie es war, ein paar Beispiele für Aufgaben und danke an diejenigen, die uns dabei geholfen haben.


    CTF-Zone während des Finales

    Was ist CTF?


    Für diejenigen, die nicht wissen, was der Capture The Flag- Wettbewerb ist . Dies ist eine Art Analogon zu Programmierwettbewerben, aber hier müssen Sie meistens keinen eigenen Code schreiben, sondern Fehler bei anderen ausnutzen. Aufgaben imitieren Schwachstellen in realen Programmen, z. B. Pufferüberläufe, „hausgemachte“ Kryptografie, uneingeschränktes Einfügen von Text in SQL-Abfragen oder erfordern ähnliche Aktionen wie bei der Untersuchung von Computervorfällen: Analysieren von Protokollen, Suchen nach gelöschten Dateien und versteckten Daten . Das Ergebnis einer korrekt abgeschlossenen Aufgabe ist eine Textzeichenfolge - ein Flag . Die erhaltenen Flaggen werden an die Organisatoren des Wettbewerbs übergeben, um dem Team Punkte zu geben.

    Die meisten dieser Wettbewerbe finden online statt und können kostenlos registriert werden. Die größten von ihnen haben auch eine Endrunde, in der sich mehrere Teams (ca. 10), die in der Online-Runde die ersten Plätze belegt haben, auf der Plattform der Organisatoren versammeln, um unter gleichen Bedingungen (unabhängig von der Zeitzone) um den ersten Platz zu kämpfen.

    Ein bisschen Geschichte: "No cON Name CTF 2013"


    Im vergangenen Jahr wurde No cON Name CTF gemeinsam mit Facebook organisiert. Trotz der ziemlich seltsamen Qualifikationsrunde, die nur aus drei Aufgaben bestand, erwies sich das Finale als interessant und bemerkenswert. Das Format des Finales des letzten Jahres war für CTF-Hacker-Wettbewerbe etwas ungewöhnlich: Es gab Aufgaben für die Lösung, für die jeweils eine bestimmte Anzahl von Punkten vergeben wurde, und es gab auch neutrale Dienste auf den Servern der Organisatoren. Bei der Ausnutzung einer Sicherheitsanfälligkeit in einem der Dienste musste das Team seinen Namen in eine bestimmte Datei auf dem Server schreiben. Einmal in einem bestimmten Zeitraum nahm das Überprüfungsprogramm des Veranstalters den Teamnamen aus dieser Datei und verlieh ihm eine bestimmte Anzahl von Punkten.


    Das BalalaikaCr3w-Team belegte im vergangenen Jahr den 3. Platz

    Qualifikationstour „No cON Name 2014“


    In diesem Jahr dauerte die Qualifikationsphase 24 Stunden und bestand aus 10 Aufgaben, von denen wir 9 in den ersten Stunden des Spiels entschieden haben. Wir haben es geschafft, die letzte Aufgabe namens Explicit nur 5-6 Stunden vor dem Ende der CTF zu lösen. Eine Analyse einiger Aufgaben der Qualifikationsphase finden Sie in unserem Blog .

    Final “No cON Name 2014”


    Das Finale fand, wie Sie bereits verstanden haben, in Barcelona auf dem Territorium der Ramón Llull University statt . Bedingungen: 8 Stunden, 16 Aufgaben. Der Aufgabenpreis liegt zwischen 150 und 400 Punkten. Eine der Aufgaben ist ein gemeinsamer interaktiver Dienst, dessen „Erfassung“ dem Team alle 10 Minuten 50 Punkte bringt.

    Als nächstes beschreiben wir einige Aufgaben und unseren Lösungsansatz. Dieser Text wurde nicht so sehr für Fans der Informationssicherheit konzipiert, sondern für Leute, die daran interessiert sind, was sie bei solchen Wettbewerben tun. Deshalb haben wir einige Punkte vereinfacht, indem wir Details geopfert haben. Für eine detaillierte Analyse gibt es Aufzeichnungen in Team-Blogs.

    HIDDENtation Quest (300 Punkte)


    Aufgabe: " Grabe tief in die Datei ein und finde das Flag ", bei einer Datei mit einer Größe von ca. 95 MB.

    Einer der angenehmsten Momente in einem CTF ist das Lernen von etwas Neuem. Dieses Mal mussten wir das LUKS-Laufwerkverschlüsselungsformat verstehen. Mit dem Hex-Editor und der Internetsuche nach der Zeichenfolge „ LUKs “ ( 4C 55 4B 73 ) stellen wir schnell fest, dass es sich bei der angehängten Datei um eine solche virtuelle verschlüsselte Festplatte handelt .



    Das reguläre Cryptsetup- Dienstprogramm für dieses Festplattenformat hat sich geweigert, mit der Datei aus dem Job zu arbeiten, und die Meldung " Geräte-Hiddentation ist kein gültiges LUKS-Gerät " angezeigt . Aus der Formatbeschreibung erfahren wir, dass die korrekte Signatur am Anfang der Datei „ LUKS”( 4C 55 4B 53 ). Wir beheben das Problem, jetzt wird die Datei geöffnet, aber wir haben keinen Schlüssel für die verschlüsselte Festplatte.

    Nach dem Lesen der Dokumentation stellen wir fest, dass die Festplatte mit einem Hauptschlüssel verschlüsselt ist. Dieser Schlüssel selbst wird dem Benutzer jedoch nicht übergeben, sondern in mehreren Kopien in verschlüsselter Form im Festplattenheader gespeichert. Um jede Kopie des Hauptschlüssels zu entschlüsseln, wird ein eigener Benutzerschlüssel verwendet. Es können bis zu acht solcher Benutzerschlüssel vorhanden sein, je nachdem, wie viele Zellen im Plattenkopf speziell dafür zugewiesen wurden.

    In unserem Fall stellte das Cryptsetup- Dienstprogramm sicher, dass alle acht Zellen leer waren. Wenn Sie sich jedoch genau die Stelle ansehen, an der sich die Zellen im Hex-Editor befinden, können Sie feststellen, dass sich in einem von ihnen einige Daten befinden:



    Die ersten vier Bytes eines Datensatzes mit dem Wert 0x0000DEAD zeigen an, dass er inaktiv ist. Wenn Sie sie durch 0x00AC71F3 ersetzen, aktivieren Sie diesen Eintrag. Jetzt müssen Sie den Benutzerschlüssel für diese Zelle finden.

    Unmittelbar nach dem Header befindet sich an der Stelle, an der normalerweise null Bytes zur Ausrichtung hinzugefügt werden, Text mit einigen Sonderzeichen:



    " Try \ x19 häufigste Passwd in \ x07 \ xDD ", was interpretiert werden kann als: " Try the 25 beliebtesten 2013 Passwörter . " Keines der 25 beliebtesten Passwörter darf jedoch den Container öffnen.

    Der nächste Schritt, leider erwies sich als ein Spiel „sein Ratespiel “ (die am meisten gehasste Kategoriezuweisungen für alle CTF Teams). Wir haben Glück, dass das Dienstprogrammcryptsetup hat dieselben Container wie die Container im Job erstellt. Nachdem wir den Container selbst erstellt haben, haben wir festgestellt, dass der Datensatz für den letzten Schlüssel im Feld „ Schlüsselmaterialversatz “ den Wert 0x0708 enthält. In der Datei aus der Aufgabe lautet er jedoch 0x0608 : Wenn



    Sie ihn durch den richtigen Wert ersetzen, können Sie den Container mit dem Kennwort „ Schatten “ öffnen .

    Dies ist jedoch nicht die ganze Lösung. Der entschlüsselte Container enthielt ein Disk-Image mit drei Partitionen. In den Hilfedateien in den ersten beiden Abschnitten wurde erläutert, worauf im dritten Abschnitt zu achten ist. Der dritte Abschnitt enthielt überhaupt keine Dateien. Wie uns die Organisatoren später erklärten, gab es an einem gewissen Versatz eine NTFS-Partition, auf der sich die Datei befand. Wir haben jedoch die erste CTF-Regel verwendet: " Strings überall ". Unter den vielen Zeilen aus der Datei finden wir eine sehr interessante:

    rot13:APAq986942o809qnn32n6987n7422771n53s59r5n1s02rq700ppr43p5196non749r

    Als Ergebnis erhalten wir nach dem Anwenden von rot13 das Flag:
    NCNd986942b809daa32a6987a7422771a53f59e5a1f02ed700cce43c5196aba749e .

    Quest demDROID (400 Punkte)


    Aufgabe: eine Anwendung für Android in Form einer APK-Datei gegeben.

    Es gibt viele Artikel über Habr, wie solche Dateien dekompiliert werden können, daher werden wir nicht weiter darauf eingehen. Nach der Dekompilierung stellen wir fest, dass die Anwendung eine Verbindung zum Server 10.210.6.1 im Spielesubnetz herstellt und die folgende HTTP-Anforderung sendet:

    POST / HTTP/1.0
    Content-Type: text/xml
    User-Agent: denDROID 1.0
    Host: 10.210.6.1
    {$username}{$password}

    Zu diesem Zeitpunkt hatten wir zwei Möglichkeiten zur Ausnutzung:

    1. SQL-Injection. Vergleichen Sie zwei Abfragen (ohne Header):

    Normale Abfrage:
    balalaikaasd

    Die Antwort lautet:
    User balalaika is not found!


    Injektionsanforderung im Login:
    q' OR 'x'='xasd

    Die Antwort lautet:
    Invalid password for user q' OR 'x'='x!


    2. Attack XXE (XML eXternal Entity) -Anforderung

    :
    ]>q' OR 1=1 /*&xxe;&xxe;

    Die Antwort lautet:
    Invalid password for user q' OR 1=1 /*root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/bin/sh
    bin:x:2:2:bin:/bin:/bin/sh
    sys:x:3:3:sys:/dev:/bin/sh
    # sync:x:4:65534:sync:/bin:/bin/sync
    # games:x:5:60:games:/usr/games:/bin/sh
    man:x:6:12:man:/var/cache/man:/bin/sh
    # lp:x:7:7:lp:/var/spool/lpd:/bin/sh
    # mail:x:8:8:mail:/var/mail:/bin/sh
    # news:x:9:9:news:/var/spool/news:/bin/sh
    # uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
    proxy:x:13:13:proxy:/bin:/bin/sh
    www-data:x:33:33:www-data:/var/www:/bin/sh
    backup:x:34:34:backup:/var/backups:/bin/sh
    list:x:38:38:Mailing List Manager:/var/list:/bin/sh
    irc:x:39:39:ircd:/var/run/ircd:/bin/sh
    gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
    nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
    libuuid:x:100:101::/var/lib/libuuid:/bin/sh
    sshd:x:101:65534::/var/run/sshd:/usr/sbin/nologin
    messagebus:x:102:103::/var/run/dbus:/bin/false
    ch6:x:1000:1000::/home/ch6:/bin/sh
    !


    Mit XXE versuchen wir, verschiedene Optionen für den Dateinamen mit dem Flag ( flag , flag.txt , / flag , /flag.txt usw.) sowie verschiedene Konfigurationsdateien (z. B. /etc/nginx/nginx.conf ) zu sortieren . aber wir finden nichts interessantes.

    Wir kehren zum Betrieb der SQL-Injection zurück. Mit der Funktion SUBSTR () wählen wir den Benutzernamen und das Passwort zeichenweise aus , wie sich herausstellte, der einzige Benutzer in der Datenbank. Wir versuchen uns darunter einzuloggen:

    l3wlzHunt3rmw4h4h4

    Serverantwort:

    Welcome, l3wlzHunt3r!
    Good job! But your flag is in another castle!



    Oh, diese Trolle.

    Leider ist das nicht die Antwort. Manchmal sind Aufgaben in CTF so angeordnet, dass die scheinbar korrekte Art der Lösung zu einem falschen Ergebnis führt. Honeypot sozusagen.

    Es gab nichts anderes in der Datenbank, also musste ich zu XXE zurückkehren. Beim Betrachten der .bash_history- Datei des Benutzers ch6 haben wir einige verdächtige Zeilen gesehen:

    ...
    tjG86fKwJ2yZ
    ...
    sudo vim /etc/hosts
    ping Wopr
    sudo vim /etc/hosts
    ping Osiris
    nc Osiris 1135
    nc Osiris 11235
    curl Osiris 11235
    curl Osiris:11235
    ...
    

    Es stellte sich heraus, dass tjG86fKwJ2yZ das Passwort für den Benutzer ch6 ist. Als nächstes der Fall für kleine:

    ssh ch6@10.210.6.1
    tjG86fKwJ2yZ
    $ curl Osiris:11235
    NcN_f86c108687fd25eea4f8ba10dd4c9bad8fa70a9f74179caf617364965cb8cb4f
    

    Flagge: NcN_f86c108687fd25eea4f8ba10dd4c9bad8fa70a9f74179caf617364965cb8cb4f

    Es sollte beachtet werden , dass dies nicht ein bewusster Schritt seitens der Organisatoren, weil die Rechte ausgestellt wurden , so dass ssh Zugang zu sauberen erlaubt .bash_history , fügt authorized_keys ihre öffentlichen Schlüssel sowie vollständig verweigert den Zugang zu anderen Teams.

    Es ist auch bemerkenswert, dass der Osiris-Host (dessen Adresse über XXE aus der Datei / etc / hosts gefunden werden konnte) von Befehlscomputern aus nicht direkt zugänglich war. Der Zugriff war nur vom Server 10.210.6.1 möglich.

    Trotzdem erwies sich die Aufgabe als schwierig und allgemein interessant, da Fähigkeiten in zwei Kategorien gleichzeitig erforderlich waren (Reverse + Web).

    Zeitleiste


    Von den ersten Minuten an haben wir die Initiative selbst in die Hand genommen und das erste Blut gemacht :

    Die erste Aufgabe, die wir gelöst haben, war eine ziemlich einfache Steganographie namens WireTap .

    Bis Mitte Nachmittag der Gastgeber des Turniers, ein erfahrenes Spanisch int3pids Team eröffneten das Konto zu den Punkten, einen neutralen Dienst nahmen Drachen . Die Intrige wuchs, weil int3pids für den erfassten Dienst alle 10 Minuten 50 Punkte erhielt, während gleichzeitig andere Aufgaben gelöst und Punkte für sie gesammelt wurden. Ein paar Stunden später trat das ukrainische dcua-Team in den Kampf ein und löste eine Aufgabe namens Wodka , aber es war bereits schwierig für sie, den Sieg zu erringen: Unser BalalaikaCr3w-Team und das int3pids-Heimteam waren bereits zu weit vorne.

    Infolgedessen haben wir es geschafft, bis zum Ende des Wettbewerbs an der Spitze des Scorboards zu bleiben:

    Teams mit einer Punktzahl von Null wurden nicht auf dem Scorboard angezeigt.

    Es sollte beachtet werden, dass der NcN CTF in Barcelona erst das zweite Jahr ist und nicht so beliebt und berühmt ist wie einige andere CTF-Wettbewerbe. Die Qualität der Veranstaltung wächst jedoch. Ich möchte der No cON Name Association wünschen, dass sie sich nicht auf ihren Lorbeeren ausruht , sondern weiter macht, noch interessantere Aufgaben vorbereitet, mehr Sponsoren anzieht und das Niveau und das Ansehen ihrer Konferenz und CTF erhöht.

    Danksagung


    Das BalalaikaCr3w- Team dankt der Innopolis University für die Unterstützung und Organisation unserer Reise zum Finale. Innopolis ist eine neue Universität mit Schwerpunkt auf IT und Robotik. Ab dem nächsten Jahr ist die Eröffnung des Cyber ​​Security Master- Programms geplant , das junge Fachkräfte im Bereich Informationssicherheit anzieht.

    Unser Team dankt auch den Unternehmen Active und ABBYY Language Services für die praktikable Unterstützung ihrer Mitarbeiter bei der Teilnahme an dieser Veranstaltung.

    Referenzen


    Eine Diskussion der Aufgaben aus dem Finale der No cON Name CTF 2014 und anderen Wettbewerben finden Sie in unserem Blog: ctfcrew.org
    Informationen zu bevorstehenden CTFs und allen Veranstaltungen in der CTF-Welt im Allgemeinen auf der Hauptressource aller Teams: ctftime.org .

    Jetzt auch beliebt: