|
Attacco
Le svariate tipologie di attacco possono
essere raggruppate in queste quattro categorie:
- Acquisizione di informazioni: non
è una tipologia di attacco vera e propria ma un insieme di azioni che
anticipano un attacco. Esempi potrebbero essere: scanning e sniffing.
- Accesso non autorizzato: un
intruso ottiene l'accesso ad una rete o ad un computer non avendone
l'autorizzazione dopo di ciò potrebbe ottenere l'accesso ad ulteriori
informazioni o bloccare determinati servizi.
- Accesso alle informazioni (ed
eventuale modifica): l'operazione di accesso alle informazioni e
l'eventuale modifica potrebbe derivare da un accesso non autorizzato al
sistema mediante interrogazione a servizi esistenti o mediante spoofed
mail.
- Denial of Service (interruzione
del servizio): l'intruso rende un sistema, un servizio o una rete non
disponibile esaurendone le risorse, siano queste risorse di rete
(banda), connessioni TCP (Syn Floods) o spazio disco (effettuando un
upload di dati o causando delle registrazioni nei logs). Potrebbe
avvenire anche mediante impersonazione del sistema avversario. Non
richiede nessun accesso al sistema.
Metodi di attacco
I metodi da utilizzare sono vari ed a volte
possono essere combinati insieme. A fattor comune vi è sempre una logica
di attuazione:

Clic per ingrandire
Da segnalare a questo proposito:
-
Il lavoro, sempre in evoluzione,
sviluppato da Pete Herzog, fondatore di ideahamster.org
che attraverso il progetto "Open
Source Security Testing Methodology Manual", ora disponibile sul sito
isecom.org, ha reso
disponibile un vero e proprio manuale open source incentrato sulle
metodologie e gli strumenti da utilizzare per effettuare le varie
verifiche;
- Le raccomandazioni del
NIST contenute nel
documento "Guideline
on Network Security Testing" - Pubblicazione 800-42;
- Lo studio commissionato dal
BSI (Bundesamt für
Sicherheit in der Informationstechnik) dal titolo "Durchführungskonzept
für Penetrationstests";
- Il capitolo relativo al
Penetration Testing presente nella pubblicazione
Navy Handbook for the Computer Security Certification of Trusted Systems,
edita dal Naval Research Laboratory della Marina degli Stati Uniti.
Vediamo adesso i diversi metodi a nostra disposizione, partendo dal social
engineering.
Social Engineering
Il meno tecnico dei metodi di attacco.
Consiste nell'acquisizione di informazioni parlando dei metodi di
sicurezza con la gente sfruttando il fatto che di solito si è portati ad
aver fiducia e ad aiutare gli altri. L'attaccante finge di essere una
persona degna di fiducia. La migliore difesa consiste nell'autenticazione
(chiamata di conferma e richiesta di autenticazione).
Acquisizione di informazioni
Ci sono diverse tecniche per acquisire
informazioni utili all'attaccante:
- Dumpster diving: analisi dei
rifiuti alla ricerca di organigrammi (per trovare nomi di persone da
impersonare in un attacco di social engineering), archivi cartacei,
appunti o altre informazioni.
- Shoulder surfing: consiste nello
spiare stando alle spalle le operazioni di inserimento di informazioni
sensibili (password, codici di accesso, numeri telefonici).
- Scanning: il tentativo di
connettersi ad un intervallo di numeri di porta o indirizzi IP per
vedere quali servizi o sistemi sono presenti ed attivi.
- Servizi di base (Basic services):
i servizi di base (finger, netstat, primitive SMTP VRFY e EXPN) possono
essere utilizzati da un attaccante per ottenere informazioni sugli
utenti o per verificare l'esistenza di un utente.
- Sniffing: Il processo di
acquisire il traffico di rete utilizzando un analizzatore di protocollo.
E' necessario un accesso alla rete.
- Version information: è utilizzata
per fornire informazioni all'attaccante circa le problematiche di
sicurezza note (known security holes) all'interno della rete.
Sfruttamento di relazioni di fiducia mal
gestite Le relazioni di fiducia
sono degli strumenti potenti e potenzialmente pericolosi che possono sia
aumentare la produttività degli utenti che, se mal gestite o peggio,
lasciate nella loro configurazione "di vendita", creare delle vaste brecce
nella sicurezza.
- User Accounts e Passwords: la più
semplice delle relazioni di fiducia soffre di queste problematiche:
- Gli utenti tendono a scegliere delle
passwords semplici da ricordare.
- Se gli utenti sono portati a scegliere
passwords difficili da ricordare tendono a scriverle da qualche parte.
La soluzione prevede l'uso di software in grado di generare passwords
difficili ma allo stesso tempo semplici da ricordare.
- Le passwords sono suscettibili ad un
attacco di sniffing.
- I files che contengono le passwords
sono a volte accessibili e quindi decrittabili utilizzando strumenti
sviluppati ad hoc (NTCrack, LC).
- La soluzione potrebbe essere quella di
utilizzare uno schema di password resistente, a singolo uso,
memorizzato su token card.
- Windows Disk Sharing: L'accesso
alle risorse avviene o attraverso quelli che sono i diritti dell'utente
una volta autenticato all'interno della rete (Dominio NT) o sulla base
della singola condivisione, o senza autenticazione (MS Windows 95/3.11).
L'accesso da parte di un attaccante potrebbe essere causato da
un'erronea assegnazione dei permessi. Quindi, per un utilizzo di questa
risorsa bisognerebbe prevedere un'amministrazione tesa a ridurre i
privilegi ed a filtrare o bloccarne l'uso dall'esterno della rete.
Venendo a mancare tutto questo, questa funzionalità non dovrebbe essere
utilizzata.
Sfruttamento di servizi non autenticati
Un certo numero di servizi di rete non
utilizzano l'autenticazione, e per questo possono facilmente subire un
attacco di spoofing o l'accesso e la successiva modifica delle
informazioni:
- TFTP: si basa solo sui permessi
del filesystem e potrebbe essere utilizzato per acquisire files
sensibili del sistema.
- SMTP: la maggior parte dei
sistemi non effettuano dei controlli sulla vera identità degli utenti e
quindi possono essere utilizzati per un attacco di spoofing.
- DNS: il sistema potrebbe essere
sensibile ad un attacco di spoofing, portando l'utente a connetersi al
sistema sbagliato.
- RIP: visto che il protocollo non
utilizza l'autenticazione, qualsiasi sitema o router in ascolto di
pacchetti di RIP potrebbero essere indirizzati verso la rete errata dove
l'attaccante potrebbe (per esempio) intercettare o almeno monitorare il
traffico.
- Redirezione ICMP: soffre degli
stessi problemi del protocollo RIP.
La migliore soluzione consiste nel
disabilitare i servizi che non vengono utilizzati o limitarne
l'uso/accesso agli elementi della rete degni di fiducia. La migliore
soluzione in assoluto per l'SMTP è la crittografia o l'autenticazione.
Sfruttamento dei servizi centralizzati
I servizi centralizzati vengono utilizzati per
la gestione dei sistemi connessi alla rete:
- SNMP: SNMP utilizza un community
name come password che viene trasmesso in chiaro e che di solito è
uguale a 'public'.
L'utilizzo di questi servizi dovrebbe
essere ridotto alle reti sicure.
Malicious Data Le nuove
caratteristiche dei software permettono azioni non pianificate durante la
fase di sviluppo degli stessi:
- Vulnerabilità intenzionali, per
esempio:
- Macros (per esempio in MS Office);
- Primitive di I/O nei files PostScript;
- Java & ActiveX;
- Funzionalità di Autoplay attiva (MS
Windows).
La soluzione ovvia sarebbe quella di
disabilitare queste funzionalità, in attesa dello sviluppo delle stesse
con caratteristiche più sicure; ma questo potrebbe limitare l'utilità
dei programmi verso gli utenti.
- Vulnerabilità non intenzionali:
- Dati inseriti in un programma non
validi;
- Buffer overflow: viene
utilizzato per interrompere il funzionamento di un sistema o per
ottenerne l'accesso. E' richiesta una rilevante conoscenza tecnica
nell'analisi delle variabili di una applicazione alla ricerca di
valori non testati o al di fuori dei limiti consentiti. In pratica, il
codice dell'attaccante invia una stringa in ingresso che è superiore
al buffer allocato dal programma e sovrascrive il byte successivo in
memoria che potrebbe contenere i valori puntati dallo stack. Visto che
questi valori indicano al programma dove andare per eseguire le
prossime istruzioni, inserendo all'interno dei dati ben calcolati,
l'attaccante potrebbe reindirizzare il tutto per far si che vengano
eseguite delle operazioni presenti nella stringa di input.
L'operazione è mirata ad una specifica variabile di uno specifico
programma su uno specifico hardware o piattaforma software.
L'unica soluzione è quella di analizzare
in fase di sviluppo la lunghezza delle variabili in input.
Spoofing
E' la capacità di sostituirsi a
qualcuno/qualcosa.
- User account spoofing: usare nome
utente e password di un altro utente senza averne il diritto. Può
avvenire utilizzando strumenti come sniffing e password crackers.
- DNS spoofing: invio di una
risposta DNS ad un Name Server nella rete della vittima. E' difficile da
contrastare ma è anche difficile da attuare.
- IP Address spoofing: è l'attacco
più diffuso. Si basa sul fatto che la maggior parte dei routers
all'interno di una rete controllino solo l'indirizzo IP di destinazione
e non quello sorgente. Questo fa si che un attaccante possa inviare dei
pacchetti ad un sistema bersaglio e le risposte di quest'ultimo saranno
invece inviate al falso IP utilizzato dall'attaccante. L'IP spoofing
potrebbe essere limitato inserendo dei filtri sull'indirizzo IP sorgente
a livello routers.
- IP Address spoofing e TCP Sequence
Number Prediction: utilizzato da Kevin Mitnick contro Tsutomu
Shimamura. E' suddiviso in diversi passaggi

