Offensive Security Web Expert

Meine Erfahrung mit dem AWAE Kurs und der OSWE Prüfung

5 Minuten Lesedauer - 1023 Wörter

Einleitung

Im Juli 2020 habe ich die OSWE Prüfung von Offensive Security bestanden. Gerne würde ich meine Erfahrung hier teilen.

Der Offensive Security Web Expert (OSWE) ist die Zertifizierung für den Advanced Web Attacks and Exploitation (AWAE) Kurs. Ursprünglich war dies nur als Vor-Ort-Schulung während Black Hat in Las Vegas angeboten. Seit 2019 ist dieses Training auch online verfügbar.

Überblick über AWAE

Ursprünglich hatte ich 30 Tage Zeit in der Labumgebung für AWAE. Leider hat es zeitlich nicht geklappt wirklich im Lab zu arbeiten. Der Zugang ist entsprechend ausgelaufen ohne, ohne dass ich viel mit den Systemen gearbeitet habe.

Vorbereitung

Grundlegende Kenntnisse in Programmiersprachen wie PHP, Java, .NET, JavaScript sind essentiell. Ein Verständnis für die Abhängigkeiten im Quelltext sowie eine Übersicht, um sich im Code zurechtzufinden. Der Grundgedanke hierbei ist, sich einen guten Überblick zu verschaffen und zugrunde liegende Ausführungspfade zu verstehen.

Darüber hinaus sollten die OWASP Top Ten Web Application Security Risks vertraut sein. Jedes der gelisteten Risiken manifestiert sich unterschiedlich in den verschiedenen Programmiersprachen. Schwachstellen im Code zu finden sollte damit ein Kinderspiel sein.

Weiters sollte die Überprüfung großer Quelltextpassagen vertraut sein. Das Identifizieren unsicherer Funktionen kann einfach über einen simplen grep-Befehl erfolgen.

Schlussendlich sollte einen funktionierenden Exploit entwickelt werden. Am besten wird hier einfach die bevorzugte Skriptsprache verwendet. Wenn es sich zeitlich ausgeht, könnte eine Vorlage für ein Exploit vorbereitet werden. Mit einer solchen Vorlage im Ärmel kann man sich während der Prüfung auf die essentiellen Dinge konzentrieren.

Prüfungsvorbereitung

Der erste verfügbare Slot für meine Prüfung lag mehr als zwei Monate in der Zukunft. Die Startzeit hierfür war 3 Uhr mitten in der Nacht. Glücklicherweise war einige Tage vor meiner Prüfung ein Slot mit einer angemesseneren Startzeit am nächsten Tag verfügbar. Die Prüfung ist auf 48 Stunden Zeit begrenzt, in denen man die Aufgaben erledigen muss. Entsprechend lässt gute Vorbereitung mehr Zeit für die eigentlichen Aufgaben während der Prüfung.

Es dürfen keine automatisierten Tools verwenden. Folglich ist sqlmap für das Ausnutzen einer SQL-Injektion Schwachstelle nicht erlaubt. Allerdings kann man ein selbst geschriebenes Tool für die Prüfung vorbereiten. Am Ende geht es schließlich um Effizienz.

Pausen sind während der Prüfung sehr zu empfehlen. Einfach ein Glas Wasser zu trinken und sich ein bisschen zu dehnen funktionierte für mich ganz gut. Weiters habe ich versucht tagsüber stündlich eine kurze Pause einzulegen. Damit konnte ich die folgende Stunde wieder produktiv arbeiten.

Steckt man dennoch einmal in einer Sackgasse, sollte man probieren einen Schritt zurückzutreten. Wenn möglich kann man an einer anderen Stelle weiterarbeiten. Oder, man legt ein kurzes Nickerchen oder einen kleinen Spaziergang ein.

OSWE Prüfung

Die Zuordnung aller Anwendungspfade war für mich der erste Schritt. Eventuell muss dafür ein Nutzerkonto erstellt werden. Mit Zugriff auf die Datenbank sollte das ein Kinderspiel sein.

