BadUSB im Jahr 2023

Sep 6, 2023 von Patrick Schmid

BadUSB-, Key-Injection- oder HID-Angriffe beschreiben eine Angriffsart, bei welcher sich ein USB-Gerät an einem Computer selbst als sogenanntes “Human Input Device” wie beispielsweise eine Tastatur oder Maus zu erkennen gibt. Anstelle aber dem Benutzer die Möglichkeit zu geben, entsprechende Aktionen beispielsweise via Keyboard auszulösen, besitzt das USB-Gerät einen Mikrocontroller, welcher diese Aufgabe ebenfalls direkt übernimmt und vorprogrammierte Aktionen des Angreifers ausführt. Durch das Ausführen von Steuerkommandos, Tippen von Zeichen oder Ausführen von Klickaktionen können dann so Kommandos und Code auf dem Computer ausführt werden, wodurch dieser entsprechend kontrolliert werden kann. Im Rahmen eines Red Teaming wurden wir von unserem Kunden beauftragt, diesen Angriffsvektor zu nutzen für den initialen Zugriff auf das interne Netzwerk unseres Kunden.

Damit ein solcher Angriff erfolgreich funktioniert, braucht es zwei Teile: Ein Benutzer der unser präpariertes Gerät an seinem Computer einsteckt sowie passende, vorprogrammierte Aktionen, welche dann durch das Gerät ausgeführt werden. Während der zweite Teil mit mehr oder weniger Windows- und Evasion-Kenntnissen keine grosse Herausforderung ist, so ist der erste Teil in den letzten Jahren durchaus komplizierter geworden. Noch vor fünf bis zehn Jahren war dieser Schritt um ein vielfaches einfacher, da es schon fast normal war, Geräte wie Lüfter, Kaffeetassenwärmer, Raketenwerfer und sonstige Gadgets via USB mit dem eigenen Computer zu verbinden. Heutzutage hat sich die Benutzer-Awareness in diesem Bereich merklich verbessert und viele Benutzer sind sich bewusst, dass wildfremde Geräte nicht einfach so am eigenen Arbeitsgerät eingesteckt werden sollten. Glücklicherweise gibt es aber auch in der heutigen Zeit noch ein kleines Set an USB-Geräten, welche im Business-Alltag fast schon zum guten Ton gehören und ohne jegliches Hinterfragen beinahe täglich mit dem eigenen Computer verbunden werden. Mit diesem Wissen im Hinterkopf haben wir deshalb ein solches Gerät genommen und so präpariert, dass wir dieses für unseren Angriff nutzen können.

Unser Zielgerät für diesen Angriff befindet sich in beinahe jedem Sitzungszimmer einer grösseren Firma und verfügt über einen USB-A oder USB-C-Anschluss, sodass dieses einfach mit dem eigenen Computer verbunden werden kann. Aus Sicherheitssicht ist das in mehrfacher Hinsicht problematisch, da die Geräte in einem Sitzungszimmer liegen, wo nicht nur die eigenen Mitarbeiter sondern beispielsweise auch externe Besucher der Firma regelmässig Zugang dazu haben. Weiter werden die Geräte nicht nur von externen Besuchern sondern genauso auch von den internen Mitarbeitern genutzt und die Anwender sind darauf trainiert, das Gerät einzustecken und dann einige Sekunden zu warten, bis das Gerät sich aktiviert und verbunden hat, bevor darüber präsentiert werden kann. Und besonders problematisch, sollte sich das Gerät nicht korrekt verbinden können, so sind die Benutzer darauf trainiert, zum Massenspeicher des Gerätes zu navigieren und die darauf gespeicherte, ausführbare Datei zu starten und auszuführen. Alles in allem, also ideale Vorbedingungen für einen BadUSB-Angriff!

Nachdem wir nun ein passendes Zielgerät ausgewählt haben, geht es darum, passende Modifikationen vorzunehmen. Dazu müssen wir uns zuerst einen Überblick verschaffen, welche Platzverhältnisse und Anschlussmöglichkeiten unser Zielgerät uns zur Verfügung stellt. Unser Zielgerät besteht aus einem Gehäuse, einer Platine sowie einem USB-Kabel, welches mittels eines fünf-poligen JST-SH-Konnektor angeschlossen wird.

