Una web shell è un'interfaccia simile a una shell che consente l'accesso remoto a un server web, spesso utilizzata nell'ambito di attacchi informatici. Ciò che distingue una web shell è l'interazione attraverso un browser web.
Utilizzando strumenti di monitoraggio della rete, un attaccante può individuare vulnerabilità che potrebbero consentire l'installazione di una web shell. Queste vulnerabilità sono spesso presenti nelle applicazioni eseguite su un server web.
Un attaccante può utilizzare una web shell per eseguire comandi shell, effettuare la privilege escalation sul server web e caricare, eliminare, scaricare ed eseguire file da e sul server web.
Utilizzi comuni
Le web shell vengono utilizzate negli attacchi soprattutto perché offrono molteplici funzionalità e sono difficili da rilevare. Sono comunemente utilizzate per:
Furto di dati
Infezione dei visitatori del sito web (attacchi watering hole)
Defacement del sito web mediante modifica di file con intento malevolo
Lancio di attacchi di negazione del servizio (DDoS)
inoltro di comandi all'interno di reti interne non accessibili da Internet
utilizzo come infrastruttura di comando e controllo, ad esempio come bot in un sistema botnet o per compromettere la sicurezza di ulteriori reti esterne.
Le web shell consentono agli hacker di rubare informazioni, corrompere dati e installare malware altamente dannosi per il sistema. Il problema si aggrava quando gli hacker sfruttano server compromessi per infiltrarsi in un sistema e compromettere altre macchine. Le web shell rappresentano inoltre uno strumento attraverso cui i malintenzionati prendono di mira diversi settori, tra cui quello governativo, finanziario e della difesa, attraverso lo spionaggio informatico. Una delle web shell più note utilizzate in questo contesto è “China Chopper”.
Installazione delle web shell
Le web shell vengono installate sfruttando vulnerabilità nelle applicazioni web o configurazioni di sicurezza del server deboli, tra cui:
Un attaccante può anche modificare (contraffare) l'intestazione Content-Type inviata durante il caricamento di un file per aggirare una validazione inadeguata basata sul tipo MIME fornito dal client, consentendo così il caricamento della shell dell'attaccante.
Esempio
Di seguito è riportato un semplice esempio di una web shell scritta in PHP che esegue e restituisce il risultato di un comando shell:
<?=`$_GET[x]`?>
Supponendo che il nome del file sia example.php, di seguito è riportato un esempio che restituirebbe il contenuto del file /etc/passwd:
La richiesta sopra riportata prenderà il valore del parametro x della stringa di ricerca, inviando il seguente comando shell:
cat/etc/passwd
Ciò avrebbe potuto essere evitato disabilitando le funzioni di shell di PHP, impedendo così l'esecuzione di comandi shell arbitrari dal codice PHP.
Prevenzione e mitigazione
Di solito una web shell viene installata sfruttando le vulnerabilità presenti nel software del server web. Per questo motivo, è importante correggere queste vulnerabilità per evitare il rischio di compromissione del server web.
Di seguito sono elencate alcune misure di sicurezza per prevenire l'installazione di una web shell:
Implementare una zona demilitarizzata (DMZ) tra i server rivolti verso Internet e le reti interne
Configurare in modo sicuro il server web
Chiudere o bloccare porte e servizi non utilizzati
Validare i dati di input degli utenti per limitare le vulnerabilità di inclusione di file locali e remoti
Utilizzare un servizio di reverse proxy per limitare gli URL amministrativi a quelli legittimi e conosciuti
Effettuare scansioni frequenti delle vulnerabilità per individuare aree a rischio e utilizzare regolarmente software di sicurezza web (ciò non impedisce gli attacchi zero day)
Le web shell possono essere facilmente modificate, rendendo difficile la loro individuazione; inoltre, i software antivirus spesso non sono in grado di rilevarle.
Di seguito sono riportati alcuni indicatori comuni della presenza di una web shell su un server web.
Utilizzo insolitamente elevato del server web (dovuto a ingenti download e upload da parte dell'attaccante);
File con timestamp anomali (ad esempio, più recenti rispetto a quello degli altri file legittimi presenti sul server);
File sconosciuti nel server web;
File contenenti riferimenti sospetti, ad esempio a cmd.exe o alla funzione eval;
File che generano traffico sospetto (ad esempio un file PNG che viene richiamato tramite parametri POST);
Accessi sospetti dai server in DMZ verso le sottoreti interne e viceversa;
Le shell Web possono anche includere un modulo di login, spesso mascherato da pagina di errore.
Attraverso le web shell, gli attaccanti possono modificare il file .htaccess (nei server che utilizzano il software Apache HTTP Server) per reindirizzare le richieste proveniente dai motori di ricerca verso pagine contenenti malware o spam. Spesso le web shell rilevano lo user agent, mostrando contenuti diversi ai crawler dei motori di ricerca rispetto a quelli presentati al browser dell'utente. Per individuare una web shell, è solitamente necessario modificare lo user agent del crawler bot. Una volta identificata, può essere rimossa facilmente.
L’analisi dei log del server web può aiutare a individuare la posizione esatta di una web shell. Gli utenti o visitatori legittimi presentano generalmente user agent e referer differenti; al contrario, una web shell viene solitamente visitata solo dall'attaccante, mostrando quindi un numero molto limitato di varianti nella stringa user agent.
123admin, What is a Web shell?, su malware.expert, 3 agosto 2017. URL consultato il 20 dicembre 2018 (archiviato dall'url originale il 13 gennaio 2019).
↑What is a Web shell?, su malware.expert, 3 agosto 2017. URL consultato il 20 dicembre 2018 (archiviato dall'url originale il 13 gennaio 2019).