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

Slides:



Advertisements
Presentazioni simili
Traduzione ed Interpretazione
Advertisements

Puntatori in C e C++.
INTRODUZIONE Il framework.NET. Un po di storia Sin dalla prima versione del sistema operativo Windows (1990 circa), nacque la necessità di far comunicare.
Classe III A A.s – 2011 Sistemi di Elaborazione e Trasmissione dell’Informazione 4 ore settimanali (2 laboratorio) Docenti Prof. Alberto Ferrari.
Dalla scrittura all’esecuzione
Evoluzione dei linguaggi di programmazione
Procedure e funzioni A. Ferrari.
I linguaggi di programmazione
Linguaggi di programmazione
Type Checking (1° parte)
Algoritmi e Programmazione
Massa Laura Mela Enrica
Programmazione II Docente: Francesca Levi
Metodologie di Programmazione = decomposizione basata su astrazioni
Generalità Linguaggio e Macchina Astratta
Fondamenti di Informatica Prof. Cantone
Semantiche dei linguaggi di programmazione
TRADUZIONE DEL PROGRAMMA Una volta che un programma sia stato scritto in C, esso non può essere eseguito senza unulteriore traduzione. Ciò perché qualsiasi.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Laboratorio di Linguaggi lezione IV Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Corso di Informatica (Programmazione)
Introduzione al linguaggio Java
Programmazione Un programma descrive al computer, in estremo dettaglio, la sequenza di passi necessari a svolgere un particolare compito L’attività di.
Struttura dei sistemi operativi (panoramica)
Heap allocation e garbage collector di Oberon Algoritmo Quick Fit e garbage collector mark and sweep.
CAPITOLO 2 INTRODUZIONE AL LINGUAGGIO JAVA E ALL'AMBIENTE HOTJAVA.
Unità Didattica 2 I Linguaggi di Programmazione
memoria gestita staticamente:
Progettazione di una base di dati
Fondamenti di informatica Linguaggio C Main Program: Architettura di un PC Diagrammi di flusso Linguaggio C.
INTRODUZIONE l sistema operativo è il primo software che lutente utilizza quando accende il computer; 1)Viene caricato nella memoria RAM con loperazione.
1 Programmazione = decomposizione basata su astrazioni (con riferimento a Java)
Introduzione a C#.
Introduzione al linguaggio assemby del microprocessore a parte
Lezione 1 Linguaggi di programmazione – Algoritmi –Istruzioni
Namespaces 1. Utilizzati per contenere tipi (classi, strutture, interfacce … ) ed altri namespaces La Class Library è organizzata gerarchicamente mediante.
Introduzione alla programmazione Object Oriented
VIRTUALIZZAZIONE Docente: Marco Sechi Modulo 1.
Architettura del calcolatore
Lo sviluppo del software e i linguaggi di programmazione
Macchine astratte, linguaggi, interpretazione, compilazione
Implementazione di un linguaggio ad alto livello (con riferimento a Java)
Prima di iniziare… Durata attività: due lezioni frontali + una lezione laboratorio + compiti per casa Prerequisiti: elementi base architettura dei calcolatori.
la traduzione dei programmi
Vettori (a una dimensione)
Calcolatori Elettronici Il Processore
Informatica Lezione 5 Scienze e tecniche psicologiche dello sviluppo e dell'educazione (laurea triennale) Anno accademico:
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
1 Tipi di Dato §descrittori, tipi, controllo e inferenza dei tipi §specifica (semantica) e implementazione di tipi di dato l implementazioni “sequenziali”
© Copyright NTT DATA Italia – All Rights Reserved The information contained in this document is the property of NTT DATA Italia S.p.A. and the addressee.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Introduzione Laboratorio di Calcolo Corso di Laurea in Fisica Università degli Studi di Roma “La Sapienza”
Linguaggi di Programmazione
L’esecuzione dei programmi
Informatica Generale Marzia Buscemi
Concetti Fondamentali sulla Programmazione
AOT Lab Dipartimento di Ingegneria dell’Informazione Università degli Studi di Parma Intelligenza Artificiale Rappresentazione della Conoscenza e Ragionamento.
1 Macchine astratte, linguaggi, interpretazione, compilazione.
Sistemi operativi di rete Ing. A. Stile – Ing. L. Marchesano – 1/18.
1 Linguaggi: guardando la semantica §esistono un insieme di concetti semantici e di strutture di implementazione in termini dei quali si descrivono in.
1 Metodologie di Programmazione = decomposizione basata su astrazioni.
Il software Claudia Raibulet
Informazione ?. Informazione è Quale è il centravanti del Napoli?  La soluzione è ….. Scelta di un centravanti fra quelli di serie A! è Che giorno è.
Il Processore Il processore è la componente dell’unità centrale che elabora le informazioni contenute nella memoria principale L’elaborazione avviene eseguedo.
Unità di apprendimento 6
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

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

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?

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

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

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)

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

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

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)

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

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)

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

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

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

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

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

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

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

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

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

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

Fabio Mortillaro Esempio1/3 Listruzione diviene

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

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

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

Fabio Mortillaro Compilatori diversi

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

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

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

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

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

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

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

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

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

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

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