Geknackt! Highlights von KringleCon 5: Goldene Ringe

Geknackt! Highlights von KringleCon 5: Goldene Ringe

Bei der SANS Holiday Hack Challenge 2022 trifft Lernen auf Spaß – schnallen Sie sich an für eine Kracherfahrt am Nordpol, während ich Grinchums faulen Plan vereitle und die fünf goldenen Ringe wiederbekomme

Dies ist mein erstes Jahr, in dem ich an der teilnehme SANS Feiertags-Hack-Challenge und es war eine tolle Zeit. Durch eine Reihe von 16 Herausforderungen, die von einfach bis schwierig reichten, habe ich geübt, verdächtigen Netzwerkverkehr und PowerShell-Protokolle zu analysieren und zu schreiben Suricata-Regeln, Ausbruch aus a Docker-Container, Finden von durchgesickerten Schlüsseln zum Ausnutzen von a GitLab CI/CD-Pipeline und ein AWS-Benutzer, dirigieren XML External Entity-Angriffe, und Hacken eines Smart Contracts, um a zu kaufen nicht fungibles Zeichen.

Das Beste an dieser Erfahrung war, dass sie mich in neue Tools und Technologien einführte und so mein Wissen über Cybersicherheit noch weiter erweiterte. Hier teile ich einige Highlights aus der Lösung der Herausforderungen.

Orientierung

Jeder Teilnehmer erhält einen Avatar, um durch eine In-Browser-Videospielumgebung zu navigieren, die am Nordpol angesiedelt ist:

Habe es geknackt! Highlights von KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Während der Orientierung erhalten Sie eine Kryptowährungs-Wallet, die das Spiel verwendet, um KringleCoins für das Abschließen von Herausforderungen zu vergeben, und die Sie in der letzten Herausforderung verwenden, um einen Smart Contract zu hacken. Interessanterweise verfolgt das Spiel alle KringleCoin-Transaktionen in einer Ethereum-Blockchain, was bedeutet, dass eine vollständige Aufzeichnung Ihres Fortschritts auch in dieser Blockchain gespeichert wird.

Auf zum ersten Ring des Spiels.

1. Tolkien-Ring

Habe es geknackt! Highlights von KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Um den Tolkien-Ring zu finden, musste ich meine Protokollanalyse-Muskeln spielen lassen.

Wireshark-Phishing

Zuerst habe ich Wireshark verwendet, um die bereitgestellten zu analysieren .pcap Datei, die einen Server aufdeckte adv.epostoday[.]uk Herunterladen der Datei Ref_Sept24-2020.zip an einen Rechner:

Habe es geknackt! Highlights von KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Als ich in die ZIP-Datei spähte, fand ich eine ausführbare Datei namens Ref_Sept24-2020.scr die zwei Erkennungen in ESET Endpoint Security ausgelöst hat: BAT/Läufer.ES und Generik.TAGTBG. Diese Malware führt schließlich zu einer bösartigen ausführbaren Datei, die im Arbeitsspeicher ausgeführt wird config.dll und von ESET erkannt Erweiterter Speicherscanner as Win32/Dridex.DD.

Windows-Ereignisprotokolle

Als nächstes analysierte ich die bereitgestellten .evtx Datei mit PowerShell-Protokollen mit Ereignisanzeige. Es gibt zwar andere Tools zum Analysieren von PowerShell-Protokollen, aber wenn Angreifer wissen, wie man „liv-of-the-land“-Binärdateien verwendet, um unter dem Radar zu bleiben, sollten Verteidiger auch mit den nativen Tools vertraut sein, die ein Betriebssystem bereitstellt.

Da die Protokolle 10,434 Ereignisse enthielten, habe ich die Ereignisse nach Datum gruppiert und dann die Find-Aktion ausgeführt, um nach Ereignissen zu suchen, die die enthalten $ Charakter. In PowerShell, $ wird zum Erstellen und Referenzieren verwendet Variablen. Ich habe einen Angriff festgestellt, der am 24. Dezember 2022 stattfand, als der Angreifer das folgende Skript ausführte:

Habe es geknackt! Highlights von KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Es sieht so aus, als hätte der Angreifer ein geheimes Rezept gefunden und die geheime Zutat ausgetauscht Honig für Fischöl, und erstellte dann eine neue Rezeptdatei. Dadurch wurde ein Event mit der ID 4104 ausgelöst, was für die Ausführung von Remote-PowerShell-Befehlen steht. Also habe ich die Ereignisse nach dieser ID gefiltert, was mir hilft, weitere bösartige Ereignisse schneller zu finden.

Suricata-Regatta

Die letzte Übung für den Tolkien-Ring bestand darin, vier Suricata-Regeln zu schreiben, um den Netzwerkverkehr auf einen Dridex-Befall zu überwachen:

