Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Sicurezza Informatica: Obiettivi, Attacchi e Difese, Appunti di Sicurezza Dei Sistemi Informativi

Appunti di Sicurezza Informatica presi a lezione

Tipologia: Appunti

2016/2017

In vendita dal 22/07/2017

BDavide
BDavide 🇮🇹

9 documenti

1 / 7

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
3 obiettivi per la sicurezza:
confidenzialità -> assicurare la privatezza e riservatezza delle informazioni
integrità -> assicurare la non modificabilità da parte di soggetti non autorizzati e quindi fi
assicurarne l'attendibilità (firma digitale)
disponibilità -> assicurare la possibilità di usare risorse agli utenti autorizzati (attacchi DoS – Denial
of Service)
Difesa:
crittografia
software -> controlli interni al programma, controlli nel sistema/rete, antivirus, controlli e standard
di qualità in fase di sviluppo
hardware -> smartcard crittografate, firewall, controlli circuitali
policy -> addestramento utenti e amministratori, regoli di attribuzione password
Ostacoli:
usabilità -> troppa sicurezza può essere d’intralcio nella vita quotidiana degli utenti
progetto tardivo -> si considerano tali problemi solamente quando sorgono
compromesso benifici-costi -> la sicurezza costa e non sempre stiamo nel budget
Attacco
atto intenzionale con il quale un attaccante cerca di eludere i servizi di sicurezza di un sistema.
Si distinguono per 3 caratteristiche:
tipologia -> attivo (altera il sistema) o passivo (acquisisce informazioni)
point of initiation -> interno (l’attaccante ha già accesso alle risorse ma vuole usarle in un modo non
consono alle policy a lui attribuite) o esterno (l’attaccante risiede fuori dal perimetro di sicurezza del
sistema)
method of delivery -> diretto (attacca il sistema target direttamente) o indiretto (utilizza un terzo
sistema per accedere al target o per amplificare l’attacco)
Esistono diverse organizzazioni che si occupano di collezionare e riportare le vulnerabilità:
Common Weakness Enumeration (CWE) – elenco formale di tipologie di falle di sicurezza destinato
a sviluppatori ed esperti di sicurezza con lo scopo di fornire un dizionario comune per descrivere le
tipologie di falle di sicurezza e misurare le potenzialità dei sw di analisi/verifica.
pf3
pf4
pf5

Anteprima parziale del testo

Scarica Sicurezza Informatica: Obiettivi, Attacchi e Difese e più Appunti in PDF di Sicurezza Dei Sistemi Informativi solo su Docsity!

3 obiettivi per la sicurezza:

  • (^) confidenzialità -> assicurare la privatezza e riservatezza delle informazioni
  • integrità -> assicurare la non modificabilità da parte di soggetti non autorizzati e quindi fi assicurarne l'attendibilità (firma digitale)
  • disponibilità -> assicurare la possibilità di usare risorse agli utenti autorizzati (attacchi DoS – Denial of Service) Difesa:
  • crittografia
  • software -> controlli interni al programma, controlli nel sistema/rete, antivirus, controlli e standard di qualità in fase di sviluppo
  • hardware -> smartcard crittografate, firewall, controlli circuitali
  • (^) policy -> addestramento utenti e amministratori, regoli di attribuzione password Ostacoli:
  • usabilità -> troppa sicurezza può essere d’intralcio nella vita quotidiana degli utenti
  • progetto tardivo -> si considerano tali problemi solamente quando sorgono
  • compromesso benifici-costi -> la sicurezza costa e non sempre stiamo nel budget