Individuelle Komponenten von unserem Zielgerät.

Da wir am äusseren Erscheinungsbild möglichst wenig verändern wollten, haben wir uns dazu entschieden, die eigentliche Platine durch unser eigenes Gerät zu ersetzen, jedoch das USB-Kabel unverändert zu belassen, da dieses von aussen sichtbar ist. Entsprechend der Farbgebung der Verdrahtung des USB-Kabels scheint es sich bei dem Kabel um einen handelsüblichen, fünf-poligen USB-Stecker zu handeln. Dieser verfügt gemäss Standard über zwei Erdungen (schwarz), einmal 5-Volt (rot) sowie Data+ (grün) und Data- (weiss). Daraus ergibt sich dann folgendes Pinout:

Pinout von unserem Zielgerät.

Bei unserem BadUSB haben wir uns auf Grund der Grösse und Verfügbarkeit für einen Digispark Rev3 entschieden, welcher durch sein sehr kleines Aussenmass problemlos anstelle der ursprünglichen Platine in das Gehäuse eingesetz werden kann und selbst auch über ein Pinout für einen vier-poligen USB verfügt:

Pinout von unserem Digispark.

Bevor nun alles fest verlötet wurde, haben wir das Setup entsprechend getestet. Dazu haben wir den Digispark mit unserem Powershell-Payload inklusive AMSI-Bypass versehen, alles mittels Testclips und einem Arduino-Board verbunden und an unserem Testcomputer eingesteckt. Dabei konnten wir dann auch sehr schnell feststellen, dass bei unseren Digisparks teilweise USB+ und USB- vertauscht zu sein scheinen. Nachdem wir die beiden Anschlüsse ausgetauscht hatten, begann unser Test-Setup bereits wenige Sekunden nach dem Einstecken zu tippen, was uns die Bestätigung gab, dass unser Testsetup wie geplant funktioniert:

Finales Test-Setup in aktiver Verwendung.

Damit ging es nun ans Zusammen- und Einbauen. Dazu haben wir den JST-SH-Konnektor auf ein Breakout-Board gepackt, welches dann über kurze Kabel mit dem Digispark verbunden werden kann. Das ganze musste dann nur noch zusammengesteckt, in das Gehäuse eingesetzt und wieder verschlossen werden. Von aussen resultiert dabei ein identisch aussehendes Zielgerät, welches sich beim Einstecken aber nicht mit seiner Base verbindern sondern unsere vorprogrammierten Payloads tippt und ausführt:

Modifiziertes Endergebnis bereit für unsere Simulation.

Da die ursprüngliche Platine nun nicht mehr Teil vom Gerät ist, funktioniert dieses natürlich nicht mehr. Da die Benutzer sich aber gewöhnt sind, das Gerät einzustecken und dann zuerst zu warten, stellt das kein Problem dar. Durch ein geschicktes Nutzen der im Digispark verbauten LEDs kann sogar ein Teil der Blink-Logik nachgebaut werden. Wer jedoch die ursprüngliche Funktionalität zwingend beibehalten möchte, der kann aus dem Zielgerät einfach die Metallplatte im unteren Bereich entfernen und den Digispark zusammen mit einem kleinen USB-Hub und der Originalplatine einbauen, wodurch die originale Funktionalität beibehalten werden kann. Dabei könnte beispielsweise auch gleich noch ein Mass-Storage ergänzt werden, welcher dem Digispark während dem Angriff dann ebenfalls zur Verfügung stehen würde, um noch komplexere Angriffe durchführen zu können, da dabei die Speicherlimitationen vom Digispark umgangen werden können.

Möchten Sie ebenfalls die Sicherheit Ihrer Firma mit kreativen Ansätzen auf die Probe stellen? Dann nehmen Sie unverbindlich mit uns Kontakt auf!


< zurück