JP AbScript


Introdurre progetto....+++ Work in progress

 Click here to return to: Isabella Mastroeni's Home Page;

 Analisi statica di linguaggi dinamici

I linguaggi dinamici, come Ruby, Pyton, PHP e Javascript diventano sempre piu'popolari grazie alla rapidita' con cui si progettano producono prototipi dall'idea al prodotto finale. Questi linguaggi sono caratterizzati da una strutture altamente dinamica, che supera il varifica statica dei tipi. Questa caratteristica ha delle ragioni profonde nel modo e nell'area in cui questi linguaggi sono usati, che consiste principalmente nella progettazione di interfacce web e nella manipolazione di stringhe. Infatti, i linguaggi fortemente tipati non sono adeguati allo sviluppo di applicazioni orientate ai dati, come l'estrazione e il processo di big data. Inoltre, i linguaggi dinamici permettono la scrittura di codice automodificante, ovvero di programmi che possono cambiare la loro struttura interna a tempo di esecuzione. Questo e' possibile grazie alla presenza di primitive string-to-code come eval().
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.