Anatomie einer Red-Team-Übung - Kapitel 2

20 April 2021

Wichtiger Hinweis vorab: Die einzelnen Phasen sind nicht vollständig beschrieben und die hier angegebenen Informationen dienen der Veranschaulichung der Zusammenhänge und dem besseren Verständnis dieses Textes, wobei einige Details fehlen – wir bitten dies zu entschuldigen.

Payload erstellen

Bevor wir anfingen, haben wir uns auf die Erstellung der Payload konzentriert, die für unsere Angriffsszenarien verwendet wird. Wir haben uns für eine stufenlose PowerShell-Reverse-HTTPS-Payload entschieden, die mit dem HTA-Dropper übermittelt und dann auf dem Zielcomputer ausgeführt wird. Dazu brauchen wir zunächst eine funktionierende Payload, die EDR- und AV-Lösungen umgeht.

PowerShell-Payloads sind aufgrund des AMSI-Schutzes, der den Speicherinhalt analysiert, immer schwieriger zu umgehen, was bedeutet, dass die Verschlüsselung keine Wirkung hat. Dann überprüft AmsiScanBuffer() den entschlüsselten Skriptinhalt auf bekannte Bedrohungen. Da wir wussten, dass PowerShell Version 2, die AMSI nicht unterstützt, möglicherweise nicht auf unserem Zielcomputer installiert ist und dass die neuesten AMSI-Bypass-Exploits bekannt sind und erkannt werden, mussten wir eine Payload erstellen, die die Erkennung umgeht.

Wir haben uns für einen Bypass von Sophos Antivirus entschieden, da das Unternehmen eine eigene AMSI-Engine implementiert hat und Windows AMSI unterstützt wird.

(Für AMSI-Unterstützung pro AV/EDR-Lösung siehe)

Um unsere Payload zu erstellen, haben wir Cobalt Strike zusammen mit unserem angepassten Template verwendet, bei dem wir die häufigsten erkannten Zeichenketten und Aufrufe geändert haben (tschüss VirtualAlloc()!). Darüber hinaus haben wir ein benutzerdefiniertes Cobalt Strike-Profil auf unserem Teamserver erstellt, das mit benutzerdefinierten „prepend“- und „strrep“-Headern (neben vielen anderen) verwendet wird, um bestimmte Zeichenfolgen aus unserer generierten Payload zu entfernen/hinzuzufügen. Diese Einstellungen werden auch von der Cobalt Strike-Payloadgenerierung in der Nacherfassungsphase zum Zweck der Persistenz und der seitlichen Bewegung verwendet.

(vgl.)

Um die Umgehung zu gewährleisten, könnten wir sogar das Artefakt „dist-pipe“ aus dem Artefakt-Kit verwenden, um die Erkennung durch die Sandbox zu umgehen (dies erfordert möglicherweise einige Anpassungen).
Sobald unsere Payload generiert war, haben wir den Shellcode-Teil manuell entpackt (GZIP-Entkomprimierung -> base64 und XOR-Schlüsseldekodierung -> Hex-Kodierung) und durch Hinzufügen einiger Assembler-Befehle modifiziert, um die Signatur zu ändern, wobei wir gleichzeitig darauf geachtet haben, den Ausführungsfluss nicht zu unterbrechen.
Nachfolgend ein Beispiel für die hexadezimal kodierte Payload vor der Anpassung:

Abbildung 1 – Standardpayload

Nach der Anpassung haben wir sie ausgeführt und festgestellt, dass sie immer noch von AMSI markiert wird. Nach weiterer Prüfung haben wir festgestellt, dass es sich um den Aufruf von „[System.Runtime.InteropServices.Marshal]::Copy($var_code, 0x0, $var_buffer, $var_code.length)“ handelt, der markiert wurde.

Um dieses Problem zu lösen, haben wir das von Daniel Bohannon entwickelte PowerShell Invoke-Obfuscation-Tool verwendet, um unsere PowerShell-Template-Strings zu verschleiern.

Zusammengefasst haben wir nun eine Payload mit:

  • Benutzerdefiniertem PS1-Template
  • Benutzerdefiniertem Cobalt-Profil für C2-Kommunikation und Payload-Generierung
  • Benutzerdefiniertem Shellcode
  • Verschleierter Payload

