



Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Appunti di Sicurezza Informatica presi a lezione
Tipologia: Appunti
1 / 7
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!




3 obiettivi per la sicurezza:
Attacco atto intenzionale con il quale un attaccante cerca di eludere i servizi di sicurezza di un sistema. Si distinguono per 3 caratteristiche:
Attacchi che sfruttano convalida degli input incompleta Avviene quando manca un controllo sui parametri passati dall’utente (esempio web form). Se effettuassi solo controlli lato client non andrebbe bene perché i valori passati possono essere modificati dall’utente malevolo (GET tramite url, POST tramite strumenti di sviluppo web), perciò è bene effettuare controlli anche lato server. Attacchi che sfruttano tale metodo:
Prevenzione:
Buffer Overflow – Convalida input incompleta Buffer Overflow: scrittura oltre i limiti di uno spazio di memoria precedentemente dichiarato (Buffer). Tramite questa tecnica possiamo sovrascrivere ogni area di memoria raggiungibile dal buffer, come per esempio l’indirizzo di ritorno (Stack). Solitamente si inietta lo shellcode, cioè un piccolo programma che utilizza la chiamata di sistema execve per sostituire il processo corrente con uno nuovo, in questo caso la shell contornandolo da istruzioni NOP (istruzioni assembler che non fanno nulla). Tutto ciò vale per lo Stack ma è possibile sfruttare anche Heap Buffer Overflow. Prevenzione: Come protezione a questo attacco viene introdotto dal compilatore un valore (Canary Value) generato in modo random inserito dopo il Base Pointer e storato “lontano” dallo stack così, all’uscita dalla funzione viene controllato che il CV inserito dopo il BP sia uguale a quello storato, se così non fosse viene terminato il programma. Il compilatore GCC ha due modalità, o inserisce il CV in tutte le funzioni oppure solo in quelle che possono presentare una vulnerabilità. Nei moderni SO viene implementata la contromisura Address Space Layout Randomization (ASLR) che consiste nel rendere più difficile la scrittura di exploit cambiando gli indirizzi di memoria del virtual address da una esecuzione ad un'altra. Il sistema operativo può inoltre distinguere le aree di memoria contente codice da eseguire da aree contententi dati (Executable Space Protection) e spesso richiede il supporto sia da parte del SO, sia da parte dell’hardware. Questo sistema potrebbe però essere violato perché alcuni linguaggi fanno uso di compilatori Just-intime (JIT) che interpretano uno script di input e generano del codice in linguaggio macchina ed esistono attacchi detti JIT spaying (sfruttano JIT per buffer overflow).
Null Pointer Dereference I SO assegnano ad ogni processo uno spazio di memoria virtuale in cui può operare ogni processo. Questi indirizzi non corrispondono con l’indirizzo fisico della memoria ed ogni processo può scegliere i propri indirizzi di memoria virtuali tramite la funzione mmap. Se assegnassimo la pagina 0 all’interno dello spazio di indirizzo di un processo, l’indirizzo 0 (NULL) diventa un indirizzo valido e l’attaccante potrebbe sfruttarlo inserendo una chiamata ad una funzione da lui creata all’indirizzo NULL. Tuttavia questo tipo di attacco oggi è molto difficile da effettuare perché i SO operativi hanno adottato diverse contromisure e l’unica via possibile è sfruttare una vulnerabilità del SO (per esempio i recenti kernel Linux indicano l’indirizzo minimo che si può rimappare).
Java Security Model Java garantisce gli accessi alle risorse del sistema utilizzando delle Policy (politiche di sicurezza) configurabili dall’utente, in modo tale che quanto il codice viene caricato, gli vengono assegnati dei permessi sulla base delle policy attive in quel momento. Se un permesso non è esplicitamente garantito ad un certo codice, tale codice non può accedere alla risorsa controllata da quel permesso. Policy -> serve a determinare se il codice può accedere ad una certa risorsa in base a 3 criteri:
Esiste un insieme di policy di default
Crittografia Disciplina che studia le tecniche per codificare/decodificare messaggi in modo da garantire la privacy della comunicazione. Solo chi possiede la chiave può risalire al testo originale a partire dal messaggio cifrato. Un sistema crittografico consiste in 5 parti: