OBIETTIVI DEL PROGETTO
Una dei principali problemi che è necessario affrontare quando si sviluppa del
software è quello di difendere le idee elaborate internamente che spesso sono
frutto di notevoli investimenti. Il software è un modo di espressione della
mente umana, per questo per la sua protezione si è pensato di usare strumenti
noti per la tutela delle opere dell'ingegno come il copyright e il brevetto. Il
copyright tutela un programma per il modo in cui è scritto, per cui se viene
riscritto un programma che esegue la stessa funzione, seguendo le stesse fasi,
ma con una “scrittura” diversa non si ha violazione del copyright. Quindi il
copyright permette di operare il reverse enginnering del software, ovvero
ammette che un utente maleintenzionato possa riutilizzare l'algoritmo (metodo
generale per la soluzione in un numero finito di passi di un problema) da cui è
stato poi codificato il programma.
Per proteggere l'idea (algoritmo) che sta alla base di un programma si ricorre
alla brevettazione del software. L'European Patent Convention (EPC) del 1973
dichiara all'Articlo 52 che non è possibile brevettare i programmi, quindi la
brevettazione del software risulta essere una strada non percorribile per la
protezione della proprietà intellettuale del codice. Questo rende necessario lo
sviluppo di nuove tecniche per tutelare il software. Negli ultimi anni si è
cominciato ad affrontare il problema della protezione della proprietà
intelletuale del software anche da un punto di vista tecnologico. A questo scopo
si sono studiate e sviluppate metodologie in grado di prevenire il reverse
engineering e la violazione del copyright del software. Queste tecnologie sono
conosciute come software watermarking e code obfuscation. Queste rappresentano
esattamente le più promettenti tecniche di tutela della proprietà intellettuale
del software, e sono entrambe di recente nascita. Software watermarking e code
obfuscation sono al momento sviluppate come prototipi solo in ambiente
accademico, mentre lavori tecnici e sperimentali si trovano in letteratura a
partire dal 2000. In generale software watermarking e code obfuscation prevedono
la trasformazione del programma originale in modo tale da tutelarne la proprietà
intellettuale. Più in particolare il software watermarking prevede l'inserimento
di
una firma all'interno del programma, in modo tale che sia sempre possibile
identificare il proprietario del codice al fine di prevenire la violazione del
copyright. Diverse sono le tecniche di software watermarking esistenti; l'idea
comune è quella di codificare la firma e poi nasconderla all'interno del
programma. La tecnica di code obfuscation ha lo scopo generale di prevenire il
reverse engineering del programma. Offuscare un programma significa trasformarlo
in modo da renderne difficile il reverse engineering, mantenendone però la
funzionalità. Le tecniche di offuscamento possono agire per esempio mascherando
l'originale flusso di controllo del programma, rendendo così più complesso
l'estrazione dell'algoritmo.
Questo progetto ha l'obiettivo di sviluppare un prototipo per la trasformazione
automatica del codice, per effettuare il watermarking e l'offuscamento di codice
di programmi scritti in linguaggi ad oggetti (Java, C++).
In particolare il prototipo presenterà:
1. Interfaccia per la definizione del livello di sicurezza legato al grado di
offuscamento e all'inserimento di firme. A seconda del tipo e del grado di
offuscamento apportato al software è possibile definire quali sono gli attacchi
(utenti maleintenzionati) da cui il programma offuscato è tutelato. Allo stesso
modo è possibile identificare gli attacchi che sono sicuramente respinti dalle
diverse tipologie di software watermarking.
2. Modulo per la trasformazione del software. Verranno messe a disposizione
dell'utente diverse metodologie di offuscamento del codice e di software watermarking.
Tecniche di offuscamento del codice:
– Offuscamento di controllo: cerca di modificare l'originale flusso di controllo
del programma (es:inserimento di predicati opachi, loop unrolling,...)
– Offuscamento dei dati: opera sulla struttura dati usata dal programma (es. :
alterando l'ordine di memorizzazione dei dati, il raggruppamento dei dati,
l'interpretazione dei dati,...)
– Offuscamento di layout: agisce sulle informazioni del programma che non sono
necessarie alla sua esecuzione (es. : rimozione dei commenti, rinomina degli
identificatori,...).
Tecniche di software watermarking:
– Watermarking statico: nasconde la firma nei dati o nel codice del programma.
Nel caso dei dati si può introdurre una variabile che contiene una stringa di
copyright. Nel caso del codice è possibile nascondere la firma usando
rindondanza nel codice, riordinamento di comandi indipendenti, ....
– Watermarking dinamico: in questo caso la firma viene nascosta all'interno di
uno stato di esecuzione del programma. Ad esempio il watermarking dinamico può
inserito nel programma in modo tale che l'esecuzione del programma restituisca
il messaggio di copyright quando viene sollecitata da particolari valori di
input.
– Watermarking astratto: la firma viene inserita all'interno della semantica del
programma in modo tale che possa essere estratta solo attraverso una particolare
analisi statica dello stesso.
3. Interfaccia grafica sulla struttura del programma. Si vuole fornire una
rappresentazione grafica dei programmi, prima e dopo l'applicazione delle
trasformazioni di offuscamento del codice e di software watermarking, al fine di
dare anche un idea intuitiva all'utente delle modifiche che stanno avvenendo nel
codice. I programmi verranno rappresentati graficamente tramite i rispettivi
call-graph.
4. Pacchetto di valutazione delle prestazioni. L'offuscamento del codice e
l'inserimento di firma nel programma causa in generale una degradazione delle
prestazioni originali del programma. Questo pacchetto permette quindi di tenere
monitorata la perdita di prestazioni in modo che l'utente possa regolare la
trasformazione del programma tenendo conto anche di questo importante parametro.