Summaries
University notes in Markdown format from Obsidian.
Symbolic Execution (Esecuzione Simbolica)
download Download MDL'esecuzione simbolica è una tecnica di analisi che utilizza variabili simboliche anziché valori concreti per rappresentare gli input di un programma. Questo permette di esplorare sistematicamente i diversi percorsi di esecuzione (path) per identificare bug o vulnerabilità senza testare manualmente ogni caso.
1. Obiettivi e Funzionamento
L'obiettivo è verificare il comportamento del software su un insieme potenzialmente infinito di input.
- Esempio: Lo strumento SAGE di Microsoft genera sequenze di input che dimostrano vulnerabilità reali.
- Problemi rilevabili: Crash, dereferenziazione di puntatori null, errori di indice (out-of-bounds), double free, variabili non inizializzate, overflow (heap/stack).
Esempio logico
Data una funzione foo(x, y):
- Inizializza
t = 0. - Se
x > yallorat = x, altrimentit = y. - Se
t < xesegui blocco[A].
L'esecuzione simbolica analizza se esiste un input simbolico tale per cui il blocco [A] sia raggiungibile. In questo caso, analizzando i vincoli:
- Percorso 1:
x > yANDx < x(Impossibile). - Percorso 2:
x <= yANDy < x(Contraddizione, dato chex <= yey < xnon possono essere entrambi veri). - Risultato: Il blocco
[A]è irraggiungibile.
2. Confronto: Dinamico vs Simbolico
- Approccio Dinamico (Fuzzing): Analizza risultati su input concreti. È utile per trovare bug ma non garantisce l'assenza di vulnerabilità (non è esaustivo).
- Analisi Statica (Simbolica): Considera tutti i possibili input. Può individuare bug e, in certi casi, dimostrare l'assenza di determinate classi di errori.
3. SMT Solvers
Per risolvere meccanicamente i vincoli logici si utilizzano gli SMT (Satisfiability Modulo Theories) solvers.
- Input: Una teoria o formula logica.
- Output: Soluzione trovata, "Insolvibile" o "I don't know" (poiché molti problemi SMT sono NP-completi).
- Domini: Numeri reali, interi, liste, formule non interpretate.
Funzionamento dei SAT/SMT Solvers
Gli SMT sono costruiti sopra i risolutori SAT (che lavorano su variabili booleane):
- La formula viene convertita in CNF (congiunzione di clausole).
- Il risolutore SAT assegna valori di verità alle variabili.
- L'SMT verifica se tale assegnamento soddisfa i vincoli specifici della teoria (es. disequazioni lineari).
- Se c'è una contraddizione, l'SMT aggiunge un nuovo vincolo al SAT per evitare quel percorso nelle iterazioni successive (Conflict-Driven Clause Learning).
4. Limitazioni
L'esecuzione simbolica deve affrontare l'esplosione dei percorsi: il numero di path possibili cresce in modo esponenziale rispetto alla complessità del codice.
- Strategie di mitigazione:
- Controllare la path condition ad ogni passo per interrompere percorsi impossibili.
- Evitare di esplorare percorsi simili a quelli già esclusi.
5. Conclusioni
L'analisi simbolica è uno strumento potente per la sicurezza perché permette di esplorare rami di codice difficili da raggiungere con i test tradizionali, fornendo una copertura molto più profonda rispetto al semplice testing dinamico.