La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Foundational Proof-Carring Code Andrew W.Appel Princeton University Relatore:Fabio Mortillaro 802657 Anno accademico 2005-06 Corso di Analisi e Verifica.

Presentazioni simili


Presentazione sul tema: "Foundational Proof-Carring Code Andrew W.Appel Princeton University Relatore:Fabio Mortillaro 802657 Anno accademico 2005-06 Corso di Analisi e Verifica."— Transcript della presentazione:

1 Foundational Proof-Carring Code Andrew W.Appel Princeton University Relatore:Fabio Mortillaro Anno accademico Corso di Analisi e Verifica Programmi

2 Fabio Mortillaro Proof-Carrying code: PCC Framework per la verifica automatica delle proprietà di sicurezza dei programmi scritti in linguaggio macchina Tipologie di PCC Conventional PCC Foundational PCC Problema: quis custodiet ipso custodes?

3 Fabio Mortillaro Scopo e modalità di PCC Eseguire solo software sicuro Software: piccole applicazioni, plugin per browser, applet, estensioni del kernel di OS Sicuro: accede solo alle zone di memoria ad esso dedicate, rispetta le variabili private delle API a cui è linkato, non accede a risorse senza autorizzazione, non sovrascrive i valori delle variabili, non legge dati privati Costruire e testare dimostrazioni matematiche sul programma scritto in LM Garantisce sicurezza solo se non ci sono bugs nel verification- condition generator, negli assiomi logici, nelle typing rules o nel proof-checker

4 Fabio Mortillaro Esempi Java System: byte-code verifier fornisce una garanzia di sicurezza solo se non ci sono bugs nel verifier stesso, nel compilatore JIT, nel garbage collector o in altre parti della JVM TAL: compilatore produce TAL e si effettua il type- checking del linguaggio a basso livello che fornisce una garanzia di sicurezza solo se non ci sono bugs nel compilatore stesso, nel type-checker o nellassembler che traduce TAL in ML Semplificato in TML TAL (Typed Assembly Language) Linguaggio assembly idealizzato su architetture RISC Semantica operativa formale per una semplice macchina astratta Sistema di tipi formali che cattura lo stato del registro del processore, lo stack e la memoria Importante type-checker per quasi tutte le architetture Intel Prototipo di compilatore per un linguaggio imperativo sicuro TML (Typed Machine Language) Linguaggio a più basso livello di TAL Interfaccia tra il compilatore e il prover Sposta il lavoro al type-checker

5 Fabio Mortillaro Soluzione Il provider di un programma PCC deve fornire il codice eseguibile e la dimostrazione machine- checkable che il codice non violi la politica di sicurezza della macchina su cui gira Il computer non lancia il programma finché non ha verificato che il codice sia sicuro (la dimostrazione è valida)

6 Fabio Mortillaro Conventional PCC (Typed-Specialized) Dimostrazioni scritte utilizzando una logica che ha incorporata la comprensione di un particolare type-system Type constructor appaiono come primitive delle logica stessa e alcuni lemmi sono costruiti allinterno del sistema di verifica Semantica dei costruttori e validità dei lemmi sono dimostrati rigorosamente dagli autori del PCC ma non in modo meccanico TYPE SYSTEM Descrive come un linguaggio di programmazione classifica i valori e le variabili in TIPI, come li può manipolare e come essi interagiscono tra di loro

7 Fabio Mortillaro Conventional PCC: VCGen VCGen (Verification Condition Generator): ricava per ogni programma una verification condition (formula logica che se vera garantisce la sicurezza del programma) VCGen usato dal provider e dal consumer per trovare la giusta formula per il programma considerato VC fornita dal provider e controllata dal consumer

8 Fabio Mortillaro Conventional PCC: VCGen Programma grosso (es: Cedilla Systems è costituito da righe di codice C) Esamina le istruzioni macchina del programma Espande le sostituzioni del codice macchina secondo la logica di Hoare Esamina i parametri formali per trovare le precondizioni e i risultati per le postcondizioni Bug in VCGen consente a formule errate di essere approvate LOGICA di HOARE Sistema formale che fornisce un insieme di regole logiche al fine di motivare la correttezza di un programma con il rigore della logica matematica TRIPLA di HOARE Descrive come lesecuzione di un pezzo di codice cambi lo stato della computazione {P} C {Q} P (precondizione), C(comando), Q (postcondizione)

9 Fabio Mortillaro Foundational PCC Sistema per la specifica, la dimostrazione automatica e il controllo della sicurezza dei programmi in LM Evita di specializzarsi per un type-system Evita di usare un VCGen Semantiche operazionali delle istruzioni macchina e politiche di sicurezza definite in una logica sufficientemente espressiva da servire da fondamento alla matematica Logica di alto livello con pochi assiomi dellaritmetica, da cui è possibile costruire la maggior parte della matematica moderna