alert dns $HOME_NET any -> any any (msg: „Bekannter schlechter DNS-Lookup, mögliche Dridex-Infektion“; dns.query; Inhalt: „adv.epostoday.uk“; nocase; sid:1; rev:1;)

alert http 192.185.57.242 beliebig <> beliebig beliebig (msg: „Verdächtige Verbindungen untersuchen, mögliche Dridex-Infektion“; sid:2; rev:1;)

alert tls any any -> any any (msg: „Ungültige Zertifikate untersuchen, mögliche Dridex-Infektion“; tls.cert_subject; content: „CN=heardbellith.Icanwepeh.nagoya“; sid:3; rev:1;)

alert http any any -> any any (msg: „Verdächtige JavaScript-Funktion, mögliche Dridex-Infektion“; file_data; content: „let byteCharacters = atob“; sid:4; rev:1;)

In der Reihenfolge fangen diese Regeln DNS-Lookups ab adv.epostoday[.]uk, Verbindungen zur IP-Adresse 192.185.57[.]242, die Verwendung des bösartigen Servers hörtebellith.Icanwepeh[.]nagoya identifiziert über den gebräuchlichen Namen (CN) in einem TLS-Zertifikat und die Verwendung von JavaScript A nach B() Funktion zum Decodieren einer binären Zeichenfolge, die base64-codierte Daten auf dem Client enthält.

Das Abschließen dieser drei Herausforderungen brachte mir den Tolkien Ring ein:

Habe es geknackt! Highlights von KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Auf zum zweiten Ring.

2. Elfenring

Habe es geknackt! Highlights von KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Die prominentesten Herausforderungen für den Elfenring waren Prison Escape und Jolly CI/CD.

Prison Escape

Prison Escape war eine strenge Erinnerung daran, dass das Gewähren von Root-Rechten an einen Benutzer in einem Docker-Container genauso gut ist wie das Gewähren von Root-Rechten auf dem Hostsystem. Die Herausforderung bestand darin, aus dem Container auszubrechen. Nun, ganz einfach, wenn Sie root sind:

Habe es geknackt! Highlights von KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Als Root-Benutzer habe ich die Partitionstabellen für das Gerät aufgelistet und dann das Host-Dateisystem gemountet, wodurch ich vollen Zugriff auf den Host erhielt. Jetzt konnte ich nach dem Schlüssel suchen, der sich laut den Hinweisen im Spiel im Home-Verzeichnis befinden sollte:

Habe es geknackt! Highlights von KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Lustiges CI/CD

Während das schnell ging, brauchte ich von allen Herausforderungen am längsten, um es herauszufinden. Zuerst erhielten wir ein Git-Repository zum Klonen über HTTP:

Habe es geknackt! Highlights von KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

An der URL konnte ich erkennen, dass der Name des Repositorys lautete wordpress.flag.net.internal, also zog ich in das Repository und fand eine WordPress-Website. Ich habe überprüft, ob die Website live ist:

Habe es geknackt! Highlights von KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Ja, die Website war funktionsfähig. Ich war neugierig, ob es irgendwelche durchgesickerten Schlüssel in der Quellcode-Historie gibt. Wenn ja, sollte ich in der Lage sein, Änderungen in den Quellcode zu verschieben. Also rannte ich Git Protokoll:

Habe es geknackt! Highlights von KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Aus den Commit-Meldungen sieht es aus wie a verpflichten wurde nach dem Hinzufügen von Assets erstellt, um ein Whoops zu beheben. Zeit, sich den Pre-Whoops-Commit anzusehen:

Habe es geknackt! Highlights von KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Ausgezeichnet, ich fand eine .ssh Verzeichnis mit Schlüsseln. Lassen Sie uns diese Schlüssel kopieren und einen SSH-Agenten und einen Git-Benutzer konfigurieren, um zu sehen, ob ich mich als Besitzer dieser Schlüssel ausgeben kann:

Habe es geknackt! Highlights von KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Kehren wir nun zum Hauptzweig zurück und testen, ob wir eine triviale Änderung am Quellcode vornehmen können (mit Nano habe ich einfach ein Leerzeichen zu einer der Dateien hinzugefügt):

Habe es geknackt! Highlights von KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Also habe ich den ersten Teil der Herausforderung gemeistert, indem ich mich als einer der WordPress-Entwickler ausgab, aber hat die Website nach meinem Push noch funktioniert?

Habe es geknackt! Highlights von KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Mein Push hat etwas geändert, da die Website jetzt auf Port 8080 umgeleitet wird.

