Che cos’è un’iniezione di comandi del sistema operativo?

Che cos’è un’iniezione di comandi del sistema operativo?

Gli attacchi di iniezione sono uno dei modi più comuni con cui gli hacker attaccano i sistemi perché consentono loro di eseguire facilmente molti comandi e codici. L’iniezione di comandi del sistema operativo è uno di questi attacchi di iniezione di cui devi essere a conoscenza. Questo sfrutta una vulnerabilità che gli amministratori di sistemi, database e applicazioni Web dovrebbero prendere molto sul serio.

Quindi cos’è un attacco di iniezione di comandi del sistema operativo?

Definizione di OS Command Injection

L’iniezione di comandi del sistema operativo consente a un utente malintenzionato di eseguire qualsiasi comando desideri sfruttando un sistema operativo, un programma, un’applicazione, un database o un plug-in vulnerabile. Succede quando le applicazioni non riescono a convalidare e disinfettare correttamente i parametri che usano quando chiamano funzioni di shell come system() o exec() per eseguire comandi di sistema.

Per comprendere meglio il rilevamento e lo sfruttamento dell’iniezione di comandi del sistema operativo, è utile esaminare questo problema in tre categorie principali.

1. Iniezione diretta dei comandi

Considera questo dal punto di vista dell’attaccante. Il cyberattaccante scopre che un’applicazione sta eseguendo uno specifico comando di sistema; immettono il comando dannoso come parte degli argomenti previsti. L’applicazione esegue quindi il comando originale seguito da quello dannoso.

L’attaccante impiega una varietà di approcci per trovare tale vulnerabilità. Il metodo più semplice per combattere questo è mantenere il sistema operativo sempre aggiornato; potresti farlo in collaborazione con un team IT competente. Dovresti evitare tutte le app e i programmi che potrebbero causare vulnerabilità del sistema perché l’attaccante potrebbe inserire direttamente il codice e il danno è imprevedibile.

2. Iniezione indiretta di comandi

programmazione codici pc

Nel caso dell’inserimento indiretto di comandi, l’aggressore non immette direttamente un codice o un comando nel sistema. Per questo, usano un’applicazione o un programma vulnerabile nel sistema. La vulnerabilità crea un ponte tra l’attaccante e il sistema operativo. Approfittando di questa comunicazione, l’attaccante mira a eseguire codici e comandi dannosi sul bersaglio.

L’attaccante esegue una serie di test per identificare questa vulnerabilità e scopre che il software utilizza dati provenienti da una fonte esterna, come un file o una variabile di ambiente, per chiamare un comando di sistema. L’attaccante modifica quindi il contenuto della fonte esterna, in modo che ora contenga un comando dannoso. Questo viene quindi eseguito insieme alle istruzioni dell’applicazione originale.

La principale differenza tra l’iniezione di comando diretta e indiretta è che l’attaccante utilizza un’applicazione per comunicare con il sistema operativo. Ma non c’è una reale differenza tra il danno che le due forme di iniezione possono causare, quindi entrambe devono essere affrontate. Ecco perché dovresti assicurarti che i programmi nella tua rete siano affidabili e necessari. Non tenere app di cui non ti fidi sul tuo dispositivo.

3. Iniezione di comandi alla cieca

Un altro tipo di iniezione di comandi del sistema operativo è l’iniezione di comandi ciechi. Ciò significa che l’applicazione non restituisce alcun output dal comando nella risposta HTTP. L’attaccante utilizza diverse tecniche come il ritardo e il routing dell’output per sfruttare questa vulnerabilità.

Immagina di cercare un sito Web e il valore “/?search=id” nell’URL cambia a ogni ricerca. Il valore id qui può essere una pagina utente, l’indirizzo di una foto del prodotto o qualsiasi pagina del sito. L’attaccante può ottenere risultati diversi modificando il valore id. È difficile farlo manualmente, ma ci sono strumenti come Burp Suite per questo. Successivamente, l’attaccante scopre una stranezza su una pagina: potrebbe essere restituito un valore id che, anche se non ha mostrato alcun risultato, la risposta del sito Web è stata 200, il che indica che va tutto bene. In tal caso, l’attaccante potrebbe utilizzare una blind command injection.

Una tecnica come un ritardo temporale è particolarmente utile. Poiché la pagina che si apre sarà vuota, non riceverai alcuna risposta, ma potresti comunque essere in grado di raccogliere informazioni su ciò che è memorizzato in un database in base a ritardi temporali che caricano la pagina solo se è presente un determinato carattere. Questo richiede troppo tempo per essere un processo manuale, ma molti strumenti possono automatizzare l’attacco.

Un esempio di scenario di attacco

esempio di attacco di programmazione del codice

Rivediamo tutto quanto sopra attraverso un esempio. Immagina di avere un’app per lo shopping che consente all’utente di vedere se i prodotti sono disponibili. Usiamo un URL come quello qui sotto per accedere a tutte queste informazioni:

example_unsafe_store.com/stockStatus?productID=245&storeID=

Immagina di passare gli ID del prodotto e del negozio come argomenti a un comando di shell, come “stockstat.pl 245 38”, poiché l’applicazione dovrebbe eseguire una query per i vecchi record. Se lo sviluppatore non intraprende alcuna azione contro le iniezioni di comandi, un utente malintenzionato può inviare un input per eseguire il comando desiderato:

& echo this_a_harmful_command &

Se questa voce va nel parametro productID, il comando eseguito dall’applicazione sarà:

stockstat.pl & echo this_a_harmful_command & 38

Il comando echo è un metodo utile per rilevare le iniezioni di comandi e per assicurarsi che la stringa data appaia nell’output. Il carattere “&” è un separatore di comandi della shell, quindi ciò che viene eseguito sono tre comandi separati, uno dopo l’altro. Di conseguenza, l’output restituito all’utente sarà:

Error -productID not found
this_a_harmful_command
38: command not found

Qui, il file “stockstat.pl” ha eseguito il comando senza gli argomenti previsti e quindi ha restituito un messaggio di errore. Quindi, il comando echo inserito dall’attaccante è stato eseguito e l’attaccante ha visto l’espressione che ha inserito sullo schermo. L’argomento originale, “38”, veniva eseguito come comando che causava errori.

Come proteggersi dalle iniezioni di comandi del sistema operativo

Sebbene l’iniezione di comandi sia un vettore di attacco potente e dannoso, ci sono alcuni trucchi per evitarlo. La logica alla base degli attacchi di iniezione di comandi del sistema operativo è eseguire determinati comandi del sistema operativo utilizzando un’applicazione. Devi impedire che ciò accada. Ci sono alcune questioni da considerare:

  1. È necessario impedire a chiunque abbia accesso all’applicazione di eseguire il codice.
  2. Dovresti impedire a chiunque abbia accesso all’applicazione di effettuare richieste al server con espressioni sintattiche.
  3. È necessario crittografare le frasi richieste da chiunque abbia accesso.

Esaminiamo ogni elemento uno per uno. Una buona soluzione al primo problema è utilizzare il metodo della whitelist per impedire a chiunque raggiunga il livello dell’applicazione di eseguire determinati codici o richieste. Chiunque non identifichi non sarà in grado di eseguire il codice.

La soluzione al secondo è non accettare alcune espressioni di testo utilizzate nei comandi. L’utente può inserire solo valori numerici. Applicalo insieme al metodo whitelist e avrai un sistema molto più sicuro.

Il terzo elemento riguarda la crittografia dei parametri sintattici come il carattere inserito e gli spazi. Di conseguenza, il metodo di whitelisting, il controllo sintattico degli input e la crittografia degli input dovrebbero proteggerti dall’iniezione di comandi del sistema operativo.

Gli attacchi di iniezione si evolvono ogni giorno

Esistono molti metodi di iniezione con diverse tecniche di attacco, come il comando del sistema operativo, SQL, SSI e XPath. Non è facile cercare di prevenire ciascuno di essi. Tieni presente che tutti questi attacchi si evolvono ogni giorno e sfruttano piccole vulnerabilità che gli sviluppatori hanno trascurato. Ecco perché è fondamentale rimanere sempre aggiornati e seguire da vicino gli attuali sviluppi nel mondo della sicurezza informatica.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *