Sicurezza

Da WikiDsy.
Versione del 5 gen 2006 alle 10:16 di 87.0.68.2 (discussione) (Materiale didattico)


Sicurezza, anno 2005/2006

Sicurezza è un corso complementare per la laurea in comunicazione digitale e altri corsi di laurea.

=== Docenti === Danilo Bruschi e-mail: <bruschi [at] dico [dot] unimi [it]>

Orari delle lezioni

Lunedì Mercoledì
17:30-19:30 Aula Alfa 17:30-19:30 Aula Sigma

Le lezioni del lunedì tratteranno la parte teorica del corso e saranno tenute dal prof. Bruschi,mentre le lezioni del mercoledi` tratteranno la parte pratica del corso e saranno tenute dai dott. Cavallaro e Lanzi

Orario di ricevimento dei docenti

Ricevimento su appuntamento:

  • Prof. Bruschi <bruschi [at] dico [dot] unimi [dot] it>
  • Dott. Lanzi <andrew [at] security [dot] dico [dot] unimi [dot] it>
  • Dott. Cavallaro <sullivan [at] security [dot] dico [dot] unimi [dot] it>

Sito del corso

Se andate qui trovate il programma del corso (vedi PDF),le modalità d'esame e quant'altro di necessario.

Materiale didattico

  • Primo libro:
    • Titolo: "Firewall e sicurezza di rete",II Edizione
    • Autori: W.Cheswick,S.Bellouin,A.Rubin
    • Casa Editrice: Edision Wesley
    • Prezzo: 32 €
  • Secondo libro:
    • Titolo: "Computer Security"
    • Autore: D.Gollmann
    • Casa editrice: J.Wiley
    • Lingua: solo inglese
    • prezzo: 50 € scontato, alla CLUED,settore didattico JoY§TiCk

In più ci sarà alro materiale sparso,presentato a lezione. Vi terremo aggiornati ;). Ad ogni modo il prof ribadisce che il primo libro(quello in italiano)tratterà il 70% delle lezioni e che i lrestante 30% deriverà dal secondo e da altro materiale. Non verranno presentate slides alle lezioni di teoria del lunedì,nè messe a disposizione sul sito. Per quanto riguarda le lezioni di pratica invece ci saranno delle slides pubblicate sul sito.

Modalità d'esame

Si raccomandano come prerequisiti l'aver frequentato il corso di Reti di calcolatori e Sistemi Operativi,ma l'aver verbalizzato il voto o l'averli seguiti non è vincolante in alcun modo per seguire e sostenere il corso e l'esame. Si raccomanda inoltre di poter lavorare su Linux,in quanto la pratica verterà su questo sistema operativo. L'esame consiste di due modalità:

  • SCRITTO: domande a risposta aperta;
  • PRATICA: implementazioni varie su Linux;


N.B.: La quasi totalità dei link a pagine esterne al wikiDsy sono stati inseriti dal sottoscritto e NON dal professore. Questo per far si di integrare meglio quanto spiegato a lezione con il vasto materiale disponibile in rete.

Editaggio a cura di: --Voodoo 12:21, Nov 9, 2005 (CET)

Diario del corso

Lezione di Lunedì 3-10-05

Argomenti trattati nella lezione di oggi:

  • Cosa vuol dire fare sicurezza: prevenire azioni non autorizzate che posson provocare conseguenze spiacevoli,nel nostro caso ciò si applica ai sistemi informativi e alla loro prevenzione;
  • Distinzione tra SECURITY e SAFETY;
  • Perchè esiste la sicurezza;
  • Peculiarità in campo di sicurezza:
    1. Non esiste alcun sistema sicuro;
    2. La sicurezza costa in termini di:
      1. soldi;
      2. tempo;
      3. privacy;
      4. flessibilità del sistema;
  • l'importanza di saper fare delle scelte,valutare elementi critici in un sistema e dare dalle priorità ad essi. In pratica la politica di gestione degli elementi da difendere;
  • Quindi si vede la fase si ANALISI del rischio e la GESTIONE dello stesso,svolta dal management aziendale;
  • I beni desiderabili(ASSET)da parte degli attaccanti:
    1. informazioni,dati memorizzati;
    2. servizi erogati dalla macchina e loro uso;
    3. la protezione dei precedenti implica la protezione delle persone che stanno dietro ad essi;
  • Chi fa sicurezza deve garantire che un sistema goda di:
    1. confidenzialità;
    2. integrità;
    3. disponibilità;

Al termine della lezione è stata trattata a grandi linee la nascita e l'evoluzione della sicurezza in campo informatico,ricordando una data storica,2 novembre 1988,per via di un crash di un numero ingente di macchine negli USA nel giro di poco tempo,causato da un programma(una tipologia che verrà chiamata WORM)scritto da R.J.Morris.
Alcuni link d'interesse che trattano la storia:

http://snowplow.org/tom/worm/worm.html

http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-sg-it-4/ch-sgs-ov.html


Lezione di Mercoledì 5-10-05

  • Introduzione del corso;
  • Installazione di Debian tramite VMWare;

Vedere qui per scaricare la versione di prova; altri emulatori utilizzabili sono Qemu e Bochs


Lezione di Lunedì 10-10-05

Introduzione alla crittografia

La crittografia è un valido sostegno al mantenimento della confidenzialità delle informazioni;

  • attori della scenografia crittografica:
    • mittente;
    • destinatario;
    • intruso (man in the middle);
  • definizione di operazioni di cifratura e decifratura;
  • Esempi di codici crittografici storici:
    • codice di cesare: qui potete leggere in breve come si comporta questo codice e quiun esempio di crittanalisi che sfrutta le ricorrenze dei caratteri;
    • Aenigma: codice trattato esaurientemente in wikipedia. Qui si possono trovare anke simulatori della macchina aenigma
  • Protocolli a chiave pubblica o asimmetrica:
    • il primo è pubblicato agli inizi degli anni 80;
    • presenza di due chiavi;
    • sfruttano proprietà dei numeri primi e campi aritmetici modulari;
    • il protocollo Diffie-Hellman è usato per l oscambio delle chiavi pubbliche;
    • La chiave pubblica è a disposizione di tutti e viene usata per cifrare i messaggi,i quali verranno decifrati con la chiave privata del destinatario;
    • notevole lentezza nel calcolo degli algoritmi(può richiedere ore per grossi documenti);
    • notevole sicurezza dei dati e ottima gestione delle chiavi;
  • Protocolli a chiave privata o simmetrica:
    • algoritmi efficienti e veloci
    • le trasformazioni sono effettuate anche in hardware,un ulteriore livello per renderle più efficaci;
    • utilizzano operazioni di "or","shift" e permutazioni;
    • buon livello di sicurezza anche con chiavi contenute;
    • gestione delle chiavi critica,poichè mittente e destinatario utilizzano la stessa chiave(segreta),con la scomoda necessità di comunicarla per esser nota da ambo le parti;
    • il più usato è il DES(molto usato per le transazioni bancarie);
    • visti i limiti del DES,vengono sviluppati AES e Triple DES;
    • Sia AES sia DES lavorano con una codifica denominata ECB,anche se non è molto sicura per testi lunghi,dove è meglio impiegare la CBC;

Altri spunti quie il libro on-line Kriptonite anche scaricabile in formato PDF compresso in uno zip
Altro approfondimento: qui


Lezione di Mercoledì 12-10-05

Ripasso in veloce carrellata dei permessi classici in Linux:

  • rwx,umask
  • SGID,SUID per i files;
  • Sticky,SGID per le directories;
  • ripasso dei seguenti comandi:
    • chattr: modifica gli attributi;
    • lsattr: mostra gli attributi impostati per la lista;
    • chown: cambio propietario o gruppo per un file;
    • chgrp: cambia solo il gruppo al file;
    • chmod: cambia permessi classici(propietario,gruppo,resto del mondo);

Abbiamo visto due files importanti:

  • /etc/passwd: contiene account utente,uid,gid,home,shell..;
  • /etc/shadow: contiene la password leggibile solo dall'utente root,e vari suoi attributi;
la password è cifrata tramite DES o MD5 (vedi rfc);
  • ACL(Access Control List):
    • è possibile aggiungere utenti o gruppi con un nome specifico;i comandi ACL possono rimpiazzare quelli di chmod; tuttavia, suid/sgid/sticky bit possono essere impostati solo con chmod;
    • ACL minimale: permessi classici;
    • ACL estesa: maschera,utente,gruppi aggiuntivi,...
    • Access ACL: più diffusa,trova applicazione per files e directories;
    • default ACL: solo su directories;

N.B.: sono stati asseganti degli esercizi in classe,che non sono stati eseguiti per mancanza di tempo;


Lezione di Lunedì 17-10-05

  • descrizione generale dell'algoritmo RSA;
    • descrizione dell'algoritmo,a partire dalla scelta di due numeri primi a piacere molto grandi;
    • la scelta dei numeri è molto importante ai fini della robustezza del codice;
    • visto un esempio di cifratura della parola Hello;
  • La funzione hash e il suo ruolo per la firma digitale;
    • la chiave privata oltre a decifrare viene impiegata per firmare i messaggi,più propriamente per firmare l'hash del messaggio: questo a fianco della confidenzialità dei dati,va ad aggiungere la garanzia dell'identità reale delle persone;
  • Riassunto delle modalità di crittazione dei messaggi:
    • crittazione semplice tramite chiave pubblica e decrittazione tramite quella privata
EB[M]   (encryption da A)   SB(EB[M]) (decryption di B)   
    • crittazione dell'hash tramite firma:
EB[(M,SAH[M])] (encryption di A)  
A firma l'hash del messaggio con la sua chiave privata. B riceve il messaggio,spacchetta
tramite la sua privata im messaggio,ne calcola l'hash,vede l'hash calcolato da A decrittandolo
con la chiave pubblica del medesimo e ne confronta i risultati;
    • crittazione veloce mista:
EB[K],K[(M,SAH[M])] (encryption di A)  
A cifra con la sua chiave privata l'hash del messaggio,come prima,ma poi cifra con la crittografia
a chiave privata,generando un numero K grande,per rendere veloce il processo. Dopo di che,critta
la chiave privata K con la chiave pubblica di B,per rednergliela nota.

Per concludere,anche se non esplicitamente trattati nel corso,aggiungerei un richiamo ai remailers: sono dei server che trattano automaticamente la posta in arrivo tramite istruzioni impartite dall'utente. Il mittente critta i messaggi attraverso PGP o un altro client denominato mixmaster,(disponibile sia per Linux sia per Windows),attraverso la chiave pubblica del remailer,il quale provvederà a decrittarlo e a rispedirlo alla destinazione anonimamente. Per un maggior grado di sicurezza si consiglia di usare una catena di remailers,per diminuire drasticamente le possibilità di rintracciamento del messaggio.


Lezione di Mercoledì 19-10-05

  • Abbiamo usato il tool John the Ripper,usato per craccare le password di sistema degli utenti;scaricabile da qui
  • sono on-line le slides della teoria spiegata e gli esercizi relativi;

Lezione di Lunedì 24-10-05

  • Problema di impersonificazione nella crittografia a chiave pubblica: la soluzione risiede nelle  : Certification authority,i quali firmano con la loro chiave privata l'hash del nostro certificato  : digitale,il quale contiene chiave pubblica ed estremi anagrafici;inoltre per provare effettivamente : la loro identità,le CA pubblicano sulla gazzetta ufficiale gli hash delle loro chiavi pubbliche;
  • la robustezza di un algoritmo dipende molto dalla pubblicità dello stesso;
  • attacchi brute force per chiavi DES a 40 bit: richiederebbe 2 anni con la generazione di  : 71434440*109 di chiavi; algoritmi migliori ci riescono per chiavi di 56 bit in circa 35 giorni;
    • lista di Certification authority: qui

PROTEZIONE DI UN SISTEMA OPERATIVO

  • Stratificazione in un sistema informatico:
  1. Applicazioni;
  2. Sistema operativo:
    1. Interfaccia applicazioni;
    2. Servizi di sistema operativo;
    3. kernel;
  3. Hardware;

La sicurezza per un livello viene implementata a livello inferiore. Fare sicurezza a livello applicazione significa impedire che le applicazioni interferiscano con le altre.
N.B.: l'hardware è il massimo livello di protezione che abbiamo,in cui è impossibile per il system manager attuare modifiche a meno di manomissioni a questo livello;

  • Sono esempi di protezioni hardware quelle proposte dal TCG: vedi qui e qui (riferimento indicativo,da prendere con le pinze :))
    • Aggiungerei un riferimento decisamente importante per l'argomento Trusted Computing Platform, rappresentato dal Trusted Computing Group, consorzio responsabile della stesura della specifica per il TPM, TSS, etc (senza contare il lavoro portato avanti da gruppi di ricerca tra i quali il Watson Research Center dell'IBM).

Requisiti di un OS per esser definito sicuro:

  • accesso al sistema garantito ad utenti autorizzati;
  • processi utente possono usare il OS;
  • l'utilizzo dell'OS da parte di processi utente deve essere consentito e non abusivo;
  • Trusted OS: tipicamente per applicazioni militari; i sistemi operativi possono essere cetificati da uno dei 7 livelli di sicurezza indicati da delle lettere.SELinux è tra B1 e B2,Windows NT 5.0 è tra C2 e B1;
  • distinzione processi utente e processi del sistema operativo:
    • status bit;
    • programma trap;
    • interrupt;
    • Il SO si fa carico delle richieste delle applicazioni e restituisce i risultati nel loro spazio di memoria;
  • politica di gestione dei processi e dei dati nel processore Motorola 68000;

Lezione di Mercoledì 26-10-05

Esercizi con GnuPG: vedi qui

  • PGP 9 (trialware): quidopo i 30 giorni è possibilie ancora utilizzarlo con meno opzioni;
  • PGP versioni storiche: qui
  • Gnu Privacy Guard: questo è un sostituto completo e libero di PGP;
  • guida PGP e altre info: qui

Lezione di Mercoledì 2-11-05

Esercizi con GnuPG: vedi qui


Lezione di Lunedì 7-11-05

Fare sicurezza di un sistema vuol dire fare sicurezza a livello di sistema operativo(kernel). Bisogna:

  1. evitare che i processi interferiscano tra loro;
  2. evitare che i processi modifichino/interferiscano con il sistema operativo in maniera illegittima;
  3. proteggere le informazioni;
  4. garantire l'autenticità dei soggetti che utilizzano il sistema;

Strategie:

  • Separazione logica delle entità: processi in esecuzione sono messi in aree di memoria separate logicamente(rilocazione in loading time ed execution time);
  • Controllo degli accessi: si decide chi può fare cosa a chi,mediante l'uso della matrice degli accessi,sfruttata dal ProcessControlBlock (dispendioso) o dalle ACL(più efficiente,sono la base del sistema di protezione di UNIX);
  • meccanismi di autenticazione per gli utenti(tipicamente username e password);
  • Storia di Windows: wikipedia e template
  • Per una panormaica sui sistemi operativi,vedere i pdf del corso omonimo,presso comunicazione digitale: qui
  • Accenno a kerberos(solo detto cos'è): qui

Lezione di Mercoledì 9-11-05


Lezione di Lunedì 14-11-05

Fase di identificazione: tipicamente l'inserimento di un user-id da dichiarare all'inizio della sessione di lavoro;
Fase di autenticazione: sfrutta in genere uno o più di questi parametri:

  1. ciò che l'utente possiede;
  2. ciò che l'utente sa;
  3. ciò che l'utente è;

Paradigma "ciò che sai"

  • Meccanismo delle password e punti deboli:
  1. le password vanno memorizzate su disco: calcolo dell'hash della password,memorizzato su disco. Sulla password fornita dall'utente,viene eseguito l'hash e confrontato con quello su disco,nel caso coincidano,allora l'utente ha accesso al sistema (si basa sulla presunta impossibilità di inveritre la funzione di hash);
  2. le password possono essere scelte deboli: si consiglia l'uso di caratteri alfanumerici e speciali, dando alla password una certa lunghezza in caratteri(dai 6 in su). C'è il problema che la complessità scelta può portare ad una difficoltà alla memorizzazione,con la conseguente imprudenza di alcuni utenti di scriverla in luoghi insicuri(agende,libri o luoghi limitrofi alla macchina). Attacchi possibili:
  • Attacco dizionario: raccolta di parole ricorrenti nella lingua della vittima di cui si fa l'hash,da confrontare con la password da scoprire. Se coincidono la password è stata scovata. Vedere alcuni riferimenti:
http://en.wikipedia.org/wiki/Dictionary_attack (definizione)
http://www.cs.jhu.edu/~fabian/courses/CS600.624/pwdweb.pdf (sicurezza contro attacchi dizionario)
Viene ricordata la storia di Morris e del suo Internet worm,che ha usato un attacco dizionario. Si ricorda John the ripper,uno dei programmi più usati in questo ambito. Bisogna vere un file di password.
  • Attacco phishing: e-mail truffaldine che fingono l'identità di qualcun'altro(banche,ecc) per far dirottare solitamente l'utente su un sito clonato,molto simile(in base all'abilità del truffatore) per ottenere dati personali e finanziari. Si veda :
http://www.antiphishing.org/
http://www.webopedia.com/TERM/p/phishing.html (definizione)

Paradigma "ciò che hai,ciò che sai"

  • Uso delle One-time password: password "usa-e-getta" valide una volta sola,anche se intercettate non saranno valide per altre autenticazioni.
  • smart-card: pin sblocca la smart card inserita.

Paradigma "ciò che si è"

  • Biometria: meccanismi di identificazione in base a caratteristiche fisiche difficili da contraffare. Caratteristiche studiate,con tasso d'errore a fianco,sono:
    • impronta digitale (0.1%);
    • retina e iride dell'occhio (0.01%);
    • impronta della mano;
    • voce;
    • forma del viso (50%);

Problema di privacy e sostituibilità.

Una soluzione che coniuga tutti i parametri sarebbe il possesso di una smart-card,sbloccabile sempre con il solito pin,sulla quale vi è anche la propria impronta digitale: in questo modo c'è un confronto diretto dell'impronta senza invadere la privacy. Un possibile attacco ai riconoscitori di impronte digitali può essere l'applicazione di una sostanza impercettibile al tatto,sul riconoscitoree di impronte digitali. Quando l'utente se ne è andato,si toglie la pellicola sulla quale vi è rimasta l'impronta,per poi venir trattata in laboratorio,prodicendo pelle sintetica applicabile su un dito finto(situazione accaduta in Giappone).
I costi sono zero per le password,ma si va dalle 15€ alle 30€ per lettori smart-card e smart-card e dispositivi OTP. Il processo di sotituzione password avverrà entro 5-10 anni,ma le nuove tecnologie avranno comunque dei margini di errore,anche se infinitesimi perchè son sempre e comunque delle tecnologie.

Meccanismi di audit

  • logging: registrazione eventi che possono fornire informazioni sul sistema;
  • auditing: analisi dei log;
  • monitoring: controllo delle attività di un sistema;

Problemi e soluzioni:

  • i log è meglio memorizzarli su dispositivi WORM,per evitare cancellazione/riscrittura;
  • scegliere cosa monitorare per evitare produzione ingente di dati;
  • Usufruire di log consolidation,per disporre di tutti i log di diverse piattaforme in un formato standard,analizzabile velocemente attraverso un database centrale;
  • Sfruttare net correlation,attraverso la quale identificare automaticamente attività sospette;

Lezione di Mercoledì 16-11-05


Lezione di Lunedì 21-11-05 SOSPESA

Lezione sospesa causa indisposizione del docente


Lezione di Mercoledì 23-11-05


Lezione di Lunedì 28-11-05

XTERM è un demone del sistema operativo attraverso il quale l'utente spcifica le proprietà del terminale. Attraverso i suoi bug di programmazione è possibile,piazzando una stringa opportuna,farsi restituire una shell con i diritti di root.
La tecnica del buffer overflow bypassa del tutto il sistema operativo. L'internet worm di Morris sfruttò quest'attacco,dimostrando che era possibile utilizzare questa tecnica anche da remoto.
Mediamente vengono scoperte circa 2700 vulnerabilità al giorno,di cui circa il 40% sfrutta questa tecnica.
Il buffer overflow è un problema tipico del C e dei linguaggi in genere poco tipizzati,cioè che fanno un controllo debole sui tipi.
Molto in sintesi,questa tecnica mi consente,lanciando il programma(solitamente con i permessi di root) di qualcun'altro,di fargli sovrascrivere il return address di una funzione di modo che punti ad un'altra sezione in cui ho inserito il mio codice.

Aggiunta

  • a fronte di questi problemi e altre vulnerabilità che la programmazione in C porta con sè,è stato studiato un dialetto di questo linguaggio di nome Cyclone,per tentare di evitare Buffer overflows e altre particolarità indesiderate.

Lezione di Mercoledì 30-11-05

TCP/IP Summary:

Vedere: Materiale didattico


Lezione di Lunedì 5-12-05

Codice maligno è un codice progettato per fare danni volutamente ad un sistema,il tutto in modo che l'utente non sappia nulla,per poter passare inosservato. Ce ne sono migliaia basta,andare sui siti degli antivirus e vedere le liste(ecco un Esempio). Saranno in circolazione dal 1980 circa,evolvendosi fino ai worm dei giorni nostri.
Tipologie di Malware:

  • virus: non è propriamente un programma ma un insieme maligno di istruzioni in grado di replicarsi autonomamente,una volta eseguite dall'ospite in cui è inoculato. All'esecuzione dell'opsite verranno eseguite le istruzioni del virus,che prenderà possesso di gran parte del sistema. L'ospite va diffuso per propagarsi,non si distribuisce da sè,può solo infettare nuovi files.
http://www.attentialvirus.com/
  • worm: non necessita un ospite per diffondersi,è un programma che può assumere varie sembianze ma funziona da sè. Si propaga in modo autonomo,solitamente attraverso mail con allegati(mass mailing)in cui viene replicata una copia del worm stesso. Può sfruttare vulnerabilità dei sistemi per entrare automaticamente in esecuzione e diffondersi.
    Solitamente quando un worm entra in funzione,si propaga attaccando i bersagli attraverso vari modi:
    massmailing cercando all'interno dell'harddisk,file che contengono indirizzi attraverso pattern di ricerca(solitamente frugano nella rubrica di posta elettronica), oppure worm più sofisticati utilizzano motori interni per la generazione di bersagli.
    Lo scanning è utile per capire su quali di questi bersagli si può attuare le potenzialità del worm sfruttando la loro vulnerabilità. Quindi riassumendo i bersagli possono essere:
    • e-mail
    • file server;
    • P2P;
    • sistema di messaggistica per scambio file;
    • Bluetooth;
    • vulnerabilità lato client per eseguire del proprio codice,come per esempio per i browser,inducendoli ad eseguire codice maligno che magari effettua un download del worm.
http://virus.html.it/
  • backdoor: programma per bypassare le protezioni e consentire il controllo del sistema remotamente. Uno famoso è BackOrifice,tool di amministrazione remota,ha la stessa funzione di VNC:lanciato il server sulla macchina remota mi posso collegare all'host e zombificarlo,amministrandolo senza avere il permesso altrui. Rientrano tutte le tipologie di software che permettono l'amministrazione remota senza il permesso dell'admin.
    Anche se non correlato,per chi volesse vedere i programmi di amministrazione remota,eccone alcuni:
    • VNC e simili
TightVNC
RealVNC
UltraVNC
  • trojan horse: programmi che dicono di far una certa cosa ma ne fanno anche un'altra in sottofondo. Non sono concepiti per replicarsi automaticamente,per propagarlo un modo classico è diffondere il software nei sistemi di filesharing implementandolo in alcuni programmi craccati o spacciandolo per le keygen di programmi commerciali. Prendono possesso del sistema e inviano informazioni mandandole a host remoti.
    In questa categoria potremmo far rientrare anche gli spyware, programmi che raccolgono informazioni sul sistema dell'utente ed inviandole remotamente senza il suo consenso,per poter in base ai dati raccolti,eseguire una pubblicità mirata. Essi necessitano dell'intervento dell'utente per installarsi.
  • rootkit: sono strumenti utilizzati dopo un attacco:preso possesso del sistema altrui,per sfruttare il sistema si deve evitare che ci si accorgano della sua presenza. Quindi attraverso di essi si maschera la presenza di file,processi e connessioni,che si vuol mantenere nascoste. Possono rimpiazzare le normali utility del sistema(come netstat,ls,ecc). Riuscire a capire la sua presenza è difficile,l'unico modo per esser sicuri è il confronto dell'md5 dell'utility originale con quello che si sta usando. Lavorano a livello utente e a livello kernel: nella prima modalità rimpiazzono utility,modificano librerie di sistema o applicazioni per nascondere l'informazione desiderata;quelli a livello kernel,s'inseriscono direttamente nell'SO attraverso dei moduli o driver che rimpiazzano le sys call dell'SO con nuove system call che producono effetti disparati e comunque diversi dall'originale.E' più complicato installarlo a livello kernel ma una volta fatto è più facile da nascondere,gli eseguibili rimangono sempre quelli e si possono nascondere i driver. Oltre a ciò,il rimpiazzo di funzioni ha un effetto di mascheramento globale per tutte le applicazioni che le usano,quindi l'effetto è molto più pervasivo. Se un sistema è compromesso a livello kernel posso utilizzare dei cd di analisi i quali contengono gli stessi applicativi con le librerie in binario,ma se le funzioni per il lettore cd sono state modificate,nessuno ci garantisce che il controllo dia esiti fidati. Bisognerebbe far partire il sistema con un SO fidato e poi lavorare confrontando i comandi.
  • Macrovirus e scriptvirus: eseguiti dalle macro di files come quelli della suite di applicazioni Microsoft Office,scritti in linguaggio di scripting(come visual basic script).L'interprete è l'applicazione,l'ospite è uno dei doc concepiti per avere delle macronello script virus la macchina. In uno scriptvirus l'interprete è quello del linguaggio e l'ospite sono tutti i programmi all'interno del disco potenzialmente sfruttabili(file HTML per javascript,vbscript per esempio);

Tipologie di payload nei malware

  • non distruttivo: il malware è fine a sè stesso,con il solo scopo di bypassare i sistemi di sicurezza e gloriarsi di ciò;
  • accidentalmente distruttivo: non pensato originariamente dall'autore per creare danni,ma poi ne ha creati lo stesso;
  • distruttivo: il malware crea danni volontariamente;

Ad oggi è difficile trovare degli standard nel classificare i virus,in quanto anche le case produttrici di antivirus stesse,li chiamano in maniera diversa e li descrivono con particolarità differenti.
Se non altro un punto comune di solito,lo si può riscontrare nella specificazione della piattaforma vulnerabile al malware e in genere gli effetti dannosi che provoca. La soluzione di rimozione è solitamente differente da antivirus a antivirus.

Virus,infezioni e tipologie:

  • boot sector: utilizzata dai primi virus,ai tempi del DOS,perchè faceva accedere direttamente al disco fisso. Vanno a rimpiazzare i primi 512 byte e vengono eseguiti prima di ogni altra cosa,rimanendo in memoria dopo la fase di boot. I SO moderni non permettono un accesso diretto,anche se una cosa così si potrebbe ancora fare con periferiche infette,creando per esempiop un CD-ROM ad hoc.
  • infezione nei file: il virus cerca i file nel sistema attraverso critri di ricerca,inserendosi. L'opsite eseguito dall'utente,permetterà al virus di entrare in esecuzione,propagandosi per prima cosa,col proseguire poi eseguendo il payload.

Per ospite intendiamo eseguibili(.exe,.com,ecc..),e si parla di virus scritti in codice macchina,eventualmente in linguaggio di programmazione e poi usando la parte compilata. Per i metodi di infezione,quello più semplice è la sovrascrittura:ho struttura dati come una tabella,che rappresenta una sezione del programma,sezione dati,mentre la sezione testo rappresenta quello eseguibile. La sovrascrittuea prende la sezione testo sovrascrivendone un pezzo:per entrare in funzione,si sovrascrive la prima istruzione del codice dell'ospite ad essere eseguita facendo eseguire subito il payload del virus,altrimenti se la sovrascrittura è avvenuta in altre parti,ci si deve preoccupare che prima o poi si arrivi in quella sezione per farlo eseguire.
Il payload viene ingrandito e linserito all'inizio o in coda del codice dell'ospite. L'idea è far funzionare il programma ospite in modo corretto e far agire parimenti il virus,per non destar sospetti. Un'idea è inserire il payload nelle cavità: è possibile che,per questioni di performance,le sezioni del programma ospite abbiano dimensioni multiple della pagina di memoria,qundi potrebbe esserci dello spazio inutilizzato in cui ci si può inserire il virus. Possiamo prendere questi buchi e collegarli tra di loro tramite istruzioni di salto.
I metodi classici per correggere l'entry point possono essere facilmente beccati. Se ad esempio ho un programma di 30 MB con entry point che dovrebbe essere all'inizio e si trova alla fine,lo si becca subito(una delle tecniche degli antivirus);di contro ci son metodi di camuffamento per passare inosservati.

  • Antiviruse suo funzionamento: possono agire localmente o analizzando il traffico di rete.Hanno un motore di scansione e delle signatures,cioè le definizioni dei virus,confrontate dalla scansione con i vari files del sistema. A livello host è il classico antivirus come Norton,mentre a livello di rete,accede al traffico e ne fa una scansione in tempo reale. A livello host molti worm la prima cosa che fanno è disattivare l'antivirus. Bisogna rimpiazzare certe funzioni svolte dall'SO di modo che si effettui certe routine dell'antivirus al posto di quelle classiche.
    • pattern matching: cercano nell'eseguibile alcuni pattern classici dei virus di cui si hanno le signatures. Di solito si cerca di scegliere i metodo più adatto per ogni virus.
    • string scanning: si cercano particolari stringhe delle applicazioni maligne. I virus si evolvono in fretta e modificati per confondere gli antivirus.
    • string matching con caratteri jolly: meno preciso ma permettedi identificare anche delle varianti di certi pattern.
    • Smart pattern matching: estraggo le info importanti di un file,le parole chiavi di un linguaggio,tutto ciò che rappresenta qualcosa che potrebbe essere un virus viene esaminato. Si usano filtri per ricercare ciò che interessa per un particolare tipo di virus,oppure cercando una particolare struttura di files,emulando lo stesso criterio dei virus per selezionare l'ospite. Analisi euristica invece va alla ricerca di anomalie,funzioni pericolose:se trovate in un eseguibile si solleva un allarme. C'è da dire che non sono funzioni particolarmente affidabili.

Antivirus

Gli hoax invece sono delle burle: contestualmente ai virus,anche se il loro campo si estende anche a truffe di vario genere,sono avvisi pieni di terrore o minacce di epidemie causate da temibili virus,ma che in realtà non corrispondono a nulla di vero. Molto spesso ancora oggi,gli utenti ci cascano e scatenano delle vere catene di S.Antonio via mail o anche attraverso istant messanging,producendo del traffico inutile,con l'unico effetto di intasare la rete. Poco più sotto c'è un esempio:

Hoax

Allarme Virus! Se ricevi un messaggio con oggetto WIN A HOLIDAY non aprirlo. Formatterà immediatamente il contenuto del tuo hard disk. Si tratta di un nuovo virus non ancora conosciuto, inoltra questa informazione a tutti i tuoi amici ...



Lezione di Mercoledì 7-12-05 PONTE

Ponte causa feste;


Lezione di Lunedì 12-12-05

Fare sicurezza sugli host spesso si riduce a fare hardening del sistema operativo,cioè rimuovere tutte le componenti e funzionalità che non servono per l'espletamento delle funzioni del sistema per il quale è stato realizzato. Difendere l'host vuol dire di fatto mettersi nella prospettiva che qualcuno già presente sull'host non deve attuare azioni dannose.
Oltre a questo si sfruttano gli Instrusion Detection Systems,sistemi intelligenti che si accorgono di anomalie e manipolazioni del sistema non desiderate,verificatesi sull'host: essi sono dei moduli che vengono montati sul sistema operativo monitorando continuamente le attività svolte sul sistema(è da notare che svolge azione di detection,quindi segnala un'azione ma non la vieta,al contrario del firewall,che fa azione di prevention,quindi vieta l'azione se intercettata).Quanto agli attacchi che arrivano dalla rete si può fare di più.

Esistono 3 tipi di rete:

Schema di rete Ethernet
  1. LAN
  2. MAN
  3. WAN
  • Internet è una rete di reti,interconnessione di reti di varie tipologie,è lo strato(internetwork) che consente il collegamento di tutte le sue parti. Internet si è diffusa facendo riferimento alle LAN.

Ci sono due strati di rete:uno che consente di comunicare all'interno della rete locale e lo strato di internetwork che permette alla nostra rete di comunicare con altre reti.
I protocolli usati per fare internetworking sono TCP/IP. Al di sotto dei protocolli usati da Internet troviamo un protocollo di rete locale denominato Ethernet. A causa della presenza di questi due strati di rete,gli host si ritrovano di fatto ad avere due indirizzi:

  1. IP address: indirizzo che identifica l'host a livello internet. Esso viene fornito ed è a 32 bit;
  2. MAC address: indirizzo che identifica l'host a livello locale. Viene scritto nella scheda di rete ed è a 48 bit.

Attualmente la versione in uso di IP è IPv4,che prevede indirizzi da 32 bit,permettendo di indirizzare 232 host,circa 4 miliardi. Gli indirizzi vengono comprati e riservati,ma ormai non esiste più la possibilità di avere un indirizzo IP proprio perchè si stanno esaurendo. Ecco perchè da molti anni è iniziata la nuova versione di IP,la IPv6,con indirizzi da 128 bit.


Le caratteristiche di IP d'interesse per la sicurezza sono:

  • spedisce pacchetti di dimensioni finite,al massimo 64Kb(65536 bytes). Messaggi più lunghi di questo valore massimo vengono frammentati in pacchetti più piccoli.
  • è connectionless,quindi i pacchetti possono seguire una traiettoria utile qualsiasi per arrivare all'host di destinazione. Il ruoting trova il percorso ottimale per instradare i dati;
  • non è affidabile,non garantisce l'effettiva consegna(servizio best-effort);
  • non controlla le informazioni che deve inviare,nessuna verifica sul mittente: SRC e DST sono indirizzi IP rispettivamente del mittente e del destinatario,presenti nell'header IP.


Il TCP supplisce alle inaffidabilità dell'IP:

  • costruito sopra l'IP;
  • meccanismo di trasporto per i pacchetti;
  • stabilisce una connessione diretta con l'host di destinazione,garantendo che seguendo questa connessione,i pacchetti non vadano persi(meccanismo affidabile). In caso il pacchetto vada perso o corrotto,viene rispedito tramite meccanismi di acknowledgement.
  • La connessione viene stabilita attraverso un 3-way handshake:
    1. un host A invia un pacchetto SYN più un numero casuale(chiamiamolo k)ad un altro host B con cui vuole comunicare;
    2. B riceve il pacchetto e spedisce un pacchetto di risposta denominato SYN-ACK ad A,più un numero r. A questo punto la connessione è semiaperta.
    3. A manda un ACK di risposta a B e la connessione a questo punto è aperta.


Una connessione TCP è contraddistinta da 4 numeri:

  • local e remote host,local e remote port.
  • Le porte sono numeri che vanno da 1 a 65535,identificative per indicare le sessioni di un host. I servizi di rete più famosi hanno numeri di porte fissi(well-known ports,le prime 1024 porte,servizi assegnabili a processi che girano come root,quindi non accessibili ad altri processi). Ogni processo ha una tabella che dice quali connessioni ha aperte. Una connessione semiaperta/aperta verrà indicato con un posto nella tabella. Alla ricezione di un SYN viene riservato un posto nella tabella,se scade il timeout,viene cancellato,altrimenti alla ricezione di un ACK viene riconfermato e allocato.

Altri protocolli

  • UDP: è IP ad alto livello di fatto. Protocollo di consegna inaffidabile dei dati e di fatto però usa anch'esso le porte. Non usa l'handshaking del TCP. E' molto usato per i servizi multimediali e di streaming,per non rallentare il flusso d'informazioni dovendo rispedire pacchetti persi:infatto vengono scartati se persi.
  • ICMP: protocollo per fornire informazioni per host sullo stato degli host nella rete,usato solo da essi. Utile per il routing calibrato per host che rispondono alle richieste di connessione. Ha una tabella per identificare se un host è down senza verificare effettivamente lo stato dell'host.
  • ARP: assegna agli indirizzi IP in MAC address. Usato per conoscere l'indirizzo MAC di un host quando ne è noto solo l'indirizzo IP,tramite broadcasting di un pacchetto ARP contenente l'indirizzo IP del destinatario: se il destinatario è presente nella rete,risponderà con il suo indirizzo MAC. Associerà poi i valori corrispondenti nella sua tabella. Tutti i messaggi che una macchina genera per l'host xxx.xxx.xxx.xxx,andranno all'host di indirizzo MAC corrispondente. Se vogliamo ricevere i messaggi di Pippo con indirizzo IP y e MAC address M,si va a sostituire con il nostro MAC address al posto di M(attacco arp-poisoning). in questo modo ci si intromette fra due macchine,costituendo il cosiddetto Man in the middle. E' importante notare che l'arp-request prenderà "per buono" l'ultimo host che risponderà fornendo il suo MAC address,quindi se due host in una LAN rispondono ad una arp request,sarà il MAC address dell'ultimo host a venire associato a quell'IP di cui si chiedeva a chi appartenesse. Ci possono essere situazioni infatti in cui ci sono due macchine virtuali su una stessa macchina con due IP diversi. ARP non fa alcun controllo. Un tool open source usato per l'intercettazione del traffico è Ettercap,scaricabile da questo sito.
  • DNS: è di fatto un database distribuito che contiene indirizzi IP delle macchine,recuperabili attraverso una serie di query internazionali. Anche il DNS è soggetto a DNS poisoning,dirottando il traffico verso un altra direzione.
  • DHCP: serve ad assegnare indirizzi IP. Si può avere configurazione statica)il nostro host avrà sempre lo stesso indirizzo IP),o dinamica(si assegna ad ogni nuovo boot un indirizzo IP tra un pool di indirizzi disponibili). E' importante che il provider mantenga il log dell'assegnamento degli indirizzi.
Stack ISO/OSI

All'application layer si usano Socket Stream del TCP,se è una Socket Raw sta usando IP. E' possibile fare attacchi a questo livello. I servizi più interessanti a questo livello sono:

  • SMTP: protocollo per inviare la posta,vede l'implementazione principale in ambito Unix sendmail,in ambito Windows,Exchange. L'internet worm di Morris faceva un buffer overflow su sendmail(in passato aveva un baco al mese che permetteva un root compromise).
  • POP/IMAP:ricezione posta
  • FTP,SSH,RTP,ecc. Vedere qui per una visione dei protocolli più usati.
  • WWW: è di fatto un multiprotocollo,basato sul paradigma client/server in cui sussiste una connessione TCP fra di essi(parla più protocolli fra i quali HTTP,FTP,SMTP,via audio,ecc). L'unico problema è se stabilire una connessione per ogni oggetto spedito o mantenerne una per tutti gli oggetti spediti(per oggetti si intende immagini,testo,applet,ecc). Ciò viene ovviato usando i cookie per memorizzare lo stato di una connessione e ridurre il numero di sessioni aperte con lo stesso client.

I cookie vengono depositati sul client e ricordano sessioni aperte con i client. Il cookie contiene dati(solitamente cifrati e non leggibili dal client)depositati sull'hard disk del client,solevando questioni di privacy. L'altro grosso problema è legato ai codici scaricabili,fra i quali le applet e gli ActiveX. Es:visito un sito e scarico del codice eseguibile, prima di eseguirlo il browser dice se è fidato o meno:l'ActiveX è allegato dalla firma digitale,viene certificato digitalmente. Il browser comunica da chi è firmato e poi posso scegliere se eseguirlo o meno. Nonostante ciò è legato ad un modello di trusting dell'utente medio,che spesso si fida di tutto. Per quanto riguarda l'applet,viene messa in una zona della memoria blindata,che non può accedere a risorse della memoria(modello sandbox). Con ActiveX si può fare tutto mentre con java nulla fondamentalmente,anche se è stato arricchito il modello java,vedendo l'utente in grado di decidere quali risorse mettere a disposizione dell'applet. Troviamo poi i Web defacement,cioè il defacciamento delle home page dei siti,la loro modifica,che di fatto non producono grossi danni,ma provocano un danno d'immagine. un altro problema è legato al phishing,ossia le truffe informatiche che spesso clonano siti di istituti di credito per rubarne gli estremi finanziari.


Lezione di Mercoledì 14-12-05


Lezione di Lunedì 19-12-05

Intervento di Whitfield Diffie in una teleconferenza riguardo all'Information Security nell'ultimo secolo e i problemi in prospettiva che questa disciplina si troverà ad affrontare. Sostanzialmente dice che la sicurezza dell'informazione è sempre stata sorpassata dalle tecnologie che pian piano venivano introdotte. Quindi bosignava rivedere le tecnologie di sicurezza per adeguarle a nuovi strumenti di trasmissione dell'informazione. Lo stesso è valso per le tecniche crittografiche.
Con l'avvento dei computer nella seconda guerra mondiale e la potenza di calcolo inerente,costringeva a rivedere le tecnologie di protezione perchè rendevano scopribili facilmente le trasmissioni. Quindi la sicurezza dell'informazione è passata alla sicurezza fisica del computer,cioè vietare l'accesso a persone non autorizzate.
Con l'arrivo del time sharing fra più processi presenti contemporaneamente sulla stessa macchina,bisogna vedere cosa permettere e chi far eseguire. Così c'eran due filoni:

  1. chi si occupava di controllare le azioni dei processi;
  2. scrivere programmi bug free per evitare attacchi(buffer overflow,ecc);

Pubblicizza poi il sistema Solaris,che dovrebbe garantire le qualità di sicurezza migliori sul mercato. Inoltre annuncia una rivoluzione annunciata dai Web Services(per esempio programmi che contattano i vari motori di ricerca per la ricerca di materiale,oppure manipolazione di foto tramite un servizio che contatta siti che offrono tali servizi,ecc). Nella fase attuale proteggiamo le informazioni,in un mondo di Web services siamo noi che offriamo i dati,la nostra macchina dovrebbe essere aperta al traffico computazionale di dati con altre macchine remote,quindi non la si può più pensare come una fortezza inaccessibile,altrimenti si finisce con il venire tagliati fuori. I meccanismi di controllo del firewall vanno ripensati,i nostri dati circoleranno fra le mani di persone estranee. La sicurezza diventerà più simile alla disciplina contrattualistica,prima di consegnare i nostri beni si contratterà con la controparte i servizi che offre e le garanzie di sicurezza che ci dà.

Sulla rete Internet è facile nascondere le proprie tracce(anonimità) o farle perdere. Per persone predisposte può contribuire ad incentivare attività illecite. Spesso non è comunque sufficiente avere i log degli IP per incriminare una persona,quindi a volte si ricorre all'intercettazione telefonica(ad ogni modo i costi possono anche essere elevati,ecco perchè spesso non suscitano scalpore certi reati informatici minori,come il defacement di siti). Il pc medio che è in rete è solitamente non protetto,quindi può diventare facile vittima per persone con certe skills e che hanno interessi a sfruttarlo. Spesso si può ricorrere a macchine bucate(honeypot)collegate a sistemi di monitoraggio che logga tutto,cosicchè l'hacker che viola un sistema viene controllato inconsapevolmente.
Il preludio di ogni attacco avviene tramite portscanning(vedere anche qui),ovvero si testano tutte le porte per vedere quali di esse rispondono,quali applicazioni offrono un servizio(un esempio di tool di questo tipo è Nmap). Il portscanning è facilmente individuabile,viene loggato il nostro IP,quindi si devono attuare tecniche di mascheramento del proprio IP(i firewall odierni sono comunemente tarati per rilevare con facilità questo tipo di attacco).
Una volta che conosco i servizi,e capito il sistema operativo che li ospita e la sua versione(tramite fingerprinting),vado a vedere quali vulnerabilità sono già note per un certo OS(per esempio consultando siti specializzati come Security Focus). A questo punto si tratta di trovare degli exploit,codice che ci permette di sfruttare le vulnerabilità di una macchina(la loro pubblicazione è illegale,è istigazione a delinquere).
Il mascheramento della propria identità avviene mascherando il proprio IP: è possibile modificare l'indirizzo IP di un pacchetto,dalla mia macchina può uscire un pacchetto con l'IP di un'altra macchina.

  • ip-spoofing:la macchina A,volendo impersonificare C,manda un pacchetto SYN con l'indirizzo IP di C a B per stabilire una connessione. Ovviamente B risponde con un SYN ACK a C. A questo punto una prima ipotesi è che C mandi un RESET della connessione a B,poichè non ha inviato alcun pacchetto SYN. Se questo non accade dovrei mandare l'ACK con il numero scelto casualmente da B che non conosciamo. Se noi indoviniamo tal numero possiamo spedire l'ACK e stabilire la connessione. Sono stati fatti degli studi per cui ci possono essere dei modelli di prevedibilità del numero casualmente scelto dal generatore di numeri casuali avendo già una sequenza di numero scelti. Facendo di solito tre o questtro tentativi si riesce ad indovinarlo. L'unico problema sta in C: o cerchiamo un indirizzo non usato da qualcuno,di modo che non risponda a B,oppure mettiamo in C in condizione di non rispondere tramite attacco DoS,si fa un flooding di pacchetti di modo che C di fatto non può rispondere a B. Quindi B suppone che A sia C. Le uniche cose che si possno fare in questo modo sono transazioni one-way.
    Il primo attacco ip-spoofing è stato realizzato secondo la storia da Kevin Mitnick. Mitnick era essenzialmente un esperto di social engineering e nelle intromissioni nel sistema telefonico,captando le frequenze dell'FBI. Si dice che Mitnick avesse attaccato la macchina di Shimomura tramite IP-spoofing,sebbene avesse negato dapprima la paternità di quest'attacco.

L'attacco DoS è un arrivo massiccio di pacchetti tramite ip spoofati su una porta che di fatto rende impossibile erogare il servizio. Una tecnica elementare è il SYN Flood: è basata sull'handshaking tipico del TCP. Invio un SYN,quindi l'host riserva un posto nella tabella delle connessioni semiaperte,se entro il timeout non arriva l'ACK viene cancellato il posto. Si costringe quindi a saturare la tabella costringendo l'host a non ricevere più connessioni. Più macchine si concentrano su uno stesso bersaglio,più è efficace l'attacco. Si parla a questo punto di DDoS. Contro l'attacco Dos si può fare poco di fatto: fra le strategie di difesa si può volere l'autenticità dei pacchetti mandati. Ciò sarà possibile con IPv6,con il quale non sarà più possibile modificare l'identità di una macchina perchè in realtà,il meccanismo di autenticazione dei pacchetti userà la firma digitale. I pacchetti dovranno essere firmati da chi li manda,e non si potrà usare una firma diversa da quella che si possiede.

Libri citati

Altri links



Lezione di Mercoledì 21-12-05