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

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.

Rischio01

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

Minacce01

Aspetti della Difesa

Forkmod

  • 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:

Petrus

  • 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

Boverflow

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