30
Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli: Punti Deboli Esempi Progettazione Sicura: Suggerimenti IPv6 Security

Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

Embed Size (px)

Citation preview

Page 1: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

Progetto Sicurezza

Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro

Checklist IS Metodi Logico Formali

Protocolli: Punti Deboli Esempi Progettazione Sicura: Suggerimenti

IPv6 Security

Page 2: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

Correttezza vs. Robustezza (1)

Non esiste una definizione precisa di codice robusto

Per capire ₩ necessario osservare le differenze che intercorrono tra codice corretto e codice robusto

Un programma si dice corretto se si comporta come previsto dalle specifiche

Page 3: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

Correttezza vs. Robustezza (2)

Un programma robusto ₩: Corretto Scritto in modo da controllare che la propria esecuzione

non causi danni

Quindi ₩ necessario inserire dei controlli: Quanti? Quali? Dove?

Non esiste una risposta precisa a tali domande!

Page 4: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

Correttezza vs. Robustezza (3)

Nel corso degli ultimi 30 anni sono stati studiati alcuni metodi (pseudo-)formali per la progettazione di software sicuro:

Checklist Software Engineering Metodi Logico - Formali

La semplice applicazione di uno qualsiasi di tali approcci non implica un prodotto finale o un sistema sicuro al 100%

Page 5: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

Checklist: Caratteristiche

Metodo pragmatico basato sull'esperienza dei professionisti del campo

Metodo poco formale: Specifiche scritte in linguaggio naturale Assenza di regole e metodi precisi

Assunzioni: Spazio soluzioni limitato Soluzioni a validità universale

Page 6: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

Checklist: Pro

Completa analisi di ogni componente possibile del sistema di sicurezza

Indipendenza dal know-how dell'analista

Stile “cookbook”: Presenza di numerosi tools che assistono l'analista

nelle varie fasi del progetto Sistemi esperti per l'analisi dei rischi e della sicurezza

dei sistemi

Page 7: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

Checklist: Contro

Modello troppo semplicistico

Non adatto a grandi sistemi informatici

Utilizzo di linguaggio naturale

Difficoltà di manutenzione

Mancanza di metodologie formali: Possibilità di dimenticare qualche particolare Soluzioni obsolete

Page 8: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

Software Engineering: Caratteristiche

Modelli di progettazione molto simili a quelli utilizzati in IS per la progettazione e la realizzazione del software

Esempio: modello di Fisher (1984) Inventario dei dati da proteggere Identificazione dei punti deboli del sistema Analisi dei rischi Progettazione dei controlli Analisi costi-benefici

Page 9: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

Software Engineering: Assunzioni

Per ogni sistema esiste una soluzione ottima riguardo alla sicurezza

Lo spazio delle soluzioni non ₩ numerabile

La soluzione nasce dall'analisi delle funzionalità di ogni singola componente del sistema

Non ₩ possibile utilizzare controlli generici per qualsiasi tipo di sistema

Documentazione Adeguata + Comprensione del Sistema = Maggiore Efficienza + Facilità di Manutenzione + Sicurezza

Page 10: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

Software Engineering: Pro

Concentrazione sugli aspetti tecnici del sistema

Flessibilità: ₩ possibile applicare questi metodi sia a sistemi complessi che a sistemi semplici

Efficienza: non ₩ necessario perdere tempo nella consultazione di checklist per scartare controlli che non sono necessari

Buona documentazione, facile manutenzione

Molto adatto per sistemi informatici complessi e di grandi dimensioni in cui la modifica di una componente influenza tutto il sistema

Page 11: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

Software Engineering: Contro

Necessità di un “super-analista” o di un “security team”

Risultati poco soddisfacenti su sistemi già esistenti:

Perdita di alcune features del sistema “Distruzione” del sistema

Il coinvolgimento degli utenti durante la fase di progettazione e analisi dei requisiti di sicurezza porta a sovrastimare i punti deboli del sistema (Farquar 1991)

Page 12: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

Metodi Logico – Formali: Caratteristiche

