Bibliografia
[AR80] G.R. Andrews, R.P. Reitman. An axiomatic approach to information flow in programs. ACM TOPLAS, 2(1), 1980, 56-76.
[AS03] G. Amato, F. Scozzari. A General Framework for Variable Aliasing: Towards Optimal Operators for Sharing Properties. Proc. International Workshop on Logic Based Program Synthesis and Tranformation, Lecture Notes in Computer Science 2664, 2003, 52-60.
[BBD02a] R. Barbuti, C. Bernardeschi, N. De Francesco. Abstract interpretation of operational semantics for secure information flow. Information Processing Letters, 83(2), 2002, 101-108.
[BBD02b] R. Barbuti, C. Bernardeschi, N. De Francesco. Checking Security of Java Bytecode by Abstract Interpretation. Proc ACM SAC2002, 2002, 229-236.
[BBD04] R. Barbuti, C. Bernardeschi, N. De Francesco. Analyzing Information Flow Properties in Assembly Code by Abstract Interpretation. Computer Journal, 47(1), 2004, 25-45.
[BBDT02] R. Barbuti, C. Bernardeschi, N. De Francesco, L. Tesei. Fixing the Java bytecode verifier by a suitable type domain. Proc. SEKE 02, 2002, 377-382.
[BD02] C. Bernardeschi, N. De Francesco. Combining Abstract Interpretation and Model Checking for Analysing Security Properties of Java Bytecode. Proc VMCAI 2002, 2002, 1-15.
[BDL02a] C. Bernardeschi, N. De Francesco, G. Lettieri. An Abstract Semantics Tool for Secure Information Flow of Stack-based Assembly Programs. Microprocessors and Microsystems, 26(8), 2002, 391-398.
[BDL02b] C. Bernardeschi, N. De Francesco, G. Lettieri. Using Standard Verifier to Check Secure Information Flow in Java Bytecode. Proc. COMPSAC 2002, vol. 1, 2002, 850-855.
[BDL03] C. Bernardeschi, N. De Francesco, G. Lettieri Concrete and Abstract Semantics to check Information Flow in Concurrent Programs.
Proc. Concurrency Specification and Programming CS&P'2003, 2003, 79-91.
[BS99] G. Barthe, B. Serpette. Partial evaluation and non-interference in object calculi. Proc. FLOPS, Lecture Notes in Computer Science 1722, 1999, 53-67.
[C97] P. Cousot. Types as abstract interpretations. Proceedings of the 24th ACM Symposium on Principles of Programming Languages, ACM Press, 1997, 316-331.
[CC92] P. Cousot, R.Cousot. Abstract Interpretation and Applications to Logic Programs. Journal of Logic Programming, 13(2-3), 1992, 103-179.
[CC94] P. Cousot, R. Cousot. Higher-order abstract interpretation (and application to comportment analysis generalizing strictness, termination, projection and per analysis of functional languages). Proc. of the IEEE International Conference on Computer Languages, 1994, 95-112.
[CG98] L. Cardelli, A.D. Gordon. Mobile Ambients. Proc. of FoSSaCS '98, Lecture Notes in Computer Science 1378, 1998,140-155.
[CGG02] L. Cardelli, G. Ghelli, A.D. Gordon. Types for the ambient calculus. Information and Computation, 177(2), 2002, 160-194 .
[D77] D.E. Denning, P.J. Denning. Certification of programs for secure information flow. Communications of the ACM, 20(7), 1977, 504-513.
[DHW03] A. Di Pierro, C. Hankin, H. Wiklicky. Quantitative Relations and Approximate Process Equivalences. Proc. CONCUR '03, Lecture Notes in Computer Science 2761, 2003, 508-522.
[DHW04] A. Di Pierro, C. Hankin, H. Wiklicky. Approximate Non-Interference. Journal of Computer Security, 12(1), 2004, 37-81.
[DL03] N. De Francesco, G. Lettieri. Checking Security Properties by Model Checking. Software Testing, Verification and Reliability. 13(2), 2003, 181-196.
[DMSS98] M.G. De La Banda, K. Marriott, P. Stuckey, H. Sondergaard. Differential Methods in Logic Program Analysis. Journal of Logic Programming, 37(1), 1998, 1--37.
[DST03] N. De Francesco, A. Santone, L. Tesei. Abstract Interpretation and Model Checking for Checking Secure Information Flow in Concurrent Systems. Fundamenta Informaticae, 54(2-3), 2003, 195-211.
[DW00a] A. Di Pierro, H. Wiklicky. Concurrent Constraint Programming: Towards Probabilistic Abstract Interpretation. Proc. ACM PPDP'00, 2000, 127-138.
[DW00b] A. Di Pierro, H. Wiklicky. Measuring the Precision of Abstract Interpretations. Proc. LOPSTR'00, Lecture Notes in Computer Science 2042, 2001. 147-164.
[FA99] C. Flanagan, M. Abadi. Object Types against Races. Proc CONCUR 99, Lecture Notes in Computer Science 1664, 1999, 288-303.
[FGR96] G. File', R. Giacobazzi, F. Ranzato. A Unifying View of Abstract Domain Design. ACM Computing Surveys, 28(2), 1996, 333--336.
[GH98] A.D. Gordon, P.D. Hankin. A Concurrent Object Calculus: Reduction and Typing. Electr. Notes Theor. Comput. Sci. 16(3), 1998.
[GL02] R. Gori, G. Levi. An experiment in type inference and verification by abstract interpretation, Proc. of the VMCAI'02 Workshop on Abstract Interpretaion and Model Checking, Cortesi, A. Ed., Lecture Notes in Computer Science 2294, Springer-Verlag 2002, 225-239.
[GL03] R. Gori, G. Levi. Properties of a type abstract interpreter, Proc. of the VMCAI'03 Workshop on Abstract Interpretaion and Model Checking, Zuck, R. Ed., Lecture Notes in Computer Science 2575, Springer-Verlag 2003, 225-239.
[GRS00] R. Giacobazzi, F. Ranzato, and F. Scozzari. Making abstract interpretations complete. Journal of the ACM, 47(2)2000, 361--416.
[GRS03] R. Giacobazzi, F. Ranzato, and F. Scozzari. Making abstract domains condensing. ACM Transactions on Computational Logic. To appear.
[HJNN99] R. R. Hansen, J. G. Jensen, F. Nielson, H. R.Nielson. Abstract Interpretation of Mobile Ambients. Proc. of SAS'99, Lecture Notes in Computer Science 1694, 1999, 135-148.
[JM82] N.D. Jones, S.S. Muchnick. A Flexible Approach to Interprocedural Data Flow Analysis and Programs with Recursive Data Structures. Proc. ACM POPL'82, 1982, 66-74.
[JN95] N.D. Jones, F. Nielson. Abstract Interpretation: A Semantic-Based Tool for Program Analysis. Handbook of Logic in Computer Science, Clarendon Press, 1995.
[LB04] F. Levi, C. Bodei. A Control Flow Analysis for Safe and Boxed Ambients. Proc. Of ESOP '04, to appear in Lecture Notes in Computer Science.
[LM01] F. Levi, S. Maffeis. An Abstract Interpretation Framework for Analysing Mobile Ambients. Proc. of SAS '01, Lecture Notes in Computer Science 2126, 2001, 395-411.
[LM04] F. Levi, S. Maffeis. On Abstract Interpretation of Mobile Ambients. Information and Computation, 188, 2004, 179-240.
[LS03] F. Levi, D. Sangiorgi. Mobile Safe Ambients. TOPLAS, 25(1), 2003, 1-69.
[LY96] T. Lindholm, F. Yellin. The Java Virtual Machine Specification. Addison-Wesley, 1996.
[M92] B. Monsuez. Polymorphic typing by abstract interpretation. Proc. of Foundations of Software Technology and Theoretical Computer Science, Shyamasundar, L. Ed., Lecture Notes in Computer Science 652, Springer-Verlag 1992, 217-228.
[M00] D. Monniaux. Abstract Interpretation of Probabilistic Semantics. Proceedings of SAS'00, Lecture Notes in Computer Science 1824, 2000, 322-339.
[MS90] K. Marriott, H. Sondergaard. Abstract interpretation of logic programs: the Denotational Approach. Proc. Fifth Italian Conference on Logic Programming, 1990, 399-425.
[NNH02] F. Nielson, H.R. Nielson, R.R. Hansen. Validating firewalls using flow logics. Theoretical Computer Science, 283(2), 2002, 381-418.
[PS02] F. Pottier, V. Simonet. Information flow inference for ML. Proc. ACM POPL'02, 2002, 319-330.
[S00] F. Scozzari. Abstract domains for sharing analysis by optimal semantics. Proc. SAS 00, Lecture Notes in Computer Science 1824, 2000, 397-412.
[SM03] A. Sabelfeld, A.C. Myers. Language-based Information-flow security. IEEE Journal on Selected Areas in Communications, 21(1), 2003, 5-19.
[SV02a] A. Santone, G. Vaglini. A Tableau-based Procedure for Model Checking Programs. Proc. Annual International Computer Software and Applications Conference, 2002, 723-728.
[SV02b] A. Santone, G. Vaglini. Local Model checking of Java Bytecode. Proc SEKE 02, 2002, 383-389.
[VSI96] D. Volpano, G. Smith, C. Irvine. A sound type system for secure flow analysis. Journal of Computer Security, 4(3), 1996, 167-187.
L'attivita di ricerca dell'unita' di Pisa si svolgera' all'interno dei seguenti Workpackage: Workpackage WP1. Analisi statica Task PI1.1 Analisi statica del calcolo degli ambienti In questo ambito intendiamo utilizzare l'interpretazione astratta per studiare le relazioni tra le analisi di controllo del flusso ed i sistemi di tipo sviluppate per il calcolo degli ambienti. Ci interessa confontare i due approcci in termini di precisione, di potere espressivo, ed anche di confrontare i corrispondenti algoritmi. In particolare siamo interessati alla loro applicazione per la verifica di sistemi aperti, e quindi terremo conto in questa valutazione della classe di contesti esterni rispetto ai quali e' stata provata la proprieta'. Inoltre intendiamo prendere in considerazione un approccio molto diffuso nell'ambito della CFA, che consiste nell'analizzare il sistema non in isolamento ma mettendolo in parallelo con un processo, detto hardest attacker, che simula una certa classe di contesti esterni,. Determinare l'hardest attacker che rappresenta l'insieme dei contesti ben-tipati, puo' essere utile per integrare le due tecniche, ombinando la composizionalita' del sistema di tipo, utile per trattare i contesti, con la precisione della CFA. Infine prevediamo, durante il secondo anno del progetto, di estendere l'approccio ad altre proprieta', ovvero ad altri sistemi di tipo, o ad altri linguaggi per la mobilita'. Task PI1.2 Analisi statica di un calcolo concorrente orientato ad oggetti. Intendiamo applicare l'interpretazione astratta per individuare proprieta' di programmi scritti in un calcolo concorrente orientato ad oggetti. Le proprieta' dimostrate possono essere utilizzate come guida alla costruzione di strumenti di analisi per linguaggi reali orientati agli oggetti con caratteristiche di concorrenza (come Java). Lo studio iniziera' con lo stabilire le caratteristiche che il calcolo deve avere per catturare gli aspetti di interesse del linguaggio reale. Dovra' poi essere individuata la semantica concreta e astratta del calcolo e infine dovranno essere definiti strumenti di analisi sulla base dell'interpretazione astratta. Quello che vogliamo studiare sono le relazioni tra tali strumenti e quelli analoghi sviluppati sulla base di sistemi di tipi. Task PI1.3 Analisi statica di linguaggi dichiarativi. Il primo passo per qualunqe analisi di linguaggi logici basata sull'interpretazione astratta e' la scelta di una semantica collecting appropriata, partendo da una semantica standard non-collecting. Nel campo della interpretazione astratta di linguaggi logici, ci sono essenzialmente due maniere differenti di costruire una semantica collecting: in modo goal-dependent e goal-independent. Poiche' la semantica goal-dependent soffre di perdita di precisione, molte analisi sono svolte sulla base di una semantica collecting goal-independet. Comunque, mentre alcuni domini astratti traggono effettivamente beneficio da una semantica goal-independent( quelli per le proprieta' chiuse per anti-istanza), esattamente l'opposto vale per domini chiusi per istanza, e nulla puo' essere detto per il caso generale. Alcune ricerche sono state condotte nel tentativo di unificare entrambe gli stili semantici, e si e' ottenuta una nuova semantica che calcolo contemporaneamente in maniera goal-dependent e goal-independent, migliorando ognuna delle due analisi con il risultato dell'altra. Sebbene questo possa anche essere efficace dal punto di vista della precisione dell'analisi, la soluzione non e' adeguata dal punto di vista computazionale. Pertanto, stiamo cercando una nuova semantica che sia costruita da zero per essere piu' precisa sia di quella goal-dependent che di quella goal-independent, per tutti i domini astratti. Il vantaggio di questa ricerca sarebbe la disponibilita' di una semantica unica adatta a tutti i tipi di analisi di linguaggi lgici. Pensiamo inoltre che essa porterebbe a una comprensione piu' profonda della maniera in cui i domini astratti sono costruiti, specialmente della maniera in cui essi posso essere decomposti in due componenti, chiusi per istanze ed anti-istanze rispettivamente. Una volta fissata la semantica collecting, abbiamo in programma lo studio di algoritmi per l'unificazione astratta di sostituzioni e vincoli. In effetti, a dispetto della grande quantita' di lavori recentemente prodotti su questo argomento, la maggior parte degli algoritmi di unificazione astratta non sono ottimali. Questo conduce a una significativa perdita di precisione nei risultati finali dell'analisi. Vogliamo sviluppare uno schema generale con il quale derivare algoritmi di unificazione astratta che siano ottimali, ovvero piu' precisi possibile, rispetto al dominio astratto di interesse. In questo contesto, siamo particolarmente interessati ai domini astratti per proprietà di analisi e sharing, utili per la parallelizzazione automatica di programmi logici (con vincoli). Pensiamo inoltre che il matching astratto possa essere applicato in altri campi, come la riscrittura di termini (astratta) e la semantica dei linguaggi funzionali, e che molti risultati concernenti l'ottimalità della unificazione astratta possano essere riutilizzati su questi domini. Piu' in particolare, pensiamo di studiare la relazione tra vari domini per l'analisi di intervalli, dal punto di vista della precisione. Pensiamo che le tecniche sviluppate per i lingaggi dichiarativi riguardanti ottimalita' e completezza degli operatori astratti possano essere applicati pure alla analisi degli intervalli. Questo potrebbe portare a nuovi domini con un migliore rapporto costi/benefìci. Questa ricerca verra' svolta in collaborazione con l'unita' di Bologna. Task PI1.4 Interpretazione astratta e sistemi di tipi. Algoritmi per l'inferenza di tipo possono essere sviluppati in modo sistematico come interpretazioni astratte di una. Intendiamo affrontare il problema della derivazione sistematica di un dominio astratto per l'inferenza di tipi monomorfa in lambda-calcolo L'obiettivo principale che si intende perseguire e' quello di sviluppare tecniche per la trasformazione sistematica di un dominio di tipi pensato per il type checking in un dominio adatto all'inferenza. Il dominio utilizzato nel type checking e' di solito esattamente la proprieta' che si vuole osservare, mentre una inferenza precisa richiede un dominio piu' complesso. L'idea e' quella di provare ad utilizzare alcuni degli operatori di raffinamento noti, che hanno proprio la caratteristica di derivare domini piu' concreti e di migliorare la precisione. In particolare, tenteremo di ricostruire la trasformazione del semplice dominio di monotipi con variabili (rappresentati con termini di Herbrand) nel dominio astratto utilizzato nell'algoritmo di inferenza di tipi di ML, in cui compaiono oltre ai termini anche i vincoli. La ricostruzione avverra' utilizzando una opportuna combinazione di operatori di raffinamento noti. La possibilita' di disporre di tecniche che permettano di passare con facilita' dalle regole di type checking a quelle di type inference e' importante per l'analisi di proprieta' (tra le quali quelle legate alla sicurezza) di calcoli orientati alla concorrenza ed alla mobilit‡, dove le proprieta' interessanti sono spesso espresse mediante regole di type checking. Nel primo anno, verra' sviluppata la trasformazione, derivando il dominio astratto e le corrispondenti operazioni astratte ottime. Nel secondo anno, si definira' l'analizzatore come interprete astratto, fornendone anche una implementazione e confrontandolo con l'algoritmo di ML. Si valutera' infine la possibilita' di applicare trasformazioni simili a sistemi di tipi definiti per calcoli mobili. Task PI1.5 Interpretazione astratta probabilistica. Le tecniche basate sull'interpretazione astratta probabilistica risultano particolarmente appropriate per la costruzione di analisi statiche di proprieta' "approssimate". La considerazione di proprieta' approssimate piuttosto che assolute corrisponde a stabilirne la validita' con un certo margine di errore piuttosto che in termini di una relazione booleana. Questo approccio e' significativo in quanto permette in generale di ottenere delle analisi piu' realistiche. Ad esempio una proprieta' di sicurezza come la non interferenza non e' soddisfatta da nessun sistema reale nella sua formulazione assoluta. Ci proponiamo di stabilire la corrispondenza (o piu' precisamente la dualita') tra le tecniche di analisi per queste proprieta' approssimate finora sviluppate e analisi basate su sistemi di tipo non-standard. A questo scopo sara' utile considerare tale relazione come un caso particolare della relazione tra semantica denotazionale e assiomatica. Workpackage WP2. Sicurezza Task PI2.1 Proprieta' di sicurezza in linguaggi orientati ad oggetti. La nostra intenzione e' di definire una interpretazione astratta capace di verificare il flusso di informazione sicuro nei lingaggi con oggetti. Si rende necessaria una definizione formale del flusso di informazione sicuro, nel caso in cui gli oggetti possano essere creati e distrutti dinamicamente. Normalmente, la proprieta' del flusso di informazione sicuro viene definita sfruttando la nozione di "non interferenza". La non interferenza classica, nel contesto della teoria del flusso di informazione, richiede la definizione di una relazione tra gli stati iniziali e finali di due esecuzioni dello stesso programma. In questo caso, la definizione della relazione risulta complicata dal fatto che gli stati iniziali possono differire nel numero e nel tipo degli oggetti che li compongono. L'interpretazione astratta dovrebbe essere in grado di cogliere il flusso di informazione, sia esplicito che implicito, tra gli oggetti manipolati dal programma analizzato. Poiche' gli oggetti sono creati dinamicamente, sono potenzialmente infiniti. Ogni interpretazione astratta finita dovra' far coincidere piu' oggetti concreti in una stessa astrazione. Quindi, l'astrazione potrebbe introdurre dei falsi flussi di informazione tra oggetti concreti che, altrimenti, sarebbero scorrelati. La nostra intenzione e' di studiare delle intrepretazioni astratte che cerchino di ridurre il numero di falsi allarmi nell'analisi dei programmi. Poiche' gli oggetti vengono normalmente allocati a tempo di esecuzione in uno heap dovranno essere definiti dei domini astratti per la struttura dati dinamica rappresentata dallo heap. La nostra intenzione e' di studiare e, eventualmente, di estendere, gli approcci basati sui token. La segretezza dei dati memorizzati negli oggetti e i flussi di informazione permessi tra gli oggetti stessi sara' modellata usando il classico modello a "reticolo di livelli di sicurezza". La nostra intenzione e' di usare una collecting semantics per tracciare le dipendenze tra gli oggetti. Verranno studiate tecninche di "widening" per garantire la finitezza del calcolo dei punti fissi, anche in presenza di invocazioni di metodi ricorsive. Abbiamo intenzione di scegliere il bytecode di Java come un caso di studio per le tecniche svilupptate nella ricerca teorica. Quindi, abbiamo intenzione di sviluppare uno strumento automantico che controlli la sicurezza del flusso delle informazioni nelle applet Java. Infine, sempre all'interno del linguaggio Java bytecode, vogliamo riformulare il verificatore come interpretazione astratta e vogliamo mostrare come l'interpretazione astratta consenta di rilevare una classe di programmi sicuri piu' grande rispetto a quella individuata dalle attuali implementazioni. Questa ricerca verra' svolta in collaborazione con l'unita' di Bologna. Task PI2.2 Confinamento probabilistico. Un'area dove la probabilita' ha un ruolo particolarmente importante per l'analisi e' quella della sicurezza dei sistemi informatici. Molto spesso e' poco realistico richiedere la sicurezza assoluta di un sistema, mentre sembra piu' ragionevole porsi domande del tipo: quale livello di sicurezza si puo' ottenere dato un certo investimento per la protezione del sistema? L'analisi in questo caso e' piu' un'analisi di rischio che una validazione della sicurezza assoluta del sistema. Abbiamo studiato il problema di quantificare il livello di confinamento di sistemi concorrenti sulla base di un'analisi probabilistica del loro comportamento. L'obiettivo che ci poniamo e' di estendere questo approccio ai sistemi distribuiti. Ad esempio considereremo il problema di come l'informazione si propaga in un sistema distribuito concentrandoci soprattutto sull'aspetto quantitativo di stabilire il numero di passi necessari perche' un dato sia trasmesso da un nodo ad un altro. Se pensiamo all'informazione trasmessa come ad un virus, allora questo tipo di analisi permette di stabilire con quale rapidita' il virus si propaga sulla rete. Per sviluppare questo tipo di analisi intendiamo utilizzare le tecniche di interpretazione astratta probabilistica. Sara' pertanto necessario sviluppare una semantica distribuita basata su operatori lineari su opportuni domini probabilistici (spazi lineari o algebre di operatori). L'utilizzo del prodotto tensore nella definizione di tale semantica sembra particolarmente promettente sia per le proprieta' dell'operazione stessa che per l'interazione con le tecniche di interpretazione astratta probabilistica permettendo un'approccio composizionale all'analisi di reti distribuite. Task PI2.3 Non interferenza temporizzata. Una classe di attacchi a componenti in una rete di calcolatori e' basata sull'uso del tempo. Ad esempio il tempo di esecuzione puo' essere utilizzato per scoprire una chiave segreta. In altri casi il tempo puo' essere usato in attacchi diretti: se la frequenza delle intrusioni e' abbastanza alta, il funzionamento del sistema attaccato puo' essere compromesso. Allo scopo di studiare la robustezza di un sistema rispetto alla frequenza degli attacchi, lo abbiamo modellato mediante automi temporizzati e abbiamo definito il concetto di non interferenza temporizzata. La non interferenza temporizzata include il concetto di tempo e puo' essere utilizzata per scoprire l'interferenza dovuta alla frequenza di alcune azioni. Sfortunatamente la proprieta' di non interferenza temporizzata, in molti casi, e' indecidibile. Vogliamo sfruttare l'interpretazione astratta per approssimare le proprieta' e per costruire strumenti di analisi. Questa ricerca verra' svolta in collaborazione con l'unita' di Bologna. Workpackage WP3. Testing e debugging. Task PI3.1 Il testing e' una tecnica indispensabile per la certificazione di sistemi reattivi, malgrado non assicuri in generale la correttezza dell'analisi. L'interpretazione astratta e' stata utilizzata per superare alcuni dei problemi che si presentano con il testing, come per esempio la terminazione dell'esecuzione di un programma entro un dato intervallo di tempo. Ci proponiamo di usare l'interpretazione astratta probabilistica per misurare l'errore commesso nella valutazione dell'affidabilita' dei sistemi mediante il testing Monte-Carlo. Il problema che affrontiamo e' quello di determinare la probabilita' che la risposta di un sistema reattivo cada all'interno di un certo insieme di possibili output, cioe' che superi un certo test. Poiche' il testing Monte-Carlo di un sistema reale non e' sempre fattibile, I test possono essere effettuati su un sistema astratto. Questo introduce un'ulteriore approssimazione di cui si deve tener conto nella stima dell'errore del testing. Il problema e' di stabilire la "distanza" tra il sistema astratto e quello concreto.