Nach mehreren Versuchen auf unserer virtuellen Maschine, auf der Sophos installiert ist, gelang es unserer Payload schließlich, dies, aber auch andere AV-Produkte, erfolgreich zu umgehen:

Abbildung 2 – Scan-Ergebnis der AV-Produkte

Zusammen mit unserer HTTPS-Proxy-fähigen PowerShell-Payload haben wir auch unseren HTA-Dropper (Mitre ATT&CK T1218.005) erstellt, der, wenn er vom Ziel ausgeführt wird, unsere .ps1-Payload herunterlädt und im Speicher ausführt. Natürlich mussten wir auch ein gültiges SSL-Zertifikat für unseren Nginx-Reverse-Proxy erstellen und konfigurieren, um die Verschlüsselung des Datenverkehrs und eine erfolgreiche Zielverbindung mit unserem C&C-Server sicherzustellen.

Die Payload ist nun fertig. Zeit, die Angriffsszenarien vorzubereiten!

Szenario 1: USB-Dropping-Ansatz

Wie im vorigen Kapitel erwähnt, wurde das USB-Dropping-Szenario entworfen, weil der Parkplatz öffentlich zugänglich und USB-Dropping ein häufig genutzter Angriffsvektor ist.

Damit lässt sich die Sicherheit und „Härtung“ von gebrauchten Laptops testen, aber auch das Sicherheitsbewusstsein der Mitarbeiter selbst und die Richtlinien für den Fall, dass ein solches Ereignis eintritt und der IT-Sicherheitsabteilung gemeldet wird.

Um einen erfolgreichen USB-Dropping-Angriff durchzuführen, mussten wir ihn für die Mitarbeiter des Kunden glaubhaft erscheinen lassen, was mehrere Schritte erforderte:

  • Ein realistisches Angriffsszenario;
  • Eine unentdeckte proxy-fähige Payload zur Umgehung von AV/EDR/AMSI usw.;
  • Eine gefälschte Webseite aufgrund unseres geplanten Handelns;
  • Einen Trick, um Mitarbeiter dazu zu bringen, auf einen Link zu klicken und unseren Dropper auszuführen.

Das gewählte Szenario war ein neuer gesicherter Gehaltsabrechnungs-Dienst der Personalabteilung, der es den Mitarbeitern ermöglicht, ihre digitalen Gehaltsabrechnungen direkt online abzurufen. Dazu kauften wir einen realistischen Domänennamen und hosteten die gefälschte Webseite auf einem virtuellen Host, der sich als Adresse des Kundenunternehmens ausgab.

Wir fügten eine Weiterleitung in Abhängigkeit vom Browser-Benutzeragenten des Besuchers hinzu, um bei Verwendung eines anderen Browsers als Internet Explorer oder Edge auf eine Seite mit der Fehlermeldung 404 (nicht gefunden) umzuleiten; andernfalls wird für die Ausführung auf unseren HTA-Dropper umgeleitet.

Wir erstellten ein PDF-Dokument unter Verwendung der im Internet gefundenen PDF-Vorlage des Unternehmens. In dieser PDF-Datei wird erklärt, was der neue Gehaltsabrechnungs-Dienst ist und wie man ihn nutzen kann (böswilliger Hyperlink). Um die Wahrscheinlichkeit der Payload-Ausführung zu erhöhen, erstellten wir eine ausführbare C#-Datei für Benutzer, die sich nicht mit der WEB-Gehaltsabrechnung befassen möchten. Um es echt aussehen zu lassen, signierten wir diese ausführbare Datei mit einem gefälschten Firmenzertifikat und verwendeten das Firmenlogo als Symbol für die erzeugte ausführbare Datei. Diese ausführbare C#-Datei wird:

  • Die Proxy-Konfiguration prüfen und verwenden;
  • Die Internetverbindung prüfen;
  • Den aktuellen Benutzernamen abrufen und an den C2-Server senden;
  • Die PowerShell-Payload herunterladen und ausführen;
  • Der Ausführungsablauf kann wie folgt schematisiert werden:

Die Struktur der ausführbaren C#-Datei lässt sich in diesem Codebeispiel zusammenfassen:

Abbildung 3 – Beispiel für einen C# Dropper

Sowohl die PDF- als auch die ausführbare Datei wurden auf zehn USB-Sticks kopiert.

Danach gingen wir zur öffentlichen Tiefgarage. Die Mitarbeiter parken auf demselben Parkplatz, aber in einem privaten Bereich.

