Progetti e tesi
Sono possibili tesi e progetti inerenti i seguenti temi: Analisi di vulnerabilita', Analisi statica di linguaggi dinamici, Codice automodificante.
Analisi di vulnerabilita'
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