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 802657 Anno accademico 2005-06 Corso di Analisi e Verifica Programmi

2 Fabio Mortillaro 8026572 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 8026573 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 8026574 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 8026575 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 8026576 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 8026577 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 8026578 Conventional PCC: VCGen Programma grosso (es: Cedilla Systems è costituito da 23000 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 8026579 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 80265710 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 80265711 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 80265712 1 - 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 80265713 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 funzioni @%applico una funzione ad un argomento imp%implicazione logica forall%quantificatore universale

14 Fabio Mortillaro 80265714 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 80265715 2 – Istruzioni macchina Machine state: coppia (r,m) costituita da: Register r Memory m Relazione da interi (indirizzi) a interi (contenuti)

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

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

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

19 Fabio Mortillaro 80265719 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,.. 600 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 80265720 3 – 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 80265721 Esempio1/3 Listruzione diviene

22 Fabio Mortillaro 80265722 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 80265723 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 80265724 4 – 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 80265725 Compilatori diversi

26 Fabio Mortillaro 80265726 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 80265727 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 80265728 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 80265729 Modelli semantici - Limitazioni Problemi: ricorsione heap (mutable fields) Soluzioni: Modello indicizzato Mutable fields

30 Fabio Mortillaro 80265730 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 80265731 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 80265732 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 80265733 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 80265734 5 - 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 80265735 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 80265736 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