Abstract:
L'analisi statica di programmi scritti in più linguaggi di programmazione è impegnativa. Gli analizzatori tradizionali analizzano un singolo linguaggio, o un gruppo di linguaggi simili, per adattare l'analisi alle sue (o loro) caratteristiche. Analisi dell'intera applicazione possono quindi essere eseguite solo da una combinazione di analizzatori. Poiché sono necessarie più analisi, questo non consente all'analisi statica di avere un impatto significativo negli scenari del mondo reale.
Questa tesi descrive LiSA, un framework generico in cui è possibile definire analisi statiche multilinguaggio attraverso l'interpretazione astratta. LiSA è una libreria Java open source che fornisce l'infrastruttura completa necessaria per lo sviluppo di analizzatori statici. LiSA è stata istanziata per due casi d'uso reali. GoLiSA (un analizzatore per Go basato su LiSA) applica analisi di information flow per individuare costrutti non deterministici che influenzano lo stato della blockchain. Invece, PyLiSA (un analizzatore per Python basato su LiSA) fornisce un'astrazione per il software che si occupa di dataframe. Un terzo POC dimostra la capacità di LiSA di analizzare più linguaggi in un'unica analisi attraverso, scoprendo una vulnerabilità IoT che su codice C++ e Java.
Inoltre, questa tesi definisce SARL, un linguaggio che può essere utilizzato per modellare come framework e librerie interagiscono con l'applicazione analizzata, e TARSIS, un'astrazione di stringhe come linguaggi regolari.