Bis jetzt hatte ich den CI/CD-Teil der Herausforderung ignoriert, der der Schlüssel zum Abschluss sein sollte. Das Repository enthält eine .gitlab-ci.yml -Datei, die die Konfiguration für eine GitLab CI/CD-Pipeline bereitstellt. Jedes Mal, wenn Sie auf das Repository pushen, springt das CI/CD-System ein und a GitLab-Runner führt die Skripte in dieser YML-Datei aus. Das ist so gut wie eine Remote-Code-Ausführung auf dem Server zu erreichen, auf dem GitLab Runner installiert ist, dachte ich.

Als ich näher hinsah, sah ich eine rsync Skript, das alle Dateien aus dem Git-Repository in das Verzeichnis auf dem Webserver kopiert, von dem aus die Website bereitgestellt wurde. Zuerst habe ich versucht, zu verwenden rsync den Datenfluss umzukehren, indem alle Dateien vom Webserver in das Git-Repository kopiert werden, jedoch ohne Erfolg.

Nach vielen Hypothesentests hatte ich schließlich meine bahnbrechende Erkenntnis: Anstatt zu versuchen, die WordPress-Website zu „reparieren“ oder schädliche Skripte über das Build-System auszuführen, stellen Sie eine Website bereit, die Informationen vom Webserver preisgibt. Innerhalb index.php (befindet sich auf der obersten Ebene des Repositorys) kann ich den Code auskommentieren, der die WordPress-Website lädt, und PHP-Befehle ausführen, die den Webserver prüfen.

Tatsächlich kann ich sogar Shell-Befehle mit PHP ausführen. ich habe das gefunden durchgehen() hat problemlos funktioniert.

In index.php, Ich benutzte // zwei Zeilen auskommentieren und ich habe hinzugefügt passthru('ls -la /'); auf der letzten Zeile. Dadurch wird eine Website erstellt, die alle Dateien im Stammverzeichnis des Webservers auflistet:

Habe es geknackt! Highlights von KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Dann habe ich diese Änderung in das Git-Repository gepusht und das GitLab CI/CD-System hat die Aktualisierung der Website für mich übernommen:

Habe es geknackt! Highlights von KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Ah, der Elfenring muss drin sein flag.txt! Ich wiederholte die vorherigen Schritte, aber dieses Mal mit passthru('cat /flag.txt'); Enthüllung des Elfen-Rings, als ich das nächste Mal die Website anforderte:

Habe es geknackt! Highlights von KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Weiter zum dritten Ring.

3. Netzring

Habe es geknackt! Highlights von KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Die spaßigste Herausforderung für mich war Open Boria Mine Door, obwohl Glamtariel's Fountain interessant war und gleichzeitig Rätsel aufwies.

Öffnen Sie die Tür der Boria-Mine

In Open Boria Mine Door wurden uns sechs Stifte oder Mini-Herausforderungen präsentiert, um die Eingabevalidierung oder eine zu umgehen Inhaltssicherheitsrichtlinie um die Eingangs- und Ausgangsrohre zwischen den Stiften zu verbinden, einschließlich der Anpassung der Rohrfarben. Für die meisten Pins habe ich HTML verwendet, um eine Liste mit Verbindungsbuchstaben 'o' zu schreiben. Hier ist meine endgültige Lösung:

Habe es geknackt! Highlights von KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Stift 1

Es gab keine Validierung für Pin 1, also war es eine einfache Frage von HTML und Inline-CSS:

Stift 2

Pin 2 hatte eine Inhaltssicherheitsrichtlinie, die JavaScript nicht erlaubte, aber Inline-CSS erlaubte, also war das für meine Methode kein Problem:

Stift 3

Pin 3 hatte eine Inhaltssicherheitsrichtlinie, die CSS verbot, aber Inline-JavaScript erlaubte, also habe ich stattdessen JavaScript verwendet, um die Stile zu ändern:

Stift 4

Pin 4 hatte keine Inhaltssicherheitsrichtlinie, aber es hatte eine sanitizeInput-Funktion auf der Clientseite, die doppelte Anführungszeichen, einfache Anführungszeichen, linke und rechte Klammern entfernte. Der Trick dabei war zu erkennen, dass diese Funktion nicht durch das Absenden des Formulars ausgelöst wurde, sondern durch das Unschärfe Veranstaltung. Mit anderen Worten, das Bewegen der Maus vom Eingabefeld weg löste die aus Unschärfe Ereignis, wobei alle Eingaben bereinigt werden. Die Lösung bestand darin, das Formular durch Drücken von abzusenden Enter dabei darauf achten, den Mauszeiger nicht über die Grenzen des Eingabefeldes hinaus zu bewegen:

Stift 5

Pin 5 hatte das gleiche sanitizeInput function und bypass zusammen mit einer Inhaltssicherheitsrichtlinie, die Inline-CSS verbietet, aber Inline-JavaScript zulässt:

Stift 6

