Vulnerabilità dei Protocolli e Attacchi
Vulnerabilità ed Esposizioni
Concetti di base della sicurezza informatica
Vulnerabilità:
- Errore del software che può essere direttamente usato da uno hacker per avere accesso a sistemi o reti
- Sia nei programmi che nei protocolli di rete
- Non tutte sono state scoperte
- Non tutte è possibile correggerle
Esposizione:
- Errore di configurazione o di utilizzo del software che permette l'accesso a informazioni o l'utilizzo di capacità tali da facilitare ad uno hacker l'accesso a sistemi o reti.
- Configurazioni di default o di esempio
- Mancata comprensione dei rischi
Vulnerabilità: OWASP Top 10
OWASP (www.owasp.org
) - Open Web Application Security Project
Lista di vulnerabilità più comuni degli applicativi basati su Web:
- Evidenzia la moda corrente degli attacchi
- Aggiornato ogni qualche anno
- Non è completo
Rischio e Minacce
Tutti i protocolli TCP/IP contengono Vulnerabilità e il loro uso può coinvolgere in Esposizioni.
Le vulnerabilità vengono spesso tappate con opportuni patch al software. E' per questo che occorre compiere dei continui upgrade alla versione più recente del software.
Dalle esposizioni ci si può difendere solo parzialmente, con adeguata progettazione degli applicativi, con consapevolezza degli utenti, con contromisure degli amministratori.
Il tutto ricade in una adeguata Policy di Sicurezza Aziendale che si occupi di Gestione del Rischio.
Obiettivi:
- Identificare i processi aziendali e i loro requisiti IT associati. Stabilire priorità in base alla sensitività e criticalità temporali
- Identificare le minacce ai processi e alle infrastrutture
- Definire strategie per eliminare i rischi e minimizzare gli impatti dei rischi non eliminabili.
Classificazione delle Minacce
Aspetti della Difesa
- Acquisire consapevolezza dei problemi di sicurezza
- Policy di Sicurezza aziendale
- Personale addetto alla sicurezza
- Addestramento contro pratiche pericolose
- Requisiti minimi: Antivirus e Firewall
- Blindatura dei Server esterni
- Isolamento delle macchine deboli
- Piani di Recupero da Disastri
Blindatura dei Server
Con i seguenti aggiornamenti si compie più del 90% della protezione:
- Eliminare tutti i servizi inutili
- Aggiornare le patch di sicurezza dei servizi in uso
- Non usare mai autenticazioni in chiaro
- Non fidarsi mai dei protocolli di rete TCP/IP
- i controlli avvengono sugli applicativi
- Aumentare la Registrazione delle attività (log)
- Usare sempre solo canali di comunicazione crittografati
Buffer Overflow
E’ una vulnerabilità presente in un numero elevato di programmi scritti male.
Lo sfruttamento consiste nell’input al programma di una stringa molto lunga e complicata.
Questa è una operazione compiuta in automatico da un programma specifico di Exploit, non manualmente.
Il risultato è spesso il lancio di una shell con i privilegi del programma in esecuzione - anche amministrativi.
Vi sono molte varianti di Buffer Overflow, la più nota da tempo è l’overflow di uno Stack Frame.
Per approfondire: “Smashing The Stack For Fun And Profit”, Phrack Magazine, n. 49, file 14 (http://insecure.org/stf/smashstack.html
) - articolo molto tecnico.
La maggior parte dei programmi sono scritti in Linguaggio C o linguaggi derivati, e hanno le seguenti vulnerabilità:
- Vulnerabilità di struttura in memoria di un programma
- Ogni funzione ha il suo stack frame con variabili locali
- Gli stack frames sono allocati a memoria decrescente
- Le variabili sono allocate a memoria crescente
- All’inizio dello stack frame (memoria alta) c’è l’indirizzo di ritorno della funzione
- Vulnerabilità introdotta dal compilatore
- Il linguaggio C non controlla il superamento delle dimensioni dell’array dichiarato (overflow)
- Viene semplicemente sovrascritto quello che vi si trova
- Vulnerabilità di base dei computer
- L’architettura di Von Neumann di tutti i computer moderni non vede alcuna differenza tra un byte di dati e uno di istruzioni
Occorre che la funzione:
- allochi un buffer (array) di caratteri
- contenga una o più funzioni che non controllano l’overflow
- Sono tante: strcpy(), strcat(), sprintf(), scanf(), …
Il programma che invoca la funzione:
- fornisce una stringa più grande del buffer della funzione (causa un overflow)
- di solito letta da input di terminale o di rete
- l’input contiene caratteri che in realtà sono codice malefico
- spesso l’invocazione di una shell, da qui il nome ShellCode
- fa in modo di sovrascrivere l’indirizzo di ritorno della funzione con l’idirizzo del programma malefico
Molti programmi e protocolli di rete presentano queste vulnerabilità.
Non è facilissimo scrivere ShellCode (in assembler), ma è un’arte nota e sperimentata.
Contromisure:
- Scrivere bene i programmi
- Solo i programmi Open Source, con codice visibile, sono garanzia di qualità e di assenza di altro malware
- Non eseguire i programmi con privilegi amministrativi
- Se i programmi ne hanno bisogno in alcune parti: impostarli quando servono poi subito toglierli
- Eseguire i programmi in qualche tipo di contenitore
- Chroot, Jail, Docker, Macchine virtuali
- Per il Brownfield (codice legacy non modificabile - opposto di Greenfield - codice modificabile): *Eseguirli entro del codice involucro (wrapper) che impedisca gli overflow - esempio: Valgrind
- Adottare tecniche di randomizzazione della posizione dei dati negli stack frames (Linux Moderno)
- Non protegge da tutti i tipi di overflow