Wir legten die USB-Sticks direkt nach der Mittagspause an drei Orten ab: Vor den drei Aufzügen, die den Mitarbeitern vorbehalten sind, auf privaten Treppen im Parkhaus und auf privaten Treppen im Gebäude in der Nähe der Büros der Mitarbeiter. Dann gingen wir zurück ins Büro und sahen uns die Webserverprotokolle an.

USB-Dropping-Ergebnisse:

Leider wurde in den Serverprotokollen kein Ergebnis gefunden. Das bedeutet, dass weder der HTA-Dropper noch das PS1-Skript heruntergeladen wurden. Unser Kontakt in der Firma rief uns an und teilte uns mit, dass die USB-Anschlüsse an den Firmenlaptops deaktiviert sind und die meisten Mitarbeiter die gefundenen USB-Sticks zurückgegeben haben. In diesem Szenario haben wir verloren. Beim nächsten Mal müssen wir uns mehr anstrengen!

Flaggen: Keiner

Szenario 2: Physisches Eindringen

Ok, USB-Dropping war erfolglos, aber wir wollen auch versuchen, physisch einzudringen. Also beschlossen wir, das Erdgeschoss zu erkunden [Details zur Erkundungsphase lassen wir aus]. Dort gibt es einen großen Innenhof, und dahinter konnte man einen Teil des Gebäudes betreten, in dem sich Büros und vor allem Schulungsräume für die Mitarbeiter befinden (interessant, nicht wahr?).

Dort wurden in der Nähe der Drucker und in bestimmten Sitzungsräumen mehrere USB-Sticks deponiert.

Nachdem die USB-Sticks in diesem Stockwerk verteilt waren, beschlossen wir, nach einem Weg zu suchen, auf dem wir noch tiefer in das Gebäude eindringen können. Wir warteten eine Weile im Innenhof auf einer Bank direkt vor den Mitarbeiteraufzügen/-treppenhäusern.

Die Mittagspause ist ein guter Zeitpunkt, weil viele Mitarbeiter zum Essen gehen und dann an ihren Arbeitsplatz zurückkehren. Nach ein paar Minuten entdeckten wir unser erstes Ziel, einen Angestellten mit einem Sandwich in der Hand, der nach seinem Ausweis zu suchen schien.

Also machten wir uns an die Verfolgung. Nach ein paar Sekunden fand er seinen Ausweis, öffnete die Tür zum Treppenhaus und... hielt uns freundlich die Tür auf.

Da wir nicht genau wussten, wo sich die Vorstandsbüros befinden (unsere nächste Flagge), verlangsamten wir unser Tempo und taten so, als ob wir etwas in unserer Tasche suchten, um ihm den Vortritt zu lassen. Wir folgten ihm bis ins erste Stockwerk, wo sich sein Büro befindet.

Nachdem wir die Etage erkundet hatten, stellten wir fest, dass es nur Mitarbeiterbüros gab und keiner von ihnen Vorstandsmitglied war.
Zurück im Treppenhaus setzten wir unsere Erkundung der Etagen fort. In der dritten Etage war die Anzahl der physischen Sicherheitsmaßnahmen für den Zugang zu dieser Etage ein wichtiger Hinweis darauf, dass wir uns in der Nähe des Ziels befanden.

Über den ersten und zweiten Stock konnten wir ohne Zugangskarte bis zu dem Korridor gelangen, der zum Büro führt. Für den Zugang zum dritten Stock war jedoch eine gültige Karte erforderlich, und über der Tür befand sich außerdem eine Kamera.

Da dieses Stockwerk interessanter schien als die anderen, beschlossen wir, uns darauf zu konzentrieren.

Wir folgten der Devise „Keep it simple“ und gingen eine Etage höher. Dort wollten wir abwarten, bis ein Mitarbeiter aus diesem Stockwerk kommt, um dann schnell nach unten zu gehen und die Tür festzuhalten, bevor sie sich ganz schließt.

Nachdem der erste Mitarbeiter herauskam, stellten wir jedoch fest, dass sich die Tür zu schnell schloss. Also beschlossen wir zu warten und es mit einer anderen Technik zu versuchen.

Nach ein paar Minuten hörten wir einen Mitarbeiter, der sich anscheinend auf dem Weg zu einer bestimmten Etage befand.