Schließlich hat Pin 6 die Eingabe nicht bereinigt, aber eine strengere Inhaltssicherheitsrichtlinie verwendet, die sowohl Inline-CSS als auch JavaScript verbietet. Meine Lösung bestand darin, veraltetes HTML zu verwenden, um die benötigten Stile zu erhalten, und eine Tabelle anstelle einer Liste zu verwenden:

Glamtariels Brunnen

Glamtariels Brunnen war Gelegenheit zum Üben XML External Entity (XXE)-Angriffe. Herauszufinden, wie man eine benutzerdefinierte XML-Entität definiert, eine Entität definiert, die eine Datei vom Server anfordert, und diese Entität als Nutzlast zu einer HTTP-Anforderung hinzufügt, war nicht schwer. Der schwierigste Teil war, die Rätsel im Spiel herauszufinden, um den Pfad zu den Dateien zu erraten, die der Server verlieren würde. Hier ist die Durchbruchanfrage, die den Ort des Goldrings enthüllt:

Habe es geknackt! Highlights von KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Habe es geknackt! Highlights von KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Habe es geknackt! Highlights von KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Ich möchte zwei Lehren aus dieser Herausforderung anbieten. Verwenden Sie zunächst die Inhaltstypkonverter Erweiterung in Rülpsen zum Konvertieren von JSON-Payloads in XML. Versuchen Sie zweitens, die XXE-Nutzlast in verschiedenen Tags zu platzieren – es hat lange gedauert, bis ich herausfand, dass ich nur die platzieren musste &xxe; Nutzlast in der reqType tag statt der imgDrop -Tag.

Weiter zum vierten Ring.

4. Wolkenring

Habe es geknackt! Highlights von KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Das Spielen um den Cloud Ring war ein Anfängerausflug in die Befehlszeilenschnittstelle (CLI) von Amazon Web Services (AWS).

Der Höhepunkt dieser Reihe von Herausforderungen war die Verwendung Trüffelschwein um AWS-Anmeldeinformationen in einem Git-Repository zu finden und sie dann auszunutzen, um sich als AWS-Benutzer zu authentifizieren. Ein Angreifer, der diese Position erreicht, kann verwenden aws ich bin Befehle, um die Richtlinien abzufragen, die für den Benutzer gelten, und damit, auf welche Cloud-Assets zugegriffen und diese missbraucht werden können.

Auf zum fünften Klingeln.

5. Brennender Feuerring

Habe es geknackt! Highlights von KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Der lehrreichste Teil dieser Reihe von Herausforderungen war das Lernen Merkle Bäume einen Smart Contract auszunutzen und sich auf die Vorverkaufsliste für den Kauf eines nicht fungiblen Tokens (NFT) setzen. Hier bestand die Herausforderung darin, die Beweiswerte zu entdecken, die zusammen mit meiner Brieftaschenadresse und dem Wurzelwert eines Merkle-Baums meine Aufnahme in die Vorverkaufsliste bewiesen.

Nach einigen erfolglosen Versuchen, Proof-Werte bereitzustellen, wurde mir klar, dass ich niemals in der Lage sein würde, die Proof-Werte für den bereitgestellten Wurzelwert herauszufinden, da es keine Möglichkeit gab, alle Blattwerte zu kennen, die zu seiner Berechnung verwendet wurden. Ich musste den Root-Wert ändern, damit ich einen gültigen Merkle-Baum bereitstellen konnte.

Die richtigen Das Tool von Professor QPetabyte, habe ich einen Merkle-Baum aus zwei Blättern erstellt, die aus meiner Brieftaschenadresse und der Adresse für die bestehen BSRS_nft Smart Contract, den ich mit dem Blockchain Explorer im Spiel in Block zwei der Ethereum-Blockchain des Spiels gefunden habe. Das Tool generierte den Root-Wert dieses Baums und den Proof-Wert für meine Wallet-Adresse. Dann habe ich Burp verwendet, um die Anfrage an den Server abzufangen, und den Standard-Root-Wert geändert, damit ich einen gültigen Merkle-Baum senden konnte. Hier ist mein NFT-Sporc zum Festpreis von 100 KringleCoins gekauft:

Habe es geknackt! Highlights von KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

In der Tat ein hässliches Exemplar.

Finale

Habe es geknackt! Highlights von KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Ein großes Dankeschön an die Organisatoren der SANS Holiday Hack Challenge, die meinen Verstand auf neue Weise erweitert und dabei geholfen haben, mein Wissen über Cybersicherheit zu vertiefen. Ich freue mich nicht nur auf die Herausforderung im nächsten Jahr, sondern werde sogar die Ausgaben 2020 und 2021 dieser Herausforderung ausprobieren. Und wenn Sie noch nie an dieser Challenge teilgenommen haben, hoffe ich, dass diese Highlights Ihr Interesse geweckt haben.

Zeitstempel:

Mehr von Wir leben Sicherheit