Questo sito utilizza cookie di terze parti per inviarti pubblicità in linea con le tue preferenze. Se vuoi saperne di più clicca QUI 
Chiudendo questo banner, scorrendo questa pagina, cliccando su un link o proseguendo la navigazione in altra maniera, acconsenti all'uso dei cookie. OK

Sviluppo di un sistema per la ricerca automatica di Buffer Overflow su piattaforma GNU/Linux

La cattiva qualità del software costituisce la maggior fonte di vulnerabilità nei sistemi informatici, gran parte dei technical cyber alert pubblicati dallo US Cert riportano vulnerabilità attribuibili ai buffer overflow: famosi worm come Codered, Blaster, Slammer e Conflicker sfruttano tali overflow per propagarsi e danneggiare i sistemi.

Il buffer overflow si ottiene eccedendo la capacità prefissata di uno spazio di memoria, l'overflow può causare terminazioni non previste nei programmi e sovrascritture non desiderate di zone di memoria riservate al contesto d’esecuzione e all’allocazione delle variabili; tali alterazioni possono compromettere il flusso d’esecuzione prestabilito offrendo ad un attaccante la possibilità di eseguire arbitrariamente codice.

I livelli aggiuntivi di privilegi ottenibili nei sistemi unix-like - settando l’attributo suid - elevano la qualità d’attacco ottenibile, dando modo di eseguire codice con diritti di amministrazione.

Sovraccaricando gli input di un programma è possibile:

- Terminarlo in modo non previsto (Denial of Service)
- Modificarne lo stato cambiando il contenuto delle variabili (Unauthorized Modification of Information)
- Modificare il flusso d’esecuzione prestabilito per eseguire codice in modo da ottenere diritti di amministrazione (Malicious Code promuovibile ad Account Compromise)

Si noti in particolare che (per il secondo punto) la potenza dell’attacco dipende dalla semantica d’utilizzo delle variabili, una variabile potrebbe contenere:

- l’importo di uno stipendio
- la data di un appuntamento
- il nome di un file utilizzato per contenere un elenco di codici d’accesso (es. /etc/passwd, /etc/shadow in unix)
- un saldo di un conto corrente
- dati anagrafici
- una password
- l’indirizzo di un pacchetto di dati
- la posizione di un satellite nello spazio
- ecc..

La ricerca automatica di buffer overflow esaminando il codice sorgente è un problema indecidibile in generale. La disponibilità del solo codice oggetto diminuisce il numero di informazioni acquisibili: non si ha né la completa conoscenza di tutte le sorgenti di input, né il completo conoscimento del tipo di dati in ingresso. D’altronde l’esame del codice oggetto è necessario nell’analisi dei programmi per i quali il codice sorgente non è disponibile, come ad esempio i software commerciali.

Le vulnerabilità inoltre sono in generale difficilmente individuabili, perché è difficile che i bachi di sicurezza allontanino il software dall’aderenza alle specifiche funzionali; disporre di uno strumento di ricerca che permetta di rilevare e classificare eventuali vulnerabilità prima che siano sfruttate da un attaccante è un aiuto per diminuire il livello d’insicurezza dei sistemi informatici.

Si presenta un sistema automatico per l’individuazione di buffer overflow nel codice oggetto, la piattaforma di riferimento è GNU/Linux su architettura Intel (IA32). Il rilevamento di buffer overflow e i tentativi d’esecuzione di codice (esecuzione di una shellcode allo scopo di ottenere una shell di root) sono effettuati sul solo codice oggetto.
Le caratteristiche del sistema sviluppato lo rendono utilizzabile nelle attività di:

- analisi del rischio
- di debug
- di verifica della corretta installazione e configurazione del software.

Il contributo di questa tesi è il seguente:

• Sono stati analizzati differenti tipi di attacco che sfruttano le vulnerabilità buffer overflow.
• È stato sviluppato un sistema di ricerca automatica di buffer overflow con le seguenti caratteristiche:

- Analisi degli input mediante il passaggio di parametri da riga di comando, l’utilizzo di variabili d’ambiente e l’uso di una modalità di ricerca innovativa basata sull’intercettazione delle chiamate di sistema sys_read().

- Utilizzo della crittazione polimorfica e della generazione di istruzioni equivalenti per limitare le possibilità di rilevamento di un Intrusion Detection System.

- Utilizzo di uno spiazzamento variabile per attaccare programmi che abbiano strutture di stack frame variabili.

• È stato utilizzato il sistema sviluppato per effettuare attacchi Stack Smashing iniettando codice eseguibile allo scopo di ottenere una shell di super utente.
• Sono stati analizzati differenti sistemi di difesa mostrandone le caratteristiche e le limitazioni.

Mostra/Nascondi contenuto.
1 1 Introduzione Il linguaggio C è caratterizzato da scelte progettuali che ne premiano l’efficienza e la flessibilità; la realizzazione di codice efficiente a tempo d’esecuzione e piccolo in dimensioni erano gli obiettivi posti da Ritchie per poter sostituire il linguaggio assembly nella realizzazione di Unix, mentre la sicurezza dei tipi (type safety) e l’interface checking non erano considerati scopi primari. [Ritchie93] La filosofia che sta alla base del linguaggio è che il programmatore sa cosa sta facendo, il suo essere privo di restrizioni e la sua generalità lo rendono spesso più conveniente ed efficiente di altri linguaggi supposti più potenti. [Kernighan89] L’efficienza e la flessibilità sono ottenute mediante la: • Aritmetica dei puntatori. • Conversione automatica di tipo. • Minimizzazione dei controlli di tipo. • Mancanza di controllo a tempo d’esecuzione degli indici degli array e dei buffer. Il controllo dell’integrità dei dati è volutamente lasciato al programmatore, che può decidere di ottimizzare un programma evitando controlli ritenuti non necessari. La mancanza di controlli a livello di definizione del linguaggio favorisce la programmazione non sicura: ad esempio, non implementando il controllo degli indici dei buffer è possibile scrivere in zone di memoria che non appartengono allo spazio effettivamente allocato.

Tesi di Laurea

Facoltà: Scienze Matematiche, Fisiche e Naturali

Autore: Giuseppe Rapicano Contatta »

Composta da 71 pagine.

 

Questa tesi ha raggiunto 2219 click dal 23/03/2005.

 

Consultata integralmente 3 volte.

Disponibile in PDF, la consultazione è esclusivamente in formato digitale.