Un attacco è un tentativo di accesso non autorizzato al sistema e di utilizzo non autorizzato dei dati, che può compromettere la riservatezza, l'integrità o anche la disponibilità dei dati o del sistema stesso.
Gli attacchi si possono suddividere in passivi e attivi; gli attacchi passivi compromettono l'autenticazione e la riservatezza per entrare in possesso di dati privati; gli attacchi attivi compromettono l'integrità e la disponibilità, cioè hanno come obiettivo l'alterazione delle informazioni o il danneggiamento del sistema per renderlo non utilizzabile.
Spesso, quando un sistema viene compromesso, l'intruso inserisce programmi o virus per mascherare l'attacco, in modo che non possa essere individuato, per procurarsi informazioni aggiuntive e per creare un accesso (backdoor) da sfruttare successivamente.
Un root kit è una raccolta di programmi che un intruso installa dopo aver compromesso l'account di root di un sistema; il root kit aiuta ad eliminare le tracce dell'attacco e consente di accedere di nuovo al sistema in futuro collocando delle backdoor (lasciando in esecuzione dei processi che permettono di tornare con facilità); di solito alcuni programmi di sistema come ps, ls e netstat vengono modificati in modo che non possano rivelare le backdoor.
Gli intrusi in genere sono noti come hacker, anche se questo termine in modo più preciso si riferisce solo a persone con competenze elevate, in grado di trovare le vulnerabilità del sistema e di sfruttarle per i propri scopi; molto spesso invece gli intrusi sono solo script kiddie, cioè persone che usano conoscenze di vulnerabilità trovate da altri per scandire Internet e cercare una vittima che ha quelle vulnerabilità.
Lo sniffing è un attacco passivo che consiste nell'intercettazione delle informazioni che viaggiano sulla rete;
Per intercettare i dati basta un analizzatore di rete o sniffer, cioè un programma che permette di esaminare il traffico tra due stazioni qualsiasi della rete.
In particolare possono essere intercettate le informazione relative all'autenticazione degli utenti, che poi possono essere usate per accedere al sistema (molti servizi inviano in chiaro al server le informazioni di autenticazione del client). Per difendersi da questo tipo di attacchi è opportuno usare tecniche di crittografia per cifrare tutte le informazioni riservate che viaggiano sulla rete.
La riservatezza delle informazioni può essere compromessa traendo in inganno l'utente in modo che sia lui stesso a fornire le informazioni.
Le principali tecniche per ottenere dati dagli utenti sono:
social engineering consiste nel convincere le persone a rivelare dati riservati, chiedendoli direttamente, in modo apparentemente casuale o fingendo di avere scopi innocui completamente diversi da quelli reali; si basa sulla naturale fiducia della gente nei rapporti personali;
phishing consiste nella richiesta di informazioni all'utente tramite pagine Web o e-mail che chiedono dati riservati spacciandosi per qualcun altro che ne avrebbe diritto (come la banca presso la quale si ha un servizio di home banking);
spyware si tratta di software che raccoglie informazioni sull'utente e le invia attraverso lnternet; di solito si trova nascosto in programmi shareware o freeware; Un tipo di software simile ma meno pericoloso è adware, che mostra informazioni pubblicitarie non richieste.
pharming consiste nel fare in modo che il browser venga ridiretto a un altro sito senza che l'utente lo sappia; il browser mostra l'indirizzo corretto, ma il sito che si sta visitando non è quello desiderato; il falso sito in genere viene utilizzato per ottenere informazioni personali o riservate dagli utenti (phishing); questo attacco può essere attuato o installando del codice sul computer dell'utente, o su più larga scala fornendo false informazioni a un server DNS (DNS poisoning) in modo che una richiesta di un URL venga ridiretta da qualche altra parte.
Per difendersi da questo tipo di attacchi basta ricordare che bisogna essere molto cauti nel fornire dati riservati e che non bisogna mai rispondere a richieste di questo tipo. I programmi spyware possono essere individuati da programmi appositi.
Per la sicurezza dei server DNS è in fase di sviluppo lo standard DNSSEC; questo standard prevede fra l'altro che un record A relativo a un certo dominio possa essere prodotto solo da chi ha l'autorità per quel dominio.
Abuso dell'identità elettronica. L'abuso dell'identità elettronica è spesso il primo passo per introdursi nel sistema ed effettuare altre operazioni non autorizzate.
Consiste nell'utilizzo delle informazioni di autenticazione di un utente (nome e password) che possono essere ottenute in vario modo:
intercettando le informazioni che viaggiano sulla rete (sniffing),
ottenendo le informazioni direttamente all'utente,
scoprendo la password dopo aver provato in modo esaustivo i termini di un dizionario (dictionary attack),
installando un cavallo di Troia che crei una finestra di login identica a quelle del sistema ma finta, in grado di inviare le informazioni inserite all'autore dell'attacco.
Per difendersi è opportuno:
usare sistemi di autenticazione che non facciano transitare la password sulla rete o metodi di crittografia, in modo che le password non siano mai in chiaro;
>spiegare agli utenti che non devono scrivere la propria password e non devono comunicarla a nessuno;
suggerire agli utenti di usare password non banali (niente di personale come la data di nascita e niente parole del dizionario); la password deve essere di almeno 6 caratteri (meglio 8) e contenere lettere maiuscole e minuscole, numeri e caratteri speciali; per fare in modo che una password del genere sia semplice da ricordare si può generare la password partendo da una parola del dizionario e sostituendo alcune lettere con numeri o caratteri in modo mnemonico (delfino: D&IF1n0, rododendro: ROdOd&nD*O);
prevedere meccanismi automatici che costringano gli utenti a cambiare periodicamente la password.
Il termine spoofing indica diversi tipi di attacchi che si avvalgono di un meccanismo di sostituzione; in particolare si possono avere:
IP spoofing consiste nel modificare l'indirizzo IP in un pacchetto IP (i protocolli non connessi come IP sono molto vulnerabili); si può modificare l'indirizzo IP del mittente in modo da far credere di inviare le informazioni da un certo indirizzo IP, diverso dal proprio, in modo che il pacchetto sembri provenire da un computer fidato; ciò permette di aggirare i meccanismi di sicurezza che si basano sul controllo degli indirizzi IP; il sistema che subisce l'attacco invia le risposte al computer utilizzato per lo spoofing; ci si può appropriane di un indirizzo IP e intercettare i pacchetti che vi sono diretti ingannando un router per fargli credere che ci siano due percorsi per una destinazione, mentre in realtà esistono due destinazioni diverse, una vera e una usata dagli intrusi;
e-mail spoofing consiste nel mandare un messaggio di posta elettronica facendo sembrare che il messaggio provenga da un indirizzo e-mail diverso dal proprio. Per difendersi dall'IP spoofing si possono definire nel firewall delle regole di accesso che, oltre a controllare l'indirizzo IP controllino anche l'interfaccia da cui proviene il pacchetto (in questo modo è possibile per esempio evitare lo spoofing di indirizzi privati, provenienti però dall'esterno della rete).
Gli exploit sono attacchi che sfruttano le vulnerabilità del software; per vulnerabilità si intende un difetto del codice, dovuto a qualche errore o superficialità nella realizzazione del programma, che si presta ad attacchi.
Spesso la vulnerabilità è dovuta alla mancata validazione dell'input nel programma; non si deve lasciare all'utente la possibilità di inserire qualcosa che non è permesso. Se l'utente inserisce dati non corretti come minimo l'output non sarà corretto (si parla di GIGO - Garbage In Garbage Out), ma potrebbero esserci anche degli effetti indesiderati e pericolosi. Per esempio se in qualche caso il programma può eseguire delle divisioni per 0, questo fatto potrebbe essere sfruttato intenzionalmente per bloccare il programma.
Qualche volta la vulnerabilità è dovuta alla presenza di trapdoor nel codice; una trapdoor è un punto di ingresso non documentato a un modulo, inserito nel programma durante lo sviluppo del codice per esempio a scopo di test; la trapdoor può rimanere nel programma per dimenticanza o essere lasciata intenzionalmente a scopo di manutenzione o come mezzo nascosto di accesso.
Le vulnerabilità in genere possono essere sfruttate solo con procedimenti abbastanza complessi da individuare (una volta che sono stati individuati e pubblicizzati però possono essere usati anche da persone non eccessivamente competenti).
Per difendersi bisogna cercare di correggere le vulnerabilità del software installando le versioni più aggiornate e tutti i moduli di correzione offerti dal produttore (patch).
Per individuare quali servizi sono attivi sul sistema, e quindi quali vulnerabilità potrebbero essere presenti, gli attaccanti esaminano le porte in ascolto sul sistema (scansione delle porte).
I firewall possono proteggere dai tentativi di scansione delle porte; se un client tenta di accedere a una porta/indirizzo non disponibile tramite un firewall, il firewall accetta l'inizio della sessione (SYN) ma non risponde mai (risposta segreta); in questo modo un attaccante non può capire se l'indirizzo esiste o no, o se la porta è aperta o chiusa.
I firewall meno recenti inviano un reset (RST) informando che l'indirizzo non esiste Alcuni esempi di exploit sono:
buffer overflow un buffer overflow consiste nella scrittura in un buffer (un'area di memoria) di una quantità di dati superiore a quella contenibile dal buffer stesso, provocando intenzionalmente la sovrascrittura di zone di memoria adiacenti; l'hacker può usare un buffer overflow per attaccare un sistema remoto, sovrascrivendo parti di memoria riservate, iniettando del codice arbitrario e facendolo eseguire indipendentemente dalle restrizioni imposte sul sistema; in questo modo può riuscire anche ad ottenere il controllo totale del computer (o della rete se l'attacco avviene su un server di rete);
SOL injection con questo attacco si riesce a far eseguire comandi SQL arbitrari e non autorizzati ad una applicazione che esegue una query costruita in base a input passati da un utente;
cross site scripting un attacco cross site scripting (CSS o meglio XSS) consiste nell'inserire del codice javascript nelle pagine di un sito che accetta messaggi o commenti inseriti dagli utenti (per esempio un forum), sfruttando il fatto che il codice del sito non controlli l'input inserito; quando un utente accede alla pagina per visualizzare i messaggi ottiene anche gli script e la loro esecuzione.
Si ribadisce che questi attacchi sono possibili solo in presenza di codice vulnerabile cioè non realizzato in modo corretto e sicuro.
In tutti e tre i casi la possibilità di eseguire l'attacco dipende dalla mancata validazione dell'input da parte di chi ha scritto il codice.
Per evitare un buffer overflow basta controllare la dimensione dei dati inseriti.
Per evitare un attacco SOL injection si può controllare che vengano inseriti solo i caratteri strettamente richiesti o almeno sostituire i caratteri apice e virgolette con le sequenze di escape \' e \". Alcuni server Web fanno automaticamente la sostituzione con le sequenze di escape;
Un attacco cross site scripting si può evitare filtrando l'input degli utenti in modo da sostituire i simboli (come < o >) con i rispettivi codici esadecimali; in questo modo gli script non verranno eseguiti ma soltanto visualizzati.