Astrazione dei problemi di sicurezza - Astrazione delle soluzioni

Approccio top-down Assunzioni:

La soluzione può essere creata solo da una conoscenza globale del sistema: l'astrazione ₩ la via maestra

Le soluzioni progettate sull'astrazione dei problemi di sicurezza sono molto più generali e quindi più flessibili e durature nel tempo

L'implementazione dei controlli deve essere eseguita su misura per ogni sistema con cui si ha a che fare

Page 13: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

Metodi Logico – Formali: Pro

Flessibilità nelle strutture di controllo

Indipendenza dall'evoluzione della tecnologia

Buona documentazione

Tutto questo porta a... Facilità di manutenzione Riduzione dei costi

Minor conflittualità tra sicurezza e grado di usabilità del sistema informatico

Page 14: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

Metodi Logico – Formali: Contro

Difficoltà nella descrizione astratta di problemi, controlli e soluzioni

Difficoltà nel passare dalla soluzione astratta ai dettagli implementativi

Difficoltà nell'integrare le componenti logiche e fisiche di un sistema sicuro

Molto difficile l'applicazione di tali metodi a sistemi già esistenti

Assenza di tool e procedure automatiche

Page 15: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

Codice Robusto

A seconda del livello di dettaglio ₩ necessario considerare diverse problematiche e diverse strategie di soluzione

Un software corretto e robusto presenta un numero minore di malfunzionamenti che potrebbero essere sfruttati dai malintenzionati

Vana ₩ la sicurezza senza la robustezza: stack smashing & strcpy

Page 16: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

Protocolli: Tipologie di Attacco

Ascolto passivo del canale di comunicazione

Ascolto attivo del canale di comunicazione (modifica delle informazioni che passano attraverso il canale)

Impersonificazione di un capo della comunicazione

Page 17: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

Protocolli: Punti Deboli

Dimensioni variabili dei dati trasferiti: Possibilità di attacchi alla “buffer overrun” Esempio: protocollo HTTP, funzione GET

Scelta degli ID di sessione: Lo spazio dei valori possibili deve essere di

dimensioni adeguate

Cheating: la possibilità da parte di un client di collegarsi leggitimamente, ma di sfruttare alcuni difetti del protocollo per ottenere dei vantaggi

Page 18: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

Protocolli: Esempi Famosi

Syslog Spoofing dei pacchetti DoS Timestamping non affidabile

DNS [RFC 1034, RFC 1035] Problemi nella gestione degli ID nell'implementazione

di Bind di Microsoft Windows

Page 19: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

Progettazione di Protocolli: Hints

Controllare l'integrità dei dati trasmessi Time Stamping

Arbitrated protocols: time stamping authority (TSA) Indipendenza dal supporto fisico Impossibilità di apportare modifiche dopo l'autenticazione Impossibilità di modificare la data di autenticazione

Generazioni di sequenze pseudo-casuali Sequenze numeriche sufficientemente lunghe che

possano considerarsi casuali Sequenze numeriche impredicibili

Page 20: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

Progettazione di Protocolli: Integrità dei Dati

A BM, h(M,K)

Una soluzione semplice ₩ l'utilizzo di una funzione di hashing MAC/DAC (Message/Data Authentication Codes)

Se non si sceglie K e h in modo opportuno si rischia di compromettere seriamente questo protocollo

Un altro difetto ₩ che A e B devono conoscere K, quindi ₩ necessaria la presenza di un canale sicuro

Page 21: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

IPv6: Obiettivi

Supporto di miliardi di host

Riduzione tabelle di routing

Semplificazione del protocollo & maggiore velocità trasferimento pacchetti

Maggiore sicurezza (autenticazione e privacy)

Servizi in tempo reale

Semplificazione multicasting

Coesistenza con IPv4

Page 22: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

IPv6: Preambolo Principale

Priorità: 0-7 pacchetti che possono rallentare; 8-15 traffico in tempo reale

Flow Label (sperimentale): pseudoconnessione sorgente-destinazione

Payload: non include la lunghezza del preambolo

Page 23: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

IPv6 vs. IPv4

Non ₩ presente il campo IHL perch₫ il preambolo di IPv6 ha dimensione fissa

Il campo protocol ₩ stato eliminato in quanto il campo Next Header descrive il tipo di dati che segue l'ultimo preambolo IP (per esempio TCP)

Tutti i campi relativi alla frammentazione sono stati eliminati

La dimensione minima del pacchetto IPv6 ₩ di 576 byte

Checksum non presente

Page 24: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

IPv6: Extension Headers

IPv6 Header (obbligatorio)

Hop-by-hop Header Destination Option

Header (intermedi) Routing Header

Fragmentation Header Authentication Header Encapsulating Security

Payload Header Destination Options

Header (destinazione)

Page 25: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

IPv6: Authentication Header (AH)

A e B devono accordarsi su una o più chiavi segrete che solo loro conoscono

A ogni chiave ₩ associato un codice a 32 bit univoco (campo SPI)

Ogni chiave ha un time stamp

Authentication data: checksum di MD5

Page 26: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

IPv6: AH How To (Mitt.)

Costruzione pacchetti IP completo Azzeramento campi variabili (Hop Limit) Padding della chiave e del pacchetto fino a

raggiungere un multiplo di 16 byte (separatamente) Calcolo della checksum della chiave + pacchetto +

chiave L'algoritmo utilizzato per il calcolo della checksum

₩ deciso dagli utenti; quello di default ₩ MD5

Page 27: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

IPv6: AH How To (Dest.)

Dal numero di chiave (campo SPI) risale alla chiave Padding della chiave e del pacchetto fino a

raggiungere un multiplo di 16 byte (separatamente) Calcolo della checksum della chiave + pacchetto (in

cui sono stati azzerati i campi variabili) + chiave Confronto delle checksum Nota: i dati sono spediti in chiaro.

Page 28: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

IPv6: Encapsulated Security Payload (ESP)

SPI: numero di chiave a 32 bit Algoritmo crittografico: ₩ a

scelta del mittente e del destinatario

Se si utilizza DES-CBC (default):

Payload Data inizia con un vettore di inizializzazione di lungheza multipla di 4 byte

I dati crittografati sono completati a un multiplo di 8 byte

Page 29: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

IPv6: ESP Note

Se si utilizza DES-CBC il vettore di inizializzazione ₩ trasmesso in chiaro: questo approccio non ₩ dei più sicuri, ma per gli obiettivi che si propone IPv6 ₩ accettabile

È possibile combinare AH e ESP: ESP prima di AH

Transport mode ESP Tunnel mode ESP

AH prima di ESP (solo tunnel mode): AH ₩ protetto da ESP quindi ₩ più difficile modificare il

messaggio

Page 30: Progetto Sicurezza Codice Corretto – Codice Robusto: Metodi formali per la progettazione di codice sicuro Checklist IS Metodi Logico Formali Protocolli:

Bibliografia

Richard Baskerville, “Information System Security Design Methods: Implications for Information Systems Development” - Acm Computing Surveys, Volume 25 Number 4 December 1993

Andrew Stuart Tanenbaum, “Reti di Computer” – Capitolo 5 “Il livello di rete in Internet”, Ed. Italiana 1998

William Stallings, “IPv6: The New Internet Protocol”, First published in IEEE Communications Magazine, July 1996, Volume 34, Number 7

IEEE Communication Society: www.comsoc.org

Antonio Cisternino, “Sicurezza e Robustezza” – DEV, Novembre 2000 N. 79

Alfonso De Gregorio, “Protocolli applicativi: le vulnerabilità più ricorrenti”, “Progettazione di protocolli sicuri” – DEV, Novembre 2000 N. 79

T. A. Linden, “Operating System Structure to Support Security and Reliable Software” – U.S Departement of Commerce / National Bureau of Standards NBS Technical Note 919 August 1976

Informazioni varie sul mondo dell'informatica: www.manuali.net

The UK ITSEC scheme: www.itsec.gov.uk