Corso di Sicurezza Informatica. Sicurezza del software. Ing. Gianluca Caminiti



Documenti analoghi
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

INFORMATICA 1 L. Mezzalira

Corso di Sicurezza Informatica

Allocazione dinamica della memoria - riepilogo

FONDAMENTI di INFORMATICA L. Mezzalira

La protezione dai memory error exploit

Introduzione alla programmazione in C

Linguaggi di programmazione

Corso di Sicurezza Informatica. Sicurezza del software. Ing. Gianluca Caminiti

AXO. Operativo. Architetture dei Calcolatori e Sistema. programmazione di sistema

Linguaggio C - Stringhe

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Il Sistema Operativo

Che cosa è un VIRUS?

Corso di Informatica

Funzioni. Il modello console. Interfaccia in modalità console

Architettura di un sistema di calcolo

Codifica: dal diagramma a blocchi al linguaggio C++

Sistema operativo: Gestione della memoria

Sistema Operativo. Fondamenti di Informatica 1. Il Sistema Operativo

Sistemi Operativi (modulo di Informatica II) I processi

Laboratorio di programmazione

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Variabili e tipi di dato

Le stringhe. Le stringhe

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

PROGRAMMA SVOLTO DI INFORMATICA ANNO SCOLASTICO 2013/2014. DOCENTE: Villani Chiara

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

Dispensa di Informatica I.1

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO V Indice

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Gestione dei File in C

Architettura del calcolatore

Sistemi Operativi STRUTTURA DEI SISTEMI OPERATIVI 3.1. Sistemi Operativi. D. Talia - UNICAL

Il Sistema Operativo. Introduzione di programmi di utilità. Elementi di Informatica Docente: Giorgio Fumera

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

Lezione 10: Librerie e compilazione separata

Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007

Breve riepilogo della puntata precedente:

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory

Informatica 3. Informatica 3. LEZIONE 6: Il controllo dell esecuzione. Lezione 6 - Modulo 1. Errori durante l esecuzione. Il controllo dell esecuzione

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Processi in Linux. Igino Corona 20 Ottobre 2009

Il sistema di I/O. Hardware di I/O Interfacce di I/O Software di I/O. Introduzione

Il SOFTWARE DI BASE (o SOFTWARE DI SISTEMA)

clock DATA BUS ADDRESS BUS CONTROL BUS In realtà il bus del microprocessore si compone di 3 bus diversi: Bus indirizzi Bus di controllo

Il descrittore di processo (PCB)

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

I Thread. I Thread. I due processi dovrebbero lavorare sullo stesso testo

CORSO DI RETI SSIS. Lezione n.2. 2 Novembre 2005 Laura Ricci

FONDAMENTI DI INTELLIGENZA ARTIFICIALE-M

Appunti del corso di Informatica 1 (IN110 Fondamenti) 2 Algoritmi e diagrammi di flusso

INFORMATICA. Il Sistema Operativo. di Roberta Molinari

Architettura dei calcolatori e sistemi operativi. Assemblatore e Collegatore (Linker) Capitolo 2 P&H Appendice 2 P&H

Funzioni in C. Violetta Lonati

NOZIONI ELEMENTARI DI HARDWARE E SOFTWARE

Archivi e database. Prof. Michele Batocchi A.S. 2013/2014

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Sistemi Operativi. 5 Gestione della memoria

Corso di Fondamenti di Informatica

GESTIONE DELLA MEMORIA CENTRALE

Scopo della lezione. Informatica. Informatica - def. 1. Informatica

2.5. L'indirizzo IP identifica il computer di origine, il numero di porta invece identifica il processo di origine.

Architettura MVC-2: i JavaBeans

Introduzione al linguaggio C Gli array

Le variabili. Olga Scotti

Introduzione al Linguaggio C

STRUTTURE DEI SISTEMI DI CALCOLO

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. D. Talia - UNICAL. Sistemi Operativi 9.1

La gestione della memoria

La memoria centrale (RAM)

Concetto di Funzione e Procedura METODI in Java

Software Gestionale per alberghi e strutture ricettive

Elementi di Architettura e Sistemi Operativi

Gestione della memoria. Paginazione Segmentazione Segmentazione con paginazione

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

Struttura a record. File ad accesso diretto. Modalità di apertura. Modalità di apertura

Protezione. Protezione. Protezione. Obiettivi della protezione

DMA Accesso Diretto alla Memoria

Oggetti Lezione 3. aspetti generali e definizione di classi I

Manuale Terminal Manager 2.0

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Corso di Informatica

Corso di Laurea in Informatica Architetture degli Elaboratori

LINGUAGGI DI PROGRAMMAZIONE

INFORMATIVA SUL DIRITTO ALLA PRIVACY PER LA CONSULTAZIONE DEL SITO WEB

GESTIONE DEI PROCESSI

Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6

SISTEMI OPERATIVI. Prof. Enrico Terrone A. S: 2008/09

Transcript:

Corso di Sicurezza Informatica Sicurezza del software Ing. Gianluca Caminiti

Software Sicuro Privo di errori (logici) che comportino un comportamento inatteso. Tali bug possono minare la sicurezza dell intero sistema creando vulnerabilità. Approccio classico penetrate and patch non soddisfacente. 2

Problemi delle patch L analisi è limitata alla correzione veloce del problema e non alla ricerca di problemi di progettazione. Gli effetti collaterali del problema spesso non sono visibili. Soluzioni quick & dirty introducono spesso ulteriori bug. A volte la soluzione del bug non può essere completa nel senso che pregiudica funzionalità o efficienza del sistema. 3

Errori tipici Errori che causano accesso non controllato ai dati. Errori che causano alterazione del flusso di esecuzione del programma. Mancanza di verifiche sui permessi di accesso alle funzioni oppure ai dati (controlli inadeguati o incompleti). Errori sulle condizioni limite (primo o ultimo caso). Altri errori logici. 4

Errori tipici Errori che causano accesso non controllato ai dati. Errori che causano alterazione del flusso di esecuzione del programma. Mancanza di verifiche sui permessi di accesso alle funzioni oppure ai dati (controlli inadeguati o incompleti). Errori sulle condizioni limite (primo o ultimo caso). Altri errori logici. 5

Buffer Overflow

Sommario Gestione della memoria nell invocazione di funzioni per i linguaggi ad alto livello. Richiami su call-stack (record di attivazione). Definizione di Buffer Overflow. Descrizione della tecnica che sfrutta la vulnerabilità (exploit). Tecniche per contrastare il B.O. 7

Call-Stack Stuttura dati organizzata a stack per gestire le chiamate a funzioni nei linguaggi ad alto livello. Ad ogni chiamata a funzione è associata la creazione di un frame sul call-stack. Ogni frame contiene sia il contesto della funzione (parametri di ingresso, variabili locali) che le informazioni (return address, frame pointer) per la gestione del frame stesso, es. per restituire il controllo alla funzione chiamante al termine di quella corrente. 8

Call-Stack Funzione DrawLine invocata da DrawSquare *1 Verso di crescita dello stack per ogni chiamata a funzione *2 *1 Return Address (RA1) & Saved Frame Pointer (SFP1) di DrawLine *2 Return Address (RA2) & Saved Frame Pointer (SFP2) di DrawSquare 9

Call-Stack Al termine di DrawLine, lo stack di DrawSquare è ripristinato (sfruttando il Saved Frame Pointer SFP1) e l esecuzione riprende dal Return Address (RA1). Top of stack Return value (if any) Stack Pointer Frame Pointer 10

Definizione (Stack-based) Buffer Overflow: vulnerabilità di sicurezza del codice. Causa: Un programma contiene funzioni che non verificano la dimensione dei dati in ingresso, limitandosi a copiarli in un buffer (variabile locale alla funzione) di dimensione prestabilita, confidando che l'utente non immetta più dati di quanti il buffer ne possa contenere. Scenario: Ciò può accadere se il programma sfrutta funzioni di libreria di I/O che non fanno controlli sulle dimensioni dei dati trasferiti (es. strcpy del C). 11

Definizione Causa: Quando (per errore o per malizia) il buffer è riempito con una quantità di dati superiore alla sua capienza Effetto: i dati extra possono sovrascrivere le strutture presenti nel record di attivazione della funzione corrente (es. le variabili locali, il return address, ecc.). Il programma può dare risultati errati o imprevedibili, bloccarsi, o (se è un driver di sistema o lo stesso sistema operativo) causare il blocco del computer. 12

Definizione Sfruttamento malevolo della vulnerabilità: Conoscendo bene il programma, il S.O. e l hardware su cui è eseguito, si può precalcolare una sequenza di dati che, inviata per provocare un buffer overflow, consenta di prendere il controllo del programma (e a volte, tramite questo, dell intero sistema). 13

Esempio di codice non sicuro #include <string.h> void foo (char *bar) { char c[12]; } memcpy(c, bar, strlen(bar)); // no bounds checking... int main (int argc, char **argv) { foo(argv[1]); } 14

Lo stack prima dell inserimento 15

Inserimento di hello 16

"A A A A A A A A A A A A A A A A AA A A \x08 \x35 \xc0 \x80" 17

Descrizione dell Exploit In presenza di un parametro di ingresso avente dimensione maggiore di 11 caratteri (byte), i dati che eccedono la dimensione della variabile sovrascrivono il frame, comprese le altre variabili locali, il SFP ed il RA. Quando foo() restituisce il controllo alla funzione chiamante, preleva il RA dal frame e prosegue l esecuzione a partire da quell indirizzo. L attaccante ha sovrascritto RA con un indirizzo arbitrario (in questo caso quello di inizio della variabile c[12]). Nel caso di un vero attacco la stringa di A sarebbe rimpiazzata da codice macchina in grado di cedere il controllo ad un programma esterno (es. una shell). 18

Exploit Possibili 1. Modifica di RA per dirottare il flusso del programma (di solito sul buffer stesso) al termine della funzione. 2. Modifica dei valori contenuti nelle variabili locali vicine per alterare il comportamento del programma ed ottenere effetti vantaggiosi. 3. Modifica di un puntatore a funzione o di un gestore di eccezioni. 19

Contromisure Linguaggio di programmazione: C e C++ non offrono metodi built-in sicuri (rispetto l accesso a dati esterni ad un array), il programmatore si deve occupare delle necessarie verifiche. Linguaggi sicuri (verificano che non si eccedano i confini dell array) sono ad es. Java,.NET ed altri. Uso di funzioni di libreria sicure (non meramente basate su strcpy e similari). Pointer protection: es. codificare gli indirizzi per nascondere i valori effettivi. Protezione contro l esecuzione: uso del bit NX ( No execute ) o anche XD ( execute Disabled ), per marcare aree di memoria in cui l esecuzione di codice è disabilitata. Address space layout randomization (ASLR). 20

Mediazione Incompleta Situazione in cui un provider non controlla il tipo o la quantità di dati ricevuti in input. La conseguenza è che l utente è libero di comporre input di lunghezza e tipologia arbitrari (funzionanti a meno di B.O.). Effetto: alterazione del funzionamento del servizio. Il provider non riesce a distinguere un caso di richiesta prodotta dall interfaccia del servizio da quello in cui è l utente a comporre tale richiesta. Esempio: sito web con uso di parametri passati con metodo GET. 21

Esempio Facciamo acquisti su www.things.com. Al termine degli acquisti confermiamo l ordine e si ottiene la URL seguente: http://www.things.com/order.asp?custid=101&part=555a& qy=20&price =10&ship=boat&shipcost=5&total=205 Allora, perché non provare a modificarla? ;) http://www.things.com/order.asp?custid=101&part=555a& qy=20&price =1&ship=boat&shipcost=5&total=25 22

Contromisure Limitare le scelte dell utente quando possibile. Offuscare (tramite codifica) i parametri passati. Nel caso del web: NON usare il metodo GET (ma il POST). 23

Errori Time-to-check to Time-to-use Si verificano quando è richiesto un certo controllo per potere svolgere una determinata azione, in presenza di problemi di sincronizzazione fra la fase di controllo e l azione corrispondente. Scenario: quando passa troppo tempo fra il momento del controllo e quello in cui tale controllo diventa significativo. 24

Esempio Metafora del venditore anziano Time-of-check Mio_file cambiare il carattere A in B Time-of-use Administrator s_file cancellare il file 25

Contromisure Fare in modo di collegare i due momenti (es. attraverso l uso di checksum per garantire che il controllo sia valido anche in momenti successivi). Time-of-check Mio_file cambiare il carattere A in B 26

Contromisure Fare in modo di collegare i due momenti (es. attraverso l uso di checksum per garantire che il controllo sia valido anche in momenti successivi). Time-of-check Mio_file cambiare il carattere A in B Hash H 27

Contromisure Fare in modo di collegare i due momenti (es. attraverso l uso di checksum per garantire che il controllo sia valido anche in momenti successivi). Time-of-use Administrator s_file cancellare il file Hash H1 28

Contromisure Fare in modo di collegare i due momenti (es. attraverso l uso di checksum per garantire che il controllo sia valido anche in momenti successivi). Time-of-use Administrator s_file cancellare il file Hash H1 H1!= H Verifica fallita: l operazione non è consentita!!! 29