Studio e Verifica di Scenari di Attacco Basati su Shellcode

Nel contesto attuale della sicurezza informatica, si osserva un costante incremento degli attacchi informatici, con Ransomware e Trojan tra i più diffusi. Una caratteristica comune di questi attacchi è l’inclusione di una shellcode all’interno del loro payload. La shellcode rappresenta un elemento fondamentale del malware, e in questa sperimentazione si mostra la semplicità nel crearla ed usarla per effettuare un attacco di “Arbitrary Code Execution” con scalata dei privilegi. Precisamente si crea un’exploit per sfruttare la vulnerabilità nota col nome DirtyCow identificata dalla “CVE-2016-5195”, nel kernel Unix, che rappresenta una problematica di “Race Condition” tra thread nell’implementazione della copia in scrittura durante la modifica di una pagina mappata in memoria. È importante sottolineare che il kernel Linux è il software Open-Source più diffuso al mondo, utilizzato dal 96.3% dei server globali e dal 85% dei dispositivi mobili. Sorprendentemente, questa vulnerabilità è rimasta presente nel Kernel dalla versione 2.x del 2007 fino alla sua correzione nel 2018, con un periodo di undici anni in cui è rimasta latente. Una caratteristica cruciale di questa vulnerabilità è il suo funzionamento completamente in memoria, il che significa che non vengono lasciate tracce nei log di sistema, rendendo gli attacchi praticamente indistinguibili da altre attività normali.

Per comprender al meglio il funzionamento del exploit vengono affrontati vari argomenti essenziali, inizialmente si esamina il processo di compilazione nelle sue fasi, un passaggio fondamentale che trasforma il codice sorgente in un eseguibile. Successivamente, viene approfondito il linguaggio Assembly, con particolare attenzione ai registri del processore e alle istruzioni utilizzate nell’architettura a 64 bit e 32bit. Inoltre, si esplora il layout della memoria, comprendendo le diverse sezioni come lo Stack, Heap, Code, Text e la loro organizzazione all’interno dello spazio di indirizzamento del processo. Vengono esaminate le “calling convention”, gli Stack Frame e la gestione delle funzioni durante l’esecuzione di un programma. Successivamente, si definisce la natura e il funzionamento di una Shellcode, fornendo esempi di chiamate di sistema e illustrando la vulnerabilità di Buffer Overflow. Vengono esaminate delle possibili tecniche di protezione e come eluderle, infine sono stati presentati diversi esempi di ransomware e malware noti, analizzandone le caratteristiche distintive.

Obbiettivi

L’obiettivo primario e’ comprendere in dettaglio il funzionamento della vulnerabilità DirtyCow, creando una condizione di “Race Condition” durante la lettura del file “/usr/bin/passwd”, per ottenere i privilegi di amministratore su un sistema Linux con Kernel versione 4.4.0 Il processo di implementazione esegue due fasi, inizialmente si sviluppata la Shellcode che consente l’esecuzione di un terminale con privilegi di amministrazione. Successivamente si realizza l’exploit che avrà il compito di creare la condizione di concorrenza tra Thread e sfruttare la vulnerabilità DirtyCow per scrivere la Shellcode in una zona di memoria protetta.

Risultati ottenuti

La sperimentazione condotta è stata portata a termine con successo, mostrando l’efficacia nello sfruttamento della vulnerabilita per ottenere i permessi di amministratore. Si e’ raggiunto il risultato prefissato attraverso l’impiego di tre thread, usati per generare la condizione di concorrenza e scrivere la shellcode all’interno di un file protetto, che successivamente viene eseguito. Questo risultato rivela la relativa semplicità nella realizzazione e nello sfruttamento della vulnerabilità Dirty Cow, caratterizzato da una elevata riproducibilita’ su un qualsiasi file del tipo “setuid” su una qualsiasi versione del kernel vulnerabile.

Filippo Berto
Filippo Berto
Research Fellow

My research interests include Cybersecurity, Computer Networks, Edge-Cloud Computing and Distributed Systems.