10 Fabio Mortillaro Foundational PCC Provider deve fornire il codice e una dimostrazione in foundational logic che il codice soddisfi la politica di sicurezza del consumer Dimostrazione deve definire in modo esplicito, con i fondamenti di matematica, tutti i concetti richiesti e provare in modo esplicito tutte le loro proprietà Dimostrazione della correttezza rispetto ai tipi inserita nella dimostrazione della sicurezza del codice Vantaggi rispetto Conventional PCC: Flessibilità: provider può inserire un nuovo type-system o una nuova politica di sicurezza Sicurezza: base da verificare è minore (sistema è più piccolo con logica di alto livello, definizione delle semantiche delle istruzioni macchina e politica di sicurezza)

11 Fabio Mortillaro Foundational PCC 1. Scelta della logica e del framework 2. Specifica delle istruzioni macchina 3. Definizione della sicurezza 4. Dimostrazione della sicurezza Typing rules Modelli semantici Modelli indicizzati per i tipi ricorsivi Mutable fields 5. Pruning del runtime system

12 Fabio Mortillaro Logica e Framework Logica di alto livello di Church con assiomi di aritmetica Rappresentata attraverso la metalogica LF che produce in modo naturale delle dimostrazioni inviabili al consumer Framework TWELF LF (Logical Framework) Metalinguaggio per la specifica di sistemi deduttivi rappresentati attraverso la dichiarazioni di costanti. È una teoria dei tipi definita su tre livelli: oggetti, tipi e generi TWELF Versione corrente di una serie di implementazioni del framework logico LF. Twelf è un software di ricerca

13 Fabio Mortillaro TWELF1/2 tp : type%tipi della logica tm : tp -> type%tipo metalogico di tipo type o: tp%proposizioni (primitive di tp) num: tp%numeri (primitive di tp) arrow%costruttori di tipi funzione pf%data una formula A, la sua %dimostrazione appartiene a pf(A) lam%costruttore di una funzione ad un argomento imp%implicazione logica forall%quantificatore universale

14 Fabio Mortillaro TWELF2/2 Regole di introduzione e di eliminazione per i costruttori beta_ebeta_iimp_iimp_e forall_iforall_enot_not_e Lemmi e nuovi operatori andand_iand_e1

15 Fabio Mortillaro – Istruzioni macchina Machine state: coppia (r,m) costituita da: Register r Memory m Relazione da interi (indirizzi) a interi (contenuti)

16 Fabio Mortillaro Istruzioni1/2 Machine step = esecuzione di unistruzione Esecuzione = Descrive la relazione tra lo stato della macchina prima e dopo lesecuzione

17 Fabio Mortillaro Istruzioni2/2 Considero listruzione Descritta da Da cui è possibile definire add(i,j,k)

18 Fabio Mortillaro Instruction fetch e decoding1/2 Supponiamo di codificare listruzione add in una word a 32 bit con opcode = 3

19 Fabio Mortillaro Instruction fetch e decoding2/2 Macchine reali non usano laritmetica degli interi ma quella modulare Alcune macchine hanno PC multipli (Sparc) Alcune macchine hanno istruzioni di lunghezza variabile (Pentium) Tutte le istruzioni non definite vengono trattate come illegali in base alla politica di sicurezza Parte sintattica: relazione decode 1035 (600) linee di logica Twelf (da 151 linee di specifiche SLED) Parte semantica: definizione di add, linee di logica (compresa definizione di logica modulare) SLED (Specification Language for Encoding and Decoding) Descrive le rappresentazioni di istruzioni macchina in linguaggio assembly Usa fields e tokens (parti di istr), patterns (rappresentazioni binarie di istr o gruppi di istr), constructors (mapping tra livello astratto e binario) Supporta implementazioni di elementi a livello macchina in modo indipendente dalla macchina

20 Fabio Mortillaro – Definizione della sicurezza Situazione: alcuni stati non hanno successore e r(PC) punta a istruzioni illegali (violano politica di sicurezza) Esempio: solo gli indirizzi readable saranno caricati Definisco il predicato readable

21 Fabio Mortillaro Esempio1/3 Listruzione diviene

22 Fabio Mortillaro Esempio2/3 Stato è sicuro se ogni stato raggiungibile nella sua chiusura di Kleene ha un successore Un programma p è caricato in un punto start della memoria m se

23 Fabio Mortillaro Esempio3/3 Un programma p è sicuro se OSS: non cè VCGen e la sintassi e la semantica in esso implicite sono rese esplicite e più concise