Diese erste Phase offenbarte schnell eine authentifizierte Schwachstelle. Das Ausnutzen dieser würde den Zugriff auf den Server ermöglichen. Allerdings setzten diese eine bestimmte Berechtigung in der Anwendung voraus. Folglich war der initiale Angriffsvektor ziemlich offensichtlich.

Die Identifizierung diesen ersten Angriffsvektors stelle sich als weniger trivial dar. Basierend auf der Programmiersprache der Anwendung saß ich einer falschen Fährte für ein System auf. Nachdem ich etwas Zeit verschwendet hatte, wechselte ich zum zweiten System.

Der initial Angriffsvektor für dieses System war schnell identifiziert. Etwas Programmierarbeit war auch ideal, um den Kopf frei zu bekommen. Nachdem das Exploit fertig war, konnte ich wieder voll konzentriert am ersten System arbeiten.

Einen Schritt zurückzutreten sollte sich als die richtige Idee erweisen. Ich arbeitete mich noch einmal durch meine Notizen und alle Anwendungspfade. Zu Beginn hatte ich eine anfällige Funktion ignoriert. Fälschlicherweise hatte ich angenommen, dass es sich nicht um ausführbaren Code handelte. Diese Annahme war allerdings komplett falsch. Mit dieser neuen Erkenntnis war das funktionierende Proof-of-Concept (PoC) schnell in Code gegossen. Beide Exploits funktionierten und ich hatte noch ungefähr 12 Stunden Zeit für die Prüfung. Bevor ich die Exploit fertigstellte wollte ich noch entspannt etwas Schlaf nachholen.

Am nächsten Morgen nach dem Zurücksetzen der virtuellen Maschinen funktionierte das letzte PoC nicht mehr. Mein Gehirn schaltete kurz in den Panikmodus um. Ich war wieder total wach und konnte auch meine Gedanken wieder sortieren. Mit etwas Debuggen konnte ich das zugrunde liegende Problem lokalisieren. Eine Voraussetzung musste noch erfüllt sein. Auf dem zurückgesetzten System war dies nicht mehr der Fall. Der notwendige Zustand ließ sich mit etwas Code einstellen. Das aktualisierte PoC lief automatisch alle notwendigen Schritte durch.

Nach 48 Stunden hatte ich alle notwendigen Flags entdeckt. Die Exploits waren soweit aufgeräumt und dokumentiert. Ich befasste mich umgehend mit dem Bericht und schickte wenig später die Dokumentation. Die Anweisungen für die Dokumentation waren sehr detailliert. Entsprechend habe ich zweimal überprüft, alle definierten Schritte korrekte auszuführen.

Nach einigen Tagen erhielt ich eine Bestätigung in meinem Posteingang:

We are happy to inform you that you have successfully completed the Advanced Web Attacks and Exploitation certification exam and have obtained your Offensive Security Web Expert (OSWE) certification.

Try Harder!

Anmerkungen

Wie schwierig war die Zertifizierung?

Nicht sehr. Das Erkennen der Sicherheitslücken war recht einfach. Ich habe jedoch ein paar Stunden damit verbracht, eine falsche Fährte zu verfolgen.

Was würde ich anders machen?

Ich würde definitiv mehr Zeit im Lab arbeiten. Außerdem musste ich während der Prüfung einige Dinge programmieren. Diese könnten einfach vor der Prüfung vorbereitet werden.

Was noch?

Ich hatte eine sehr langsame RDP-Verbindung zur Entwicklungsmaschine. Die Verzögerung war manchmal bis zu 2 Sekunden. Es war teilweise unmöglich mit dem System zu arbeiten. Im Gegensatz dazu stand der SSH-Zugriff, der keine signifikante Verzögerung aufwies.

Würde ich den Kurs wieder belegen??

Absolut! Der Fokus liegt definitiv auf White-Box-Tests. Man wird in der Lage sein, eine Schwachstelle in einer Webanwendung in einem engen Zeitfenster mit einem tiefgreifenden Verständnis des Quelltextes zu identifizieren und auszunutzen.

Welchen Rat würden Sie geben?

Try harder!

Referenzen

PHP

SQL-Injektion

Deserialisierung

Unsichere Funktionen

Referenzen