Progetti e tesi
Sono possibili tesi e progetti inerenti i seguenti temi: Analisi di vulnerabilita', Analisi statica di linguaggi dinamici, Codice automodificante.
Click here to return to: Isabella Mastroeni's Home Page; Mila Dalla Preda's Home Page.
Analisi di vulnerabilita'
Al giorno d'oggi la difesa dei sistemi informatici e' una grande sfida non solo dal punto di vista scientifico e tecnologico ma anche dal punto di vista sociale. La criminalita' informatica puo' essere vista come un sistema complesso vivace, dinamico e in continuo adattamento al fine di sfruttare nuove vulnerabilita' e nuovi strumenti. I criminali informatici sono sempre stati un passo avanti rispetto alla difesa. Per poter spezzare questo circolo vizioso dovuto alla natura asimmetrica della minaccia e' necessario non lavorare sugli attacchi del passato, ma prevedere le minaccie di domani. Nella pratica corrente della cyber security, la maggior parte delle difese sono reattive mentre gli attaccanti sono proattivi. Il solo modo per costruire difese effettive e' quello di cambiare le regole del gioco, anticipando le mosse degli attaccanti, identificando vulnerabilita' emergenti, e lavorando per rispondere a possibili attacchi prima che questi si verifichino.Guardiamo al problema della difesa analizzando come il sistema interagisce con l'attacco. Questo concetto di interferenza viene modellato nel contesto dell'interpretazione astratta. Il framework della non interfernza astratta [GM04,M13] si basa sull'idea di modellare come diversi componenti di un sistema interferiscono tra loro in modo parametrico su cosa puo' variare e su cosa vogliamo osservare. Questa parametricita' e misurata e modellata mediante interpretazione astratta [CC77]. Con questi strumenti, vogliamo analizzare il problema a diversi livelli di astrazione e con tre obiettivi principali:
Analisi di interferenza tra dati: A questo livello vogliamo capire le vulnerabilita' di flusso di informazione che compromettono la protezione dei dati sensibili o personali, ad esempio i meccanismi di sicurezza per Android si basano fortemente su meccanismi di controllo degli accessi, non offrendo controlli sui possibili flussi di informazione sensibile;
Analisi di interferenza tra programmi: A questo livello vogliamo studiare come l'ambiente interagisce con l'ambiente in modo da capire cosa puo' attivare o inibire un attacco. Quindi vogliamo studiare le vulnerabilita' anche in funzione di come gli attacchi e l'ambiente interagiscono. Quindi vogliamo studiare le tecniche di anti-emulation ma anche le vulnerabilita' che possono essere non solo sfruttate ma anche attivate da agenti malevoli.
Analisi di interferenza tra dati e programmi: A questo livello vogliamo capire come programmi di analisi possono interferire con i dati analizzati. Questo tipo di analisi potrebbe offrire basi tecnologiche per l'uso delle prove dgitali nel contesto legale. In particolare, un primo aspetto importante e' l'integrita' dei dati. L'integrita' riguarda la protezione dallla accidentale o intenzionale manipolazione dei dati. Questo garantirebbe la possibilita' di usare i dati come prove in ambito processuale. Quindi possiamo usare proprieta'di non interferenza astratta per assicurare affidabilita' ed accuratezza di processi automatici di estrazione di prove digitali.
[CC77] P. Cousot, R. Cousot. Abstract Interpretation: A unified Lattice Model for Static Analysis of Programs by Construction or Approximation of Fixpoints. POPL77, ACM Press 1977.
[GM04] R. Giacobazzi, I. Mastroeni: Abstract non-interference: parameterizing non-interference by abstract interpretation. POPL 2004. ACM Press, 2004.
[M13] I. Mastroeni: Abstract interpretation-based
approaches to Security - A Survey on Abstract Non-Interference and its
Challenging Applications. Festschrift for Dave Schmidt 2013:
41-65.
Analisi statica di linguaggi dinamici
Tale natura fortemente dinamica dei linguaggi di scripting rompe
l'assunzione standard che sta alla base dell'analisi di programmi,
ovvero la staticita' della struttura del codice analizzato. Quindi per
tali linguaggi emerge la necessita' non solo di predire l'evoluzione
dei dati ma anche del codice.
La semantica di questi linguaggi e' stata recentemente studiata e
formalizzata per Javascript in
[GMS12,MMT08,BCF14]. Tutti questi linguaggi non
considerano la possibilita' di Javascript di cambiare dinamicamente il
proprio codice. Anche il problema dell'analisi statica di Javascript
e' stato recentemente affrontato, ma anche in questo caso supponendo
che il condice non utilizza la primitiva eval()
[KDK14].Questo necessiterebbe di nuove
metodologie per approssimare il comportamento del codice come una
struttura dati mutevole. Inoltre PHP rappresenta ancora un problema
aperto nel contesto della analisi statica di programmi, sia al livello
semantico che di analisi.
Quindi le problematiche che si
dovrebbero affrontare in questo contesto sono le seguenti:
Studiare problematiche di sicurezza in termini di proprieta' analizzabili e vulnerabilita' comuni nel contesto di apllicazioni web scritte in JavaScript o PHP. In questo contesto e' importante sia capire che tipo di informazioni estraggono analisi esistenti (ad esempio analisi di flusso e di dipendenze), sia capire quali analisi nuove si possono progettare ed implementare per estrarre informazioni di flusso importanti per individuare vulnerabilita' specifiche dei contesti applicativi di questi linguaggi (come ad esempio code injection e XXS attacks). In particolare l'idea e' quella di studiare problemi di confinamento e flusso di informazione mediante taint analisi e noninterferenza mediante interpretazione astratta [GM04,M13];
Studiare il funzionamento di eval(), capire come e' possibile estendere la semantica esistente di JavaScript per coprire anche primitive di automodifica come eval() e capire come adattare tale semantica al linguaggio PHP. In questo caso e' anche fondamentale capire come JavaScript, PHP e altri linguaggi interagiscono tra di loro nel contesto web.
[GMS12] P. Gardner, S. Maffeis, G. D. Smith: Towards a program logic for JavaScript . POPL 2012: 31-44 ACM Prss, 2012.
[MMT08] S. Maffeis, J. C. Mitchell, A. Taly: An Operational Semantics for JavaScript. APLAS 2008: 307-325.
[BCF14] M Bodin, A. Chargueraud, D. Filaretti, P. Gardner, S. Maffeis, D. Naudziuniene, A. Schmitt, G. Smith: A trusted mechanised JavaScript specification. POPL 2014: 87-100. ACM Press 2014.
[KDK14] V. Kashyap, K. Dewey, E. A. Kuefner, J. Wagner, K. Gibbons,
J. Sarracino, B. Wiedermann, B. Harkdekopf: JSAI: Designing a Sound,
Configurable, and Efficient Static Analyzer for JavaScript. CoRR 2014.
Codice automodificante
Questi modelli di codice che si auto-modifica trovano una naturale
applicazione nello sviluppo di nuovi algoritmi per l'identificazione
automatica di codice malevolo che utilizza tecniche
metamorfiche. Questi modelli possono essere utilizzati per
Fare learning di signature astratte di malware a partire da alcuni campioni di varianti metamorfe di malware e quindi usare queste signature per l'identificazione automatica di nuove varianti metamorfe.
Estrarre signature astratta dall'analisi di un campione di malware che si automodifica
Fare learning del motore metamorfo che guida l'evoluzione di un malware metamorfo a partire da alcuni campioni di varianti del malware
I modelli sviluppati, i domini astratti proposti e gli algoritmi che ne derivano devono poi essere testati su malware esistenti per capirne potenzialita' e limiti. I dati sperimentali raccolti servono poi per migliorare il modello usato per l'identificazione automatica di malware al fine aumentare sempre piu' le prestazioni degli anti-virus.
[DGDCT10] M. Dalla Preda, R. Giacobazzi, S. K. Debray, K. Coogan, G. M. Townsend. Modelling Metamorphism by Abstract Interpretation. SAS 2010: 218-235
[GMR09] W. Guizani, J. Y. Marion, D. Reynaud-Plantey: Server-side dynamic code analysis. MALWARE 2009, pages 55-62
[DGLM15] M. Dalla Preda, R. Giacobazzi, A Lakhotia, I. Mastroeni. Abstract Symbolic Automata: Mixed syntactic/semantic similarity analysis of executables. To appear in the 42nd Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL 2015). to appear
[DV14] Loris D'Antoni, Margus Veanes: Minimization of symbolic automata. POPL 2014, pages 541-554