24 Fabio Mortillaro – Dimostrazione della sicurezza Per produrre dimostrazioni in modo automatico servono: Typed Intermediate Languages Typed Assembly Language Dimostrazioni per induzione strutturale in ogni punto del programma per dimostrare che è sicuro CPCC: dimostrazioni fatte dai fornitori FPCC: dimostrazione della correttezza dei tipi inserita nella dimostrazione spedita al consumer

25 Fabio Mortillaro Compilatori diversi

26 Fabio Mortillaro Typing rules Approccio sintattico (definizione di |- ) Approccio semantico (lemma da dimostrare) Se x ha tipo nella memoria m allora il contenuto della locazione di memoria x ha tipo e quello della locazione di memoria x+1 ha tipo Lemma semantico che deve essere dimostrato: dimostrazioni semantiche sono preferibili alle riduzioni sintattiche perché esse portano a dimostrazioni più corte e maneggevoli in Foundational Logic

27 Fabio Mortillaro Modelli semantici Type: insieme di values Lambda calcolo: costrutto sintattico Value: coppia (m,x) dove m è la memoria e x un intero (indirizzo) Per puntatori a strutture dati, x è il root-pointer della struttura Per le funzioni, x è lentry address della f

28 Fabio Mortillaro Modelli semantici Modello buono per strutture dati allocate staticamente VALUE ((a,m),x) Coppia costituita da uno State (a,m) e da un root-pointer x STATE (a,m) Coppia costituita da un allocset a e dal contenuto della memoria m

29 Fabio Mortillaro Modelli semantici - Limitazioni Problemi: ricorsione heap (mutable fields) Soluzioni: Modello indicizzato Mutable fields

30 Fabio Mortillaro Modello indicizzato Value: coppia dove k è un indice di approssimazione e v è un valore significa che v approssimativamente ha tipo e tutti i programmi che eseguono per meno di k istruzioni non notano diversità Tipo: insieme di coppie dove k è un intero non negativo, v è un valore e è tale che se e allora

31 Fabio Mortillaro Mutable fields Immutable fields State: coppia (a,m) dove m è la memoria e a è un insieme di indirizzi allocati Mutable fields State: coppia (a,m) dove m è la memoria e a è una mappa da indirizzi a tipi Definizione metalogica di tipo: Problema: ricorsione Soluzione: sostituire il tipo nellallocset col suo numero di Godel

32 Fabio Mortillaro Livelli di astrazione di unistruzione1/2 1. Intero (codice opcode 3 per ladd) 2. Implementa una relazione sugli stati 3. Istruzione add (es di Sparc) implementa una add indipendente dalla macchina 4. Add manipola non solo i registri ma delle variabili locali 5. Add è una delle numerose istruzioni tipate che lavorano sui tipi 6. Add tipata viene specializzata per un particolare contesto dove appaiono alcune sue istanze Livello di astrazione usato in modo implicito dal Conventional Proof- Carrying Code

33 Fabio Mortillaro Livelli di astrazione di unistruzione2/2 FPCC ricerca e tenta di trovare modelli semantici per ciascuno dei livelli di astrazione in modo da poter dimostrare lemmi che consentano il passaggio da un livello allaltro Livelli di astrazione definiti per modularizzare le dimostrazioni in modo da semplificare il lavoro del prover

34 Fabio Mortillaro Pruning del Runtime System Problemi: bugs del garbage collector, debugger, mashaller/unmarshaller,… Soluzione: portare le componenti dal runtime system al codice utente type- checkable Bugs individuati dal type-checking Type-safe Bugs che portano a comportamento non corretto ma sicuro

35 Fabio Mortillaro Garbage collector Problemi: Alloca e dealloca aree di memoria con oggetti di tipo diverso Attraversa oggetti di tipo sconosciuto in modo arbitrario Soluzioni: Region calculus di Tofte e Talpin Intesional type analysis Region calculus di Tofte e Talpin Lambda calcolo tipato in modo polimorfico con annotazioni che rendono esplicita lallocazione e la deallocazione della memoria. Possono essere liberati solo oggetti che probabilmente sono morti Intensional Type Analysis Utilizzo di linguaggi che consentono il polimorfismo ad hoc, lanalisi dei tipi a runtime e la definizione di operatori che determinino la struttura di un abstract type

36 Fabio Mortillaro Conclusioni Sfrutta il lavoro di molti Logical framework (teoria e implementazione) Prover automatici Type theory e type system Verifica partendo dallinsieme di assiomi più piccolo possibile, usando il più piccolo e semplice verifier e runtime system Riduzione della costo di computazione dei sistemi che fanno girare codice macchina da risorse non sicure


Scaricare ppt "Foundational Proof-Carring Code Andrew W.Appel Princeton University Relatore:Fabio Mortillaro 802657 Anno accademico 2005-06 Corso di Analisi e Verifica."

Presentazioni simili


Annunci Google