Wir beschlossen genau dann loszugehen, als der Mitarbeiter nach oben kam, und als wir neben ihm standen, sagten wir: „Oh Mann, ich habe meinen Ausweis vergessen“.

Wir folgten dem Mitarbeiter weiter, und wieder hielt er uns höflich die Tür auf.

Auf dieser Etage angekommen, entdeckten wir sofort eine Sprechanlage mit der Aufschrift „Vorstand“: Wir waren kurz vor dem Ziel!

Wir wussten nun, dass wir uns im richtigen Stockwerk befanden, und zu welchem Teil des Gebäudes wir Zugang hatten.

Die Person, der wir folgten, ging genau dorthin, wo wir hinwollten, aber es war sehr wahrscheinlich, dass die Vorstandsmitglieder sich alle untereinander kannten. Um keinen Verdacht zu erregen, gingen wir auf die gegenüberliegende Seite.

Manche Gebäude sind schlecht geplant, was uns ermöglicht, einige der vorhandenen physischen Sicherheitsmaßnahmen zu umgehen. Aus diesem Grund beschlossen wir, das Stockwerk noch etwas genauer zu erkunden.

Für den Zugang zum rechten Teil des Stockwerks war ebenfalls eine Karte erforderlich, also warteten wir auf einen Mitarbeiter, der hinausging, um ihm auf die gleiche Weise wie zuvor zu folgen.

Da die Erkundung dieses Gebäudeteils nichts ergab und auch der Durchgang vom rechten zum linken Teil eine Zugangskarte erforderte, mussten wir aufgeben und zurückgehen.

Als wir zum Eingang zurückkehrten, sahen wir die Person, die es uns ermöglichen würde, unser Ziel zu erreichen. Wir neigen zu der Annahme, dass die Personen mit der höchsten Zugangsberechtigung in einem Gebäude auch die Personen mit der höchsten Verantwortung sind, aber das ist selten der Fall.

Bei den Personen mit Zugangskarten, die sich frei im Gebäude bewegen dürfen, handelt es sich entweder um Reinigungskräfte oder Handwerker, denn sie müssen sich für ihre Arbeit im gesamten Gebäude bewegen können.

Glücklicherweise war in diesem Moment eine Reinigungsperson dabei, den Aufzug zu reinigen. Wir holten unseren Laptop heraus, hielten ihn in einer Hand und fragten sie freundlich, ob sie die Tür für uns öffnen könnte:

„Wir müssen einen Drucker reparieren und kommen leider nicht in dieses Gebäude hinein.“

 

„Ja, kein Problem.“

Sie öffnete die Tür, und schon waren wir im richtigen Teil des Gebäudes!

Um eine unserer Flaggen zu erreichen, mussten wir nur das Büro eines Vorstandsmitglieds betreten.

Von dort aus hatten wir durch ein kleines Fenster neben der Tür Sicht auf jedes der geschlossenen Büros, so dass wir sehen konnten, ob die Büros besetzt waren oder nicht.

Die meisten Vorstandsmitglieder waren in ihren Büros, nur eines war geschlossen und hatte kein Fenster, das Büro des Vorstandsvorsitzenden.

Unser Ziel vor Augen beschlossen wir, es zu riskieren, und klopften vorsichtig an die Tür des Büros ... keine Antwort ... wir öffneten die Tür und ... niemand war drin!

Wir gingen kurz hinein, um ein paar Fotos zu machen und zwei Dokumente zu stehlen, die auf dem Schreibtisch lagen, steckten sie in unsere Tasche und verließen das Büro. Dann war es an der Zeit, das Gebäude mit unserer ersten Flagge zu verlassen: Sensible Dokumente waren erfolgreich aus dem Büro des Vorstandsvorsitzenden entwendet worden!

Natürlich wurden die Unterlagen innerhalb der nächsten Stunde zurückgebracht, nachdem wir dem Kunden mitgeteilt hatten, dass wir unser erstes Ziel erreicht haben.

Flagge: Zugriff und/oder Mitnahme eines vertraulichen Dokuments von Vorstandsmitgliedern abgeschlossen!
Im nächsten Kapitel gehen wir auf weitere Erfolge ein, die wir in den Schulungsräumen verzeichnet haben ?.

Unsere Experten beantworten Ihre Fragen

Sie haben Fragen zu einem der Artikel? Sie brauchen Beratung, um die richtige Lösung für Ihre ICT-Probleme zu finden?