1. L'attaccante (X) apre diverse
connessioni TCP successive per determinare il modo con cui viene
generato il numero di sequenza TCP sull'host della vittima. Quindi
effettua un TCP Syn Flood di A, l'host a cui si deve sostituire.
2. L'attaccante invia un pacchetto a B
pretendendo di essere A ed imposta il flag SYN nel pacchetto.
3. B invia un pacchetto ACK, SYN ad A che
non può riceverlo perchè è sottoposto al flooding. L'attaccante deve
indovinare quale sarà il valore utilizzato nella parte di SYN del
pacchetto basandosi sulle analisi fatte nel punto 1.
4. L'attaccante invia l'ultimo pacchetto
dell'handshake a 3 passaggi del TCP a B (ACK al posto di A più il numero
di sequenza indovinato) ed invia dei comandi a B impersonando una
eventuale relazione di fiducia esistente con A.
Questo tipo di attacco può essere evitato
filtrando l'indirizzo IP sorgente ed utilizzando software che non
utilizzino degli algoritmi che consentano di indovinare i numeri di
sequenza TCP.
Sfruttamento di bugs nel software
Molti problemi di sicurezza nascono come bugs
nel software e possono essere raggruppati in:
- Software complesso: più il
software è complesso maggiore è la probabilità di sbagliare;
- Opzioni per il debug o trapdoors
inserite dal programmatore: inserendo una certa parola il programma
esegue una determinata operazione a volte non documentata;
- Scarsa pratica di programmazione:
il programmatore per mancanza di esperienza non sviluppa il programma
valutando tutti gli accorgimenti necessari dal punto di vista della
sicurezza:
- non verifica la lunghezza delle
variabili di input;
- non verifica la corretta
implementazione dei protocolli (ping of death);
- condizioni transitorie non valutate:
il programma effettua delle operazioni passando da un livello ad uno
con diritti superiori. Riuscendo a bloccare il programma si potrebbe
ottenere una shell con i diritti associati al programma in quel
momento.
- Scarsa protezione dei segreti: molte
applicazioni inviano o memorizzano informazioni sensibili in chiaro
oppure utilizzano algoritmi crittografici facilmente decrittabili. Lo
stesso dicasi per i protocolli (FTP/Telnet/SMTP/POP3).
- Anomalie nel protocollo:
difficili da prevenire, sfruttano caratteristiche del protocollo non
analizzate:
- Frammentazione IP: l'attaccante invia
un secondo frame IP con una parte che si sovrappone al primo già
ricevuto.
- TCP SYN Flood (o clogging):

E' un attacco di tipo Denial of Service
(DOS) che può interrompere un servizio su un host inviando solo da 4 a
6 pacchetti ogni due minuti. Funziona utilizzando l'handshake a 3
passaggi del TCP. Nell'attacco X
invia il primo SYN fingendo di essere un indirizzo IP che non esiste
(NOBODY). B invia un SYN, ACK al sistema che non esiste ed attende da
questo l'invio dell'ACK. Questa attesa a volte può durare fino a 76
secondi. Nel frattempo comunque
il sistema occupa risorse per attendere l'eventuale risposta
all'interno del Backlog Queue, un'apposita area, riservata a questo,
ma limitata comunque in quantità (dipende dall'implementazione del
fornitore e può variare da 6 a 10 slots o più). Se l'attaccante invia
un numero di pacchetti tale da riempire il Backlog Queue, il sistema
attaccato non sarà più in grado di accettare connessioni e
l'amministratore potrebbe anche non accorgersi di nulla. Le soluzioni
sono diverse:
- adottare dei software in grado di
rilevare l'anomalia e di inviare dei pacchetti RST al sistema
attaccato per ripulire il Backlog Queue;
- impiegare un SYN Cookies Firewall
(Linux/SunOS).
Denial of Service
Causano la perdita dell'utilizzo di una
risorsa sovraccaricandola, ma non ne permettono l'accesso all'attacante. I
principali attacchi sono:
- Ping floods: invio di ICMP echo
request in numero maggiore a quelli gestibili dalla rete o dal sistema
attaccato (FPING);
- Out of Band Data Crash:
l'attaccante invia un pacchetto con l'Urgent Pointer impostato e visto
che la macchina bersaglio non lo gestisce ne causa il crash oppure il
riavvio.
- TCP SYN Floods, Ping of Death, UDP
Bombs ...
Le soluzioni al problema non sono semplici.
Nel caso dell'ICMP si può risolvere inserendo dei filtri. Alcuni servizi
possono essere interrotti, ma non lo si può fare con tutti visto che
questo non farebbe altro che far raggiungere lo scopo prefissato
dall'attaccante.
|