Attacco atto intenzionale con il quale un attaccante cerca di eludere i servizi di sicurezza di un sistema. Si distinguono per 3 caratteristiche:

  • tipologia -> attivo (altera il sistema) o passivo (acquisisce informazioni)
  • (^) point of initiation -> interno (l’attaccante ha già accesso alle risorse ma vuole usarle in un modo non consono alle policy a lui attribuite) o esterno (l’attaccante risiede fuori dal perimetro di sicurezza del sistema)
  • method of delivery -> diretto (attacca il sistema target direttamente) o indiretto (utilizza un terzo sistema per accedere al target o per amplificare l’attacco) Esistono diverse organizzazioni che si occupano di collezionare e riportare le vulnerabilità: Common Weakness Enumeration (CWE) – elenco formale di tipologie di falle di sicurezza destinato a sviluppatori ed esperti di sicurezza con lo scopo di fornire un dizionario comune per descrivere le tipologie di falle di sicurezza e misurare le potenzialità dei sw di analisi/verifica.

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:

  • (^) XSS -> esecuzione di codice malevolo (scripting – js) all’interno del browser di un utente
    • Furto di coockie
    • Keylogging
    • Phishing (creare fake login)
  • SQL injection -> inserimento nel sistema di una query SQL attraverso l’input utente
    • (^) Leggere/modificare dati sensibili
    • Eseguire operazioni di amministrazione del database
    • Recuperare il contenuto di un file presente del filesystem del DBMS
  • Heartbleed -> richiedere una risorsa ma specificare come lunghezza di risposta una dimensione maggiore in modo da ottenere altre informazioni rispetto alla sola risorsa richiesta XSS 3 tipologie:
  • Persistent -> codice malevolo risiede nel DB del sito web •.1. L’attaccane utilizza una form del sito per inserire codice malevolo in una pagina web •.2. La vittima richiede una pagina dal sito •.3. Il sito web (ignaro) include nella pagina la stringa inserita dall’attaccante ed invia la risposta •.4. Il browser della vittima esegue lo script contenente anche il codice malevolo
  • Reflected -> codice malevolo risiede nella richiesta HTTP della vittima •.5. L’attaccante crea un URL contenete una stringa malevola e lo invia alla vittima •.6. La vittima clicca sull’URL •.7. Il sito web invia la risposta includendo la stringa malevola •.8. Il browser della vittima esegue il codice malevolo
  • DOM-based -> vulnerabilità risiede del codice eseguito nel client, non nel server, sfruttando la capacità di una pagina web di creare il contenuto a runtime •.9. L’attaccante crea un URL contente una stringa malevola e lo invia alla vittima •.10. (^) La vittima clicca sull’url •.11. Il sito web riceve la richiesta ed invia la risposta senza includere il codice malevolo •.12. Essendo la pagina web creata dinamicamente ■ Viene messa all’interno del tag la stringa di ricerca

Prevenzione:

  • (^) Metodi
    • Codifica -> trasformazione degli input (escape) (es: ‘>’ diventa ‘>’)
    • Convalida -> classificare input validi da non validi
  • Configurati in base a
    • Contesto -> considerare dove potrebbe essere immesso il codice malevolo
    • (^) Metodo di prevenzione -> momento in cui l’applicazione può effettuare i controlli ■ Inbound: ricezione dell’input ■ Outbound: invio dell’input all’utente
    • Locazione del controllo ■ Lato server: protegge da persistent e reflected ■ (^) Lato client: protegge da DOM-based

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:

  • Codebase -> l’url in cui si trovano i .class che stiamo caricando
  • Signer -> il/i firmatari cioè lo sviluppatore che ha firmato il jar
  • Principal -> il ruolo assegnato a runtime al codice in esecuzione (solitamente ambienti enterprise) Security Policy File -> files che contengono le policy specificate dall’utente scritti in codifica ASCII.

Esiste un insieme di policy di default

  • All’interno del policy file ci sono una o più entry
  • Le policy entry seguono una sintassi specifica e sono modificabili tramite il comando policytool oppure tramite text editor I controlli sui permessi a runtime vengono effettuati dal Security Manager attraverso l’AccessController controllando l’intero stack per verificare se l’accesso è consentito. È necessario abilitare il SecurityManager nelle applicazioni java per sistema desktop tramite console o all’interno del codice in quanto sono eseguite senza SM, mentre per quanto riguarda le applet eseguite nel browser, non c’è bisogno in quanto sono eseguite da una JVM configurata con SM.

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:

  • Insieme di messaggi in chiaro (P)
  • (^) Insieme di chiavi per codifica/decodifica (K)
  • Funzione di codifica K × P → C
  • Insieme di messaggi cifrati (C)
  • Funzione di decodifica K × C → P Crittografia = Schemi, metodi, algoritmi per la codifica sicura dei messaggi Crittoanalisi = Studio di messaggi crittati con l’obiettivo di “violare la crittografia” Algoritmi crittografici 3 classi:
  • Algoritmi simmetrici a chiave segreta
  • Algoritmi asimmetrici a chiave pubblica
  • (^) Algoritmi di hashing (o message digesting) Sistemi simmetrici a chiave segreta Si usa la stesa chiave k sia per codificare che decodificare, quindi i due soggetti devono conoscere la chiave k.