Beruflich Dokumente
Kultur Dokumente
Introduzione
I programmi costituiscono gran parte di un sistema informativo La protezione dei programmi perci al cuore della sicurezza informatica Due domande fondamentali:
Come possibile prevenire la presenza di difetti in un programma? Come possibile proteggere le risorse informatiche da programmi che contengono difetti?
PROGRAMMI SICURI
Cos un programma?
Un insieme di istruzioni per il calcolatore. Esempi:
Il sistema operativo I driver delle periferiche Linfrastruttura di rete I sistemi di gestione delle basi di dati (DBMS) Gli applicativi (il browser Web, programmi di videoscrittura, programmi di calcolo e simulazione, )
Difetto (fault): passaggio, comando, o definizione dei dati non corretto in un programma per computer. Malfunzionamento: deviazione dal comportamento richiesto del sistema. Quindi un difetto rappresenta il punto di vista interno, quello dello sviluppatore: la causa.
La sicurezza complessa
Non esistono tecniche per eliminare o gestire tutte le falle di sicurezza
La sicurezza per sua natura una questione complessa, che spesso entra in conflitto con usabilit e prestazioni
2. Evoluzione tecniche di programmazione: la programmazione e le tecniche di ingegneria del software cambiano e si evolvono molto pi rapidamente delle tecniche di sicurezza informatica.
BUFFER OVERFLOW
Buffer overflow
Un buffer (o array o stringa) uno spazio di memoria in cui possono essere memorizzati dei dati. La memoria finita, quindi la capacit del buffer finita. In molti linguaggi necessario dichiarare la dimensione del buffer in modo che il compilatore possa riservare la memoria necessaria
Ci nonostante
Il modulo di rilevazione dellerrore utilizza risorse (memoria e tempo) per proteggersi da un problema che capita abbastanza di rado. In alcuni caso potremmo non permetterci il dispendio aggiuntivo di risorse (ad esempio, programmi in tempo reale). Anche se volessimo spendere risorse per questo controllo
Dati dellutente
A A A A A A A A A
Dati dellutente
A A A A A A A A A
Dati di sistema
B
Dati dellutente
A A A A A A A A A
Cosa accade se il numero di telefono fornito ha 1000 caratteri? Crash del programma? possibile sfruttare il crash?
MEDIAZIONE INCOMPLETA
Mediazione incompleta
Riprendiamo lesempio del sito Web
http://www.somesite.com/subpage/userinput.asp? parm1=(808)555-1212&parm2=2009Jan17
Mediazione incompleta
Potrei anticipare il problema del buffer overflow, inserendo dei controlli lato client (il browser) La data potrebbe essere specificata solo selezionando controlli predefiniti Ci non impedisce di realizzare una richiesta HTTP manuale, digitando lindirizzo direttamente nel browser. In questo caso si dice che i valori dei dati non sono completamente mediati: i dati critici si trovano in una condizione esposta, non controllata.
Falla TOCTTOU
Per migliorare lefficienza, i processori e i sistemi operativi moderni possono cambiare lordine di esecuzione di istruzioni e procedure.
Ad esempio, lesecuzione di istruzioni consecutive di una procedura possono essere inframezzate da istruzioni di altre procedure (multi-tasking).
La falla Time-Of-Check To Time-Of-Use (TOCTTOU, tock too) dovuta allo scarto di tempo tra la verifica dellautorizzazione a compiere unazione e lesecuzione dellazione stessa.
Falla TOCTTOU
Se i dati di autorizzazione non vengono utilizzati direttamente e, nellattesa di essere utilizzati, sono disponibili per la modifica, allora si verifica la falla.
Esempio: una persona compra una statua che costa 100
1. 2. 3. 4. Lacquirente estrae 5 banconote da 20, le conta davanti al venditore e le lascia sul tavolo. Il venditore si gira e prende la statua. Lacquirente riprende una banconota mentre il venditore girato. Il venditore si gira, prende il denaro e porge la statua allacquirente, che esce dal negozio.
TOCTTOU: esempi
Esempio: accesso ad un file
1. Lutente X vuole leggere il file file_di_X 2. Viene confezionata una richiesta di accesso [X, file_di_X, lettura, ?] e sottoposta a controllo 3. Laccesso viene permesso [X, file_di_X, lettura, OK] 4. Prima di essere utilizzata, la richiesta di accesso viene modificata [X, file_nascosto, modifica, OK] 5. La richiesta di accesso viene utilizzata nella versione modificata, permettendo operazioni negate.
Come evitarla?
Per evitare la falla sarebbe necessario utilizzare i dati di permesso immediatamente o evitare di esporli durante lattesa dellutilizzo.
Se ci non fosse possibile (multi-tasking), si potrebbe aggiungere un checksum ai dati di permesso, che lentit emittente possa verificare in modo da poterne rilevare la modifica.
Combinazione di falle
Ognuna delle tre falle precedenti abbastanza grave singolarmente. Tuttavia laggressore intelligente utilizza le falle come mattoni per la costruzione di un attacco complesso. Per questo motivo occorre conoscere e proteggersi anche dalle falle pi semplici. Le falle di programma allapparenza innocue possono essere sfruttate da aggressori malevoli per introdurre codice dannoso! (virus)
Attivit silente
La maggior parte del lavoro svolta da un programma invisibile agli utenti. Ad esempio:
Conoscete la forma in cui viene memorizzato un documento? Quali file vengo creati e modificati da un elaboratore di testi quando create un documento?
Per questa ragione, poich lutente non vede direttamente i dati utilizzati dal computer, gli eventuali aggressori informatici possono utilizzare programmi come veicoli per la modifica di dati o di altri programmi.
si esegue un comando generalmente chiamato INSTALL o SETUP. Da qui in poi il programma di installazione prende il controllo
crea, modifica, elimina e rinomina i file che gli sono necessari.
A parte la (generica) documentazione di installazione fornita, lutente non ha idea di quali regalini abbia ricevuto in seguito allinstallazione.
Pu anche insediarsi e rimanere inattivo fino a che non si verifica una condizione di innesco:
Un orario o data predefinita Un evento (per esempio, lesecuzione di un programma) Un conteggio Una combinazione di eventi
La novit oggigiorno il numero di istanze distinte e di copie di virus che sono comparse e scomparse, nonch la velocit con cui nasce il codice per il loro sfruttamento.
Zero day
Il rilascio di una patch di una vulnerabilit avviene secondo le seguenti fasi:
1. Una nuova vulnerabilit viene scoperta. 2. Il produttore viene a conoscenza della vulnerabilit. 3. Viene sviluppata la prova di concetto per dimostrare la vulnerabilit in una situazione controllata. 4. Il produttore sviluppa e distribuisce un rimedio (patch). 5. Gli utenti implementano la difesa.
Zero day
Qualcuno pu sferrare un attacco effettivo estendendo la prova di concetto o la definizione della vulnerabilit. Fintanto che gli utenti implementano la difesa prima dellattacco effettivo, non si registra alcun danno.
Viene definito giorno zero la data in cui il produttore viene a conoscenza della vulnerabilit.
Zero day
Un attacco che avvenga prima che il produttore conosca la vulnerabilit detto sfruttamento del giorno zero: zero day attack.
In senso pi generale, un zero day attack avviene prima della disponibilit della patch relativa.
Cavallo di Troia: codice che oltre al suo effetto primario presenta un secondo effetto malevolo non evidente.
esempio: script di login che, oltre alle operazioni standard, conserva una copia di nome utente e password per un utilizzo successivo.
Worm: come il virus, ma si diffonde solo attraverso la rete, mentre il virus pu utilizzare qualsiasi supporto. Il worm si diffonde come programma autonomo.
Codice virale
Programma originale
Programma originale
Programma originale
Codice virale
Programma modificato
Virus di documento
Si trova allinterno di un documento formattato (cio con una struttura) come:
Documento scritto (Word, Open Office Writer, ) Un database Una presentazione
Virus di documento
I comandi sono parte di un ricco linguaggio di programmazione che comprende macro, variabili e procedure, accesso ai file e persino chiamate al sistema.
Sebbene quindi il virus di documento non sia codice direttamente eseguibile, sfrutta lambiente fornito dal programma di lettura del file per eseguire operazioni malevole.
Introduzione
Dal punto di vista del suo creatore, un virus dovrebbe
Essere difficile da rilevare; Non essere distrutto o disattivato facilmente; Diffondersi in modo ampio; Reinfettare il programma in cui si trova o altri programmi; Semplice da creare; Indipendente dalla macchina o dal sistema operativo.
Introduzione
Inizialmente la sfida per lautore del virus era scrivere un codice che sarebbe stato eseguito ripetutamente per garantirne la diffusione.
Ora sufficiente un esecuzione singola per garantire la diffusione (i computer sono sempre connessi).
il virus spesso giunge come allegato di posta elettronica che lutente deve eseguire
Esaminiamo i luoghi in cui possibile che un virus risieda (dopo linstallazione) per procedere con linfezione.
Prima dellinfezione
2. 3.
Il settore di avvio dispone di 512 byte. Per permettere bootstrap loader pi grandi possibile il concatenamento. Se il virus riesce ad inserirsi nella catena, la sua esecuzione garantita ad ogni avvio.
Codice virale
Bootstrap loader
Dopo linfezione
In maniera analoga un virus pu modificare la tabella dei programmi del sistema operativo, ad esempio la lista dei programmi da eseguire allavvio.
Altri luoghi
Abbiamo parlato della possibilit di eseguire operazioni attraverso macro. Alcuni programmi hanno delle Macro di avvio che permettono, ad esempio, lesecuzione di operazioni ricorrenti interessanti per lutente. Un luogo in cui un virus pu risiedere e quindi la macro di avvio. Le librerie di codice (ad esempio le Dynamic Linked Library, DLL) sono utilizzate da numerosi programmi e vengono eseguite da ognuno di essi. Un virus che infetta una libreria si garantisce numerose esecuzioni.
Introduzione
Un virus non pu essere completamente invisibile:
Il codice deve essere memorizzato da qualche parte e deve trovarsi in memoria per poter essere eseguito; Il virus viene eseguito in modo particolare, con particolari metodi per la sua diffusione.
Ognuna di queste caratteristiche porta ad uno schema eloquente: la definizione o firma. La definizione del virus viene utilizzata dagli analizzatori (virus scanner) per rintracciarlo. Il virus viene rilevato solo con la relativa definizione: ecco limportanza dellaggiornamento delle definizioni.
Schemi di memorizzazione
La maggior parte dei virus si associa a programmi archiviati su disco.
Il virus allegato invariabile, perci linizio del codice una definizione rilevabile. Un altro parametro da valutare pu essere la dimensione del file a cui il virus si associa. Se il programma ospite non viene modificato internamente, la dimensione complessiva aumenta.
Programma originale IF (--) JUMP
Programma originale
Schemi di memorizzazione
Per non aumentare la dimensione possibile sostituire delle parti del programma, ma in questo caso il comportamento dellospite sarebbe modificato dal virus.
Ancora, lanalizzatore di virus pu utilizzare un codice o una checksum per rilevare le modifiche a un file. Pu anche cercare schemi sospetti
Esempio: rilevare unistruzione JUMP come prima istruzione di un programma di sistema.
IF (--) JUMP
Virus polimorfico
Per rendere difficoltoso il rilevamento, lautore del virus pu far s che lo schema di memorizzazione cambi. In questo caso si parla di virus polimorfico.
Virus polimorfico
Cambiare la posizione delle parti di codice rispetto a quelle dei dati.
Supponendo che un codice malevolo sia composto da 100 byte di programma e 50 byte di dati, varianti del virus polimorfico potrebbero essere: 10 byte di programma, seguiti da 50 byte di dati, seguiti da i restanti 90 byte di programma;
Crittografare parte del codice (virus crittografici). La chiave e la routine di decrittazione devono essere in chiaro, per poter riottenere il codice in chiaro.
Non appena il virus viene eseguito, questi effettua la decifratura ottenendo la parte restante del suo codice eseguibile
Le applicazioni che utilizzano questi file possono cercare di aiutare lutente invocando automaticamente il codice eseguibile, senza esplicito consenso.
IL VIRUS BRAIN
Introduzione
uno dei primi virus ad essere comparsi. Deve il suo nome al fatto che modifica letichetta dei dischi attaccati in BRAIN.
Sembra non avere effetti diversi dalla trasmissione
era verosimilmente una prova di concetto ,
tuttavia alcune varianti cancellano il contenuto del disco o distruggono la tabella di allocazione dei file.
I settori vengono contrassegnati come danneggiati, in modo che il sistema operativo non li utilizzi
con le chiamate di basso livello possibile obbligare lunit a leggere dai settori che il sistema operativo ha contrassegnato come danneggiati
IL WORM INTERNET
Introduzione
Il 2 novembre 1988 venne rilasciato su Internet un worm che provoc seri danni alla rete.
Non solo molti computer furono infettati, ma quando la notizia si diffuse, molti altri sistemi non infetti disattivarono le proprie connessioni dalla rete per prevenire linfezione.
Al termine della chiamata finger, finger poteva quindi essere costretto a eseguire le istruzioni spinte al suo interno
provocando la connessione del worm ad una shell remota.
Diffusione dellinfezione
Dopo aver trovato una macchina di destinazione adatta, il worm utilizzava uno dei precedenti tre metodi per inviare un bootstrap loader alla macchina bersaglio. Il loader consisteva in 99 righe di codice C da compilare ed eseguire sulla macchina di destinazione. Il bootstrap loader avrebbe poi analizzato il resto del worm dalla macchina host di invio.
Cosa si appreso
Il worm Internet diede una scossa alla comunit Internet, che allepoca era costituita principalmente da universitari e ricercatori.
I siti colpiti provvidero a risolvere le falle; Alcuni utente cambiarono le password; Vennero realizzati strumenti per la rilevazione automatica delle falle. Nonostante ci gli analisti ritengono che molte delle stesse falle esistano tuttora.
Il worm era benigno (non distruggeva dati, non salvava le password), ma avrebbe potuto compiere molti danni.
Cosa si appreso
Molte persone furono spinte allazione.
Gli Stati Uniti svilupparono uninfrastruttura per la comunicazione e la correzione dei difetti del codice, malevoli e non. Venne istituito il Computer Emergency Response Team (CERT) alla Carnegie Mellon University.
Gli amministratori oggi si scambiano informazioni su problemi e soluzioni: la sicurezza deriva da azioni e protezione supportate dallinformazione, non dallignoranza e dallinattivit.
CODE RED
Introduzione
Apparve a met del 2001 con effetti devastanti.
Colpiti 750.000 server in tutto, compresi 400.000 computer nel solo periodo dal 1 al 10 agosto.
WEB BUG
Il creatore vuole che il bug sia invisibile allutente, ma che possa tenere traccia delle attivit sul web.
Come funzionano
A prima vista i Web bug non sembrano essere malevoli, raccolgono dati numerici ma non tengono traccia di informazioni personali come il nome e lindirizzo del navigatore.
Tuttavia se lutente effettua un acquisto o una registrazione al sito, questi dati verranno forniti e potranno completare il profilo. Inoltre, ogni richiesta al server Web contiene comunque informazioni come:
Indirizzo IP del computer; Il tipo di browser usato;
Come funzionano
La risoluzione del monitor; Altre impostazioni del browser, per esempio se abilitata la tecnologia Java; Il tempo di connessione; Valori precedenti dei cookie;
Queste informazioni possono essere utilizzate per tenere traccia dellutente. In modo pi malevolo, il bug pu essere utilizzato in maniera astuta per determinare degli indirizzi IP con determinate caratteristiche che potrebbero permettere un attacco di successo.
Cosa si appreso
I Web bug sollevano interrogativi sulla privacy e alcune nazioni stanno prendendo in considerazione leggi per la protezione specifica dai bug web.
I browser attuali permettono unalta granularit di configurazione per le regole di gestione dei cookie.
Introduzione
Finora abbiamo analizzato del codice (malevolo) anonimo, scritto per influire su utenti e macchine in modo indiscriminato.
In questa sezione analizzeremo del codice malevolo scritto per un sistema particolare, per unapplicazione specifica o per uno scopo determinato.
TRAPDOOR
Introduzione
Una trapdoor un punto di ingresso non documentato ad un modulo. Vengono utilizzate di norma per lo sviluppo del codice:
Per provare il modulo; Per fornire agganci con cui connettersi a futuri perfezionamenti o modifiche; Per consentire laccesso al modulo in caso di malfunzionamenti.
Oltre allutilizzo durante lo sviluppo, le trapdoor possono per consentire laccesso al programma una volta che questo viene messo in produzione.
Stub
I sistemi informatici sono strutture complesse. Per questa ragione i programmatori spesso sviluppano e provano i sistemi in modo metodico, organizzato e modulare, sfruttando il fatto che il sistema composto da moduli e componenti. I moduli vengono prima verificati singolarmente, nella fase di verifica dellunit. Successivamente vengono verificati nel funzionamento integrato, nella verifica dellintegrazione.
Stub
Per la verifica dei singoli moduli e dei loro aggregati, potrebbero non essere ancora disponibili i moduli che generano linput e gestiscono loutput.
Per questo motivo i programmatori realizzano delle routine aggiuntive che ricreano lambiente di esecuzione del modulo in esame (creazione dellinput e gestione delloutput, chiamati stub (troncone, mozzicone) o driver per prove.
Gli stub verranno poi sostituiti, pi avanti nella realizzazione del software, dai moduli di cui emulano le funzionalit.
Codice di debug
A volte, quando lorigine di un problema di un modulo non evidente, il programmatore aggiunge del codice di debug.
Il codice serve per evidenziare che cosa accade durante lesecuzione, stampando valori di interesse o eseguendo speciali comandi.
Linserimento dei comandi una pratica di verifica riconosciuta, ma, se vengono lasciati in posizione dopo i test, i comandi aggiuntivi possono divenire un problema.
Il worm Internet ha diffuso la sua infezione utilizzando proprio questo tipo di trapdoor di debug in un programma di posta elettronica.
In sistemi progettati in modo scadente il controllo potrebbe non essere realizzato e un dato fuori specifica potrebbe causare errori imprevisti.
La falla di fingerd sfruttata dal worm Morris era di questo tipo. La routind di I/O di una libreria di C non controlla se rimangono caratteri nel buffer di input prima di restituire il puntatore a un carattere successivo.
SALAMI ATTACK
Introduzione
Deve il suo nome al modo in cui pezzettini di carne e grasso vengono mischiati in una salsiccia o in un salame.
Con la stessa tecnica un salami attack unisce bit di dati apparentemente non sequenziali per ottenere risultati non significativi.
Introduzione
Il nome rootkit si riferisce al tentativo da parte del codice di operare come utente root
ossia come utente che gode dei massimi privilegi nei sistemi operativi Unix.
Un rootkit tipico si insinua nella normale interazione tra utente e sistema operativo nel modo seguente:
Ogni volta che lutente esegue un comando che mostrerebbe la presenza del rootkit, per esempio mediante lelencazione dei file o dei processi in memoria, il rootkit intercetta la chiamata e filtra il risultato che viene restituito, in modo che non risulti.
Introduzione
Per esempio:
una directory contiene sei file, uno dei quali il rootkit; Il rootkit passa il comando di directory al sistema operativo; Il rootkit intercetta il risultato, cancella la voce che lo riguarda dallelenco e aggiusta loccupazione di spazio; Allutente sono mostrati solo cinque file.
possibile scrivere un rivelatore di rootkit che agisca a basso livello nel filesystem e che confronti il risultato delle chiamata al sistema operativo (modificate dal rootkit), con il risultato delle interrogazioni a basso livello.
Tappare la falla
Di fronte alla pubblicit negativa che ha ricevuto da questo rootkit, la Sony ha deciso di rilasciare un disinstallatore. Sfortunatamente la pressione e la fretta hanno portato ulteriori problemi.
Infatti il disinstallatore si presentava come una pagina Web che scaricava ed eseguiva il programma di disinstallazione. I programmatori per non avevano previsto il controllo di quale codice venisse eseguito
la pagina Web poteva eseguire codice di qualsiasi fonte, non solo della Sony.
Il codice permaneva anche dopo la disinstallazione, lasciando quindi la vulnerabilit nel sistema.
Numeri
Quanti computer sono stati infettati dal rootkit? Nessuno lo sa con certezza.
Sono stati trovati 500.000 riferimenti nelle tabelle DNS al sito contattato, ma alcune voci avrebbero potuto supportare laccesso di centinaia o migliaia di computer.
Quanti utenti infetti ne erano a conoscenza? Non possibile rispondere, come non possibile sapere quanti computer siano ancora infetti.
Contesto di esecuzione
I programmi girano in un contesto che ne regola i diritti di accesso e i privilegi. La maggior parte dei programmi viene eseguita nel contesto dellutente che li invoca:
Se i diritti di accesso sono impostati correttamente, possibile creare, modificare o cancellare gli elementi posseduti dallutente, ma gli oggetti critici per il sistema sono protetti, essendo fuori dal contesto.
Un attacco basato sulla scalate dei privilegi (privilege escalation) consente al codice malevolo di essere lanciato da un utente con privilegi bassi, ma di andare in esecuzione con privilegi superiori:
Pu quindi agire sugli oggetti di sistema.
Se il programma viene trovato, allora si passa allesecuzione, altrimenti la ricerca procede nelle successive directory del path o termina con un errore se non viene trovata alcuna corrispondenza.
In caso di corrispondenze multiple, il programma eseguito quello che per primo viene trovato nel path.
FALSIFICAZIONE DELLINTERFACCIA
Descrizione
Lattacco Interface Illusion (phishing) di tipo spoofing in cui una pagina web o parte di essa falsificata. Obiettivo dellaggressore convincere lutente a compiere qualcosa di inappropriato, ad esempio:
Inserire i propri dati bancari in un sito che non quello della banca; Premere un pulsante Non accetto che invece significa Accetto; Scorrere lo schermo per attivare un evento che causa linstallazione di software malevolo sul computer.
Descrizione
Non esiste una canale diretto tra un tasto premuto sulla tastiera e il programma (ad esempio un elaboratore di testi) che lo utilizza. Quando si preme il tasto A: 1. Viene attivato un interruttore che genera un segnale; 2. Il segnale viene ricevuto da un driver di periferica; 3. Il driver analizza il segnale e genera il codice A; 4. Il codice passa attraverso altri livelli fino al programma che lo utilizza; 5. Altre elaborazioni e conversioni portano alla comparsa di A sullo schermo.
Descrizione
In questo processo intervengono numerosi programmi, organizzati con un paradigma a livelli (come, ad esempio, lo stack TCP/IP).
Uno dei programmi che intervengono pu essere modificato per tenere traccia dei tasti premuti, da cui poi poter rilevare informazioni importanti, come codici di accesso, password.
Bibliografia
[PFL08] C. P. Pfleeger, S. L. Pfleeger. Sicurezza in Informatica. Pearson, Prentice Hall. [STA07] W. Stallings. Sicurezza delle reti. Pearson, Prentice Hall. [Wiki-it] http://it.wikipedia.org/wiki/ [Wiki-en] http://en.wikipedia.org/wiki/ [ISECOM] Institute for Security and Open Methodologies