La protezione dai memory error exploit
|
|
|
- Fortunato Santi
- 10 anni fa
- Visualizzazioni
Transcript
1 Università degli Studi di Milano
2 Sommario Introduzione 1 Stack Guard Terminator Canaries Random Canaries 2 3
3 Buffer Overflow Stack Guard Introduzione Buffer Overflow Condizione anomala. Memorizzazione di dati su buffer oltre i limiti della sua capienza. Sovrascrittura dati adiacenti.
4 Buffer Overflow [2] Introduzione Buffer Overflow [2] In determinate condizioni è possibile: Indurre un crash dell applicazione. Modificarne il comportamento. Forzare l esecuzione di codice arbitrario.
5 Indurre crash Stack Guard Introduzione Esempio #i n c l u d e <s t d i o. h> #i n c l u d e <s t r i n g. h> i n t f o o ( char i n ) { char buf [ ] ; s t r c p y ( buf, i n ) ; } r e t u r n 0 ; i n t main ( i n t argc, char a r g v ) { r e t u r n f o o ( a r g v [ 1 ] ) ; }
6 Layout stack Stack Guard Introduzione a0 <main>: <...> 80483b5: call <foo> 80483ba: leave 80483bb: ret <foo>: : push %ebp : mov %esp,%ebp : sub $0x218,%esp : mov 0x8(%ebp),%eax c: mov %eax,0x4(%esp) : lea -0x208(%ebp),%eax : mov %eax,(%esp) : call 80482b e: leave f: xor %eax,%eax : ret return address frame pointer buffer
7 Modificarne il comportamento Introduzione esempio [2] #i n c l u d e <s t d i o. h> #i n c l u d e <s t d l i b. h> i n t c h e c k u s e r ( v o i d ) { r e t u r n 0 ; } i n t main ( i n t argc, char a r g v ) { i n t admin ; char buf [ ] ; } admin=check user ( ) ; s t r c p y ( buf, a r g v [ 1 ] ) ; i f ( admin == 1) system ( / b i n / sh ) ; e l s e r e t u r n 0 ;
8 Eseguire codice arbitrario Introduzione Tipico payload nop sled. shellcode. retaddress. <nop><nop><nop>... <shellcode><ret><ret><ret>..
9 Canarini Stack Guard Terminator Canaries Random Canaries Canarini Miniere di carbone fine 800 Evitare stragi in miniera sentono prima degli uomini le fughe di gas
10 Canarini digitali [1] Terminator Canaries Random Canaries #i n c l u d e <s t d i o. h> #i n c l u d e <s t d l i b. h> i n t main ( i n t argc, char a r g v ) { i n t c a n a r y ; canary = 0 x ; char buf [ ] ; s t r c p y ( buf, a r g v [ 1 ] ) ; i f ( canary!= 0x ) e x i t ( EXIT FAILURE ) ; } r e t u r n 0 ;
11 Canarini digitali [2] Terminator Canaries Random Canaries #i n c l u d e <s t d i o. h> #i n c l u d e <s t d l i b. h> i n t main ( i n t argc, char a r g v ) { i n t c a n a r y ; canary = 0 x ; char buf [ ] ; s t r c p y ( buf, a r g v [ 1 ] ) ; i f ( canary!= 0x ) e x i t ( EXIT FAILURE ) ; } r e t u r n 0 ;
12 Canarini digitali [3] Terminator Canaries Random Canaries #i n c l u d e <s t d i o. h> #i n c l u d e <s t d l i b. h> i n t main ( i n t argc, char a r g v ) { i n t c a n a r y ; canary = 0 x ; char buf [ ] ; g e t s ( buf ) ; i f ( canary!= 0x ) e x i t ( EXIT FAILURE ) ; } r e t u r n 0 ;
13 scelta dei canarini Stack Guard Terminator Canaries Random Canaries valore del canarino ostacolo agli exploit maggior numero di funzioni bloccate strcpy, gets,... terminator canary: 0x000aff0d
14 prologo ed epilogo Stack Guard Terminator Canaries Random Canaries prologo b <foo>: b: push $0x000aff0d : push %ebp : mov %esp,%ebp return address canary frame pointer epilogo : call 80482b e: leave f: cmpl $0x000aff0d, (%esp) : jne canary_changed : xor %eax,%eax a: ret buffer
15 Terminator canaries: problemi Terminator Canaries Random Canaries problemi canarino noto non blocca tutte le funzioni (read) frame pointer non protetto variabili locali non protette finestra di codice in cui agire
16 canarini random Stack Guard Terminator Canaries Random Canaries canarini random variabile globale inizializzata all avvio del processo xor con return address difficile da ricavare (a meno di casi particolari)
17 Random canaries: problemi Terminator Canaries Random Canaries risolvono: canarino noto non blocca tutte le funzioni (read) non risolvono: frame pointer non protetto variabili locali non protette finestra di codice in cui agire
18 esempio: Stack Guard Terminator Canaries Random Canaries codice vulnerabile int func(char *msg) { char buf[80]; } strcpy(buf, msg);... strcpy(msg, buf);
19 esempio: Stack Guard Terminator Canaries Random Canaries codice vulnerabile [2] #include <stdio.h> #include <string.h> void bar(void) { printf("hello World!\n"); } int foo(char *in) { volatile int canary; void (*f)(void); char buf[512]; canary = 0x000aff0d; f = bar; strcpy(buf, in); f(); if(canary!= 0x000aff0d) { printf("smash detected!\n"); exit(0); } return 0; } int main(int argc, char **argv) { return foo(argv[1]); }
20 Pro police (SSP) Pro police (SSP) Hiroaki Etoh (IBM, 2000) canarini random controllo piu granulare riordinamento variabili integrato in gcc 4
21 riordinamento variabili riordinamento variabili canarini posti dopo frame pointer array e strutture contenenti array posti in alto restanti variabili locali appena sotto gli array controllo canarini piu granulare
22 SSP layout SSP layout overflow non influenzano var locali frame pointer protetto ret addr protetto parametri protetti check dei canarini dopo operazioni su array parametri retaddr frame pointer canary arrays local vars
23 ASLR Stack Guard ASLR obiettivi: complicare lavoro attaccante difetti: indirizzi di shellcode difficili da indovinare overhead limitato non tutto e randomizzabile (plt e testo)
24 ASLR Stack Guard cosa si randomizza posizione dello stack posizione dello heap indirizzo di rilocazione librerie
25 Problemi risolti e non: Problemi risolti: esecuzione shellcode su stack o heap modifica GOT piu difficile (ret to libc) Non risolti: ret to libc ancora possibile non control data attacks format bugs
Stack-based buffer overflow
Università degli Studi di Milano Facoltà di Scienze e Tecnologie Stack-based buffer overflow Andrea Lanzi A.A. 2015 2016 Andrea Lanzi Stack-based buffer overflow A.A. 2015 2016 1 / 19 Classificazione attacchi
Buffer Overflow Attacchi ai servizi di rete
Argomenti trattati Buffer Overflow Attacchi ai servizi di rete Avella Gianluigi Cerqua Pasquale Crucil Sergio D Alessandro Oreste Internet I servizi di rete Buffer Overflow: teoria, esempi Tecniche di
Corso di Sicurezza Informatica. Sicurezza del software. Ing. Gianluca Caminiti
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
Corso di Sicurezza Informatica
Corso di Sicurezza Informatica Sicurezza del Software Ing. Giuseppe D Aquì Sicurezza nell informatica Un computer sicuro è un computer spento (Kevin Mitnick) Attacchi informatici Gli attacchi informatici,
Reverse engineering: disassembly
Università degli Studi di Milano Facoltà di Scienze Matematiche, Fisiche e Naturali Reverse engineering: disassembly Roberto Paleari Emanuele Passerini
12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)
12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,
MIPS Instruction Set 2
Laboratorio di Architettura 15 aprile 2011 1 Architettura Mips 2 Chiamata a Funzione 3 Esercitazione Registri MIPS reference card: http://refcards.com/docs/waetzigj/mips/mipsref.pdf 32 registri general
costruttori e distruttori
costruttori e distruttori Costruttore E un metodo che ha lo stesso nome della classe a cui appartiene: serve per inizializzare un oggetto all atto della sua creazione Ce ne possono essere uno, più di uno,
Allocazione dinamica della memoria - riepilogo
Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica In breve Storage duration Allocazione dinamica della
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof.
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 009-10 prof. Viviana Bono Blocco 9 Metodi statici: passaggio parametri, variabili locali, record
Funzioni. Il modello console. Interfaccia in modalità console
Funzioni Interfaccia con il sistema operativo Argomenti sulla linea di comando Parametri argc e argv Valore di ritorno del programma La funzione exit Esercizio Calcolatrice 2, presente in tutti i programmi
Esercizio sulla gestione di file in Unix
Esercizio sulla gestione di file in Unix 1 Esercizio Si vuole realizzare un programma C che, utilizzando le system call di Unix, realizzi uno schema di comunicazione tra due processi (padre e figlio) mediante
2006-2011 maurizio pizzonia sicurezza dei sistemi informatici e delle reti. esercizi su vulnerabilità del software e delle reti
esercizi su vulnerabilità del software e delle reti 1 input fidato e non per quali dei seguenti software una vulnerabilità rappresenta una minaccia? in quali condizioni? apache: server web il kernel linux
Dott. Ing. Davide Maiorca
Pattern Recognition and Applications Lab Attacchi Base: Buffer Overflow Dott. Ing. Davide Maiorca [email protected] Corso di Sicurezza Informatica A.A. 2014/2015 Dipartimento di Ingegneria Elettrica
Lab. di Sistemi Operativi - Esercitazione n 9- -Thread-
Lab. di Sistemi Operativi - Esercitazione n 9- -Thread- 1 Sommario Esercizi su: Comunicazione tra processi: la funzione pipe() Condivisione dati e codice tra due o più processi: concetto di Thread 2 -
Un modello integrato control-flow e data-flow per il rilevamento automatico di intrusioni
Università degli Studi di Udine Facoltà di Scienze Matematiche Fisiche e Naturali Corso di Laurea Specialistica in Informatica Tesi di Laurea Un modello integrato control-flow e data-flow per il rilevamento
Introduzione a GCC: GNU Compiler Collection
Introduzione a GCC: GNU Compiler Collection Caratteristiche di GCC Compilatore multipiattaforma modulare Disponibile per tutti i principali sistemi operativi Può produrre programmi per la maggior parte
Fondamenti di Informatica 2
Fondamenti di Informatica 2 della prova scritta del 28 Febbraio 2006 Esercizio 1 (4 punti) Date le seguenti variabili int A[] = 2,3,7,-2,5,8,-4; int N = 7; int min = 3; int i; Scrivere la porzione di codice
Funzioni in C. Violetta Lonati
Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni
Reverse engineering: disassembly
Università degli Studi di Milano Facoltà di Scienze e Tecnologie Dipartimento di Informatica Reverse engineering: disassembly Lanzi Andrea A.A. 2014 2015 Andrea Lanzi Reverse
Processi e thread. Dipartimento di Informatica Università di Verona, Italy. Sommario
Processi e thread Dipartimento di Informatica Università di Verona, Italy Sommario Concetto di processo Stati di un processo Operazioni e relazioni tra processi Concetto di thread Gestione dei processi
LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO 2014 2015 15.V.2015. Indice
LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO 2014 2015 15.V.2015 VINCENZO MARRA Indice Parte 1. Input/Output standard dalla console 2 Esercizio 1 2 Eco
Sicurezza dei Sistemi Informatici Esercitazioni OpenSSL
Sicurezza dei Sistemi Informatici Esercitazioni OpenSSL Marco Tiloca [email protected] 1 Sicurezza dei Sistemi Informatici Esercitazioni OpenSSL Cifratura chiave simmetrica (2 ore) Funzioni hash
Terza Esercitazione. Unix - Esercizio 1. Unix System Call Exec Java Introduzione Thread
Terza Esercitazione Unix System Call Exec Java Introduzione Thread Stefano Monti [email protected] Unix - Esercizio 1 Scrivere un programma C con la seguente interfaccia:./compilaedesegui
L ambiente di simulazione SPIM
Architettura degli Elaboratori e delle Reti Lezione 14 L ambiente di simulazione SPIM Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano L 14 1/20
Esercizio: gestione di un conto corrente
Esercizio: gestione di un conto corrente Si realizzi un conto corrente bancario mediante: - una ASTRAZIONE DI DATO - un TIPO DI DATO ASTRATTO Il conto corrente è caratterizzato dalle seguenti informazioni:
Linguaggio C - Stringhe
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - Stringhe La presente dispensa e da utilizzarsi ai
Introduzione al linguaggio C Gli array
Introduzione al linguaggio C Gli array Vettori nome del vettore (tutti gli elementi hanno lo stesso nome, c) Vettore (Array) Gruppo di posizioni (o locazioni di memoria) consecutive Hanno lo stesso nome
Dynamic Linking. Introduzione Creazione di una libreria dinamica Uso di una libreria dinamica
Dynamic Linking Introduzione Creazione di una libreria dinamica Uso di una libreria dinamica Dynamic Linking Il linking tra i moduli di un programma e le librerie da esso utilizzate può essere Statico
Format String Vulnerability
Università degli Studi di Milano Facoltà di Scienze Matematiche, Fisiche e Naturali Corso di Laurea in Informatica April 15, 2005 Sommario 1 Format string Definizione Format function Componenti delle Format
AXO. Operativo. Architetture dei Calcolatori e Sistema. programmazione di sistema
AXO Architetture dei Calcolatori e Sistema Operativo programmazione di sistema Il sistema operativo Il Sistema Operativo è un insieme di programmi (moduli software) che svolgono funzioni di servizio nel
VARIABILI LOCALI E GLOBALI (ESTERNE)
VARIABILI LOCALI E GLOBALI (ESTERNE) Le variabili locali sono definite (ed il loro uso dichiarato) nella funzione (o nel blocco) che le usa; nascono quando la funzione entra in esecuzione e muoiono al
Uso avanzato dei puntatori Allocazione dinamica della memoria
Uso avanzato dei puntatori Allocazione dinamica della memoria Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica
La gestione della memoria
La gestione della memoria DOTT. ING. LEONARDO RIGUTINI DIPARTIMENTO INGEGNERIA DELL INFORMAZIONE UNIVERSITÀ DI SIENA VIA ROMA 56 53100 SIENA UFF. 0577234850-7102 [email protected] HTTP://WWW.DII.UNISI.IT/~RIGUTINI/
Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main
Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli
Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata
Puntatori int i = 10; int * pi = &i; pi i = 10 116 int * pi = pi contiene un informazione che mi permette di accedere ( puntare ) ad una variabile intera Un puntatore contiene un numero che indica la locazione
Chiamate di sistema per la Gestione dei processi in POSIX. E.Mumolo, DEEI [email protected]
Chiamate di sistema per la Gestione dei processi in POSIX E.Mumolo, DEEI [email protected] Process id ed altri identificatori pid_t getpid(); // Process id del processo chiamante pid_t getppid(); // Process
DevC++ vers. 4.9.9.2 Manuale d uso
DevC++ vers. 4.9.9.2 Manuale d uso Liceo Scientifico N. TRON di SCHIO (VI) Sommario 1 INTRODUZIONE... 3 2 SETUP... 5 2.1 Procedura di installazione... 5 2.2 Configurazione... 7 2.2.1 Opzioni dell ambiente...
Thread: sincronizzazione Esercitazioni del 09 Ottobre 2009
Thread: sincronizzazione Esercitazioni del 09 Ottobre 2009 Luca Fossati, Fabrizio Castro, Vittorio Zaccaria October 10, 2009 Sincronizzazione - 1 1 Esercizio 1: Sincronizzazione - 1 Qual è il problema
Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 18 31/03/2014
Laboratorio di Programmazione 1 1 Docente: dr. Damiano Macedonio Lezione 18 31/03/2014 Funzioni: Dichiarazione e Definizione La dichiarazione di una funzione serve a comunicare al compilatore quali sono
ESAME SCRITTO DI ELEMENTI DI INFORMATICA E PROGRAMMAZIONE. 9 Settembre 2015
COGNOME E NOME: MATRICOLA: Civile Ambiente e Territorio Non si possono consultare manuali, appunti e calcolatrici. Esercizio 1: Rappresentare i numeri 43 e 81 (in base 10) in notazione binaria in complemento
Cognome: Nome: Matricola: Sicurezza dei sistemi informatici e delle reti 18 febbraio 2014
Tempo a disposizione: 70 minuti. Libri e appunti chiusi. Vietato comunicare con chiunque. Vietato l'uso di smartphone, calcolatrici e affini. 1. Protocolli crittografici. 1.1. Fornisci un esempio di protocollo
La gestione della memoria dinamica Heap
Laboratorio di Algoritmi e Strutture Dati La gestione della memoria dinamica Heap Prof. Luigi Lamberti 2005 Cenni sui Processi Un Programma è un insieme di Istruzioni memorizzato in un file con le costanti
13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti
13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/
A#acchi Base: Buffer Overflow
Pattern Recognition and Applications Lab A#acchi Base: Buffer Overflow Do#. Ing. Davide Maiorca, Ph.D. [email protected] Corso di Sicurezza Informa
Capire e sfruttare gli stack buffer overflows
Capire e sfruttare gli stack buffer overflows Giovanni Laieta - giovannilaieta@milugorg 8 gennaio 2004 VERSIONE: 07 Copyright (c) 2003 Giovanni Laieta è garantito il permesso di copiare, distribuire e/o
Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori
Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine
GLUI: GLUT-based User Interface
GLUI: GLUT-based User Interface La GLUI è una libreria di oggetti C++ costruita utilizzando le GLUT e mette a disposizione tutta una serie di oggetti per rendere l interfaccia di un programma più user-friendly.
Sistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 16 luglio 2015 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare
Tecniche di traduzione da C ad assembly 68000. Note generali
Tecniche di traduzione da C ad assembly 68000 Note generali Schema di compilazione da C ad assembly 68K Ispirato a GCC Fa uso di: banco di registri classi d istruzioni modi d indirizzamento e organizzazione
10 - Programmare con gli Array
10 - Programmare con gli Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it
Sistemi Operativi (modulo di Informatica II) I processi
Sistemi Operativi (modulo di Informatica II) I processi Patrizia Scandurra Università degli Studi di Bergamo a.a. 2009-10 Sommario Il concetto di processo Schedulazione dei processi e cambio di contesto
Il linguaggio C. Notate che...
Il linguaggio C Notate che... 1 Il C è un linguaggio a blocchi int main (void) { blocco } 2 Il C è un linguaggio a blocchi (2) Non è possibile mischiare dichiarazioni e comandi! int main (void) { } Dichiarazione
CREARE UNA LIBRERIA IN C
CREARE UNA LIBRERIA IN C Prima di cominciare a vedere come fare una libreria, dobbiamo capire di cosa abbiamo bisogno... di un file.h che sarà l'header della libreria (ovvero il file che conterrà i prototipi
Corso di Fondamenti di Informatica Algoritmi su array / 2
Corso di Fondamenti di Informatica Algoritmi su array / Anno Accademico 00/009 Francesco Tortorella Algoritmi su array Operazioni tipiche sugli array: inizializzazione lettura stampa ricerca del minimo
