Swappa : Uni / Elementi di Sicurezza e Privatezza - Sicurezza nelle Reti
Creative Commons License

Torna alla pagina di Elementi di sicurezza e privatezza


 :: Sicurezza nelle Reti ::

Indice

  1. Connettività alla rete
  2. Tipi di attacchi
  3. Denial of service
  4. Attacchi ad applicazioni web
  5. Autenticazione in sistemi aperti
  6. Firewall

Connettività alla rete

Quali sono i vantaggi di connettersi a una rete? Che le reti private sono in grado di raggiungere e comunicare con il mondo esterno. Lo svantaggio principale è che il mondo esterno è in grado di raggiungere e interagire con le reti private.
I vantaggi di un computing network inoltre sono:

Gli svantaggi sono:

Le caratteristiche principali di una rete sono:

Sulla base di ciò ho due tipi di protocolli per gestire la rete:

  1. Protocollo TCP che gestisce il trasporto dei pacchetti. Il TCP simula un canale di comunicazione per spedire i pacchetti e ne controlla l'arrivo.
  2. Protocollo IP è quello che gestisce l'instradamento dei pacchetti. Esso identifica gli host con gli indirizzi e stabilisce dove deve andare un pacchetto.

Tipi di attacchi

Qualunque sia il tipo di attacco l'obiettivo primario di un attaccante è sempre quello di sottrarre informazione o degradare il sistema.
Ci sono due tipi di attaccanti:

Le quattro principali tipologie di attacco sono:
1. interruzione: una parte del sistema viene distrutta o diventa non utilizzabile. Questo è un attacco alla disponibilità del sistema.

2. intercettazione: quando un soggetto non autorizzato ottiene un accesso ad un componente del sistema. Alcuni tipi di attacchi possono richiedere una preparazione preventiva a livello fisico per installare dispositivi pirata per agganciarsi alla rete e per installare software di supporto alla intercettazione. Altri possono sfruttare debolezze intrinseche di protocolli e software di rete e il fatto che un utente abbia disatteso qualche norma comportamentale imposta dalla politica di sicurezza. Questo è un attacco alla confidenzialità del sistema. L'intercettazione è basata su:

3. modifica: soggetto non autorizzato entra in possesso di una componente del sistema, la modifica e la introduce di nuovo nel sistema. Questo è un attacco all'integrità

4. produzione: soggetto non autorizzato produce componenti nuove e le immette nel sistema. Sono attacchi tesi a degradare l'operatività del sistema con diverse tecniche:

Questi attacchi minacciano l'integrità e la disponibilità, più raramente e indirettamente la confidenzialità

Denial of service

Concentriamoci su questo tipo di attacco. Un attacco DoS (Denial of Service) ha come obiettivo quello di far saltare il servizio offerto da un sistema, quindi vedranno negato l'accesso al sistema(alle informazioni e ai servizi che offre) anche utenti autorizzati.
Un attacco di questo tipo viene realizzato inondando di richieste casuali la macchina obiettivo che non riuscirà più a sopportare il carico di richieste e smetterà di funzionare.
I diversi tipi di DoS sono:

Contromisure:
Gli stack moderni sono resistenti a questo tipo di attacco.
SYN COOKIE: il server prepara un cookie la cui integrità è garantita attraverso meccanismi di firma, con informazioni relative alla connessione, che rispedisce al client. In questo modo l'allocazione delle risorse viene posposta finché non si riceve il terzo pacchetto (ACK).
Contromisure:
Disattivare sul proprio router esterno la funzione di risposta delle richieste ICMP mandate all'indirizzo di broadcast della rete dall'aggressore.
La differenza con il DoS è che in DoS è l'utente malizioso a sferrare l'attacco mentre in DDoS l'utente lo scatena ma non lo effettua in prima persona. Nel DDoS gli attori sono:
Le fasi che caratterizzano questo attacco sono due:
1. Vengono infettate molte macchine che ricoprono il ruolo di zombie e master, questa fase può durare anche mesi.
2. Le vittime finali vengono inondate di richieste e pacchetti dalle zombie.

Attacchi ad applicazioni web

Gli script che risiedono su un web server possono interagire con altri sistemi attraverso database server o sergenti con contenuto dinamico. Anche questi sono vulnerabili a certi tipi di attacchi:

  1. cross-site scripting (XSS)
  2. SQL injection

L' XSS è un attacco che permette ad un malintenzionato di inserire codice arbitrario come input in un'applicazione web, consentendogli di raccogliere dati, leggere cookie, visualizzare falsa pubblicità e quindi modificare il contenuto del sito. Potenzialmente la vittima dell'attacco non è solo il sito ma anche l'utente perché un semplice link che porta ad una pagina di un sito non protetta può creare danni. Può essere dovuto a due fattori:

  1. siti web che si fidano dei dati che arrivano dall'esterno: quando non c'è da parte del sito un sufficiente controllo dell'input e quindi l'attaccante è in grado di inviare uno script sapendo che questo non verrà controllato, anzi verrà eseguito.
    Ad esempio un forum dove è possibile scrivere messaggi in codice HTML senza alcun controllo: l'attaccante inserisce uno script e gli utenti che accedono a quel messaggio del forum vengono reindirizzati su un altro sito dove sono presenti altri script che raccolgono dati.
  2. siti web spesso visualizzano quello che ricevono in input (echo back): quando viene utilizzato il metodo HTTP GET e quindi le informazioni ricercate vengono trasmesse tramite URI in chiaro. In questo modo se ad esempio sono in un motore di ricerca e cliccando su cerca invio la richiesta, questa viene visualizzata nell'URI ed è facile recuperare le informazioni della variabile che effettua la ricerca e possiamo sfruttare questa vulnerabilità modificando il GET di ritorno per accedere a dati ad esempio del database a cui non potremmo accedere.

Contromisure:

L' SQL injection invece è un attacco rivolto alle applicazioni web e coinvolge non solo SQL, ma qualsiasi linguaggio di programmazione e qualsiasi DBMS.
L'attacco consiste nell'inserimento di codice maligno nelle query SQL, sfruttando la mancanza di controlli sui dati da input dell'applicazione web.
L'input può essere trasmesso in tre modi:

L'attacco provoca:

Esempio:
Abbiamo una variabile $id presa in input dalla query string, teoricamente di tipo intero, ma non validata.
$sql = "SELECT * from articoli WHERE id=$id";
se un attaccante in $id inserisce
$id = 1; DROP table articoli; la query diventerà:
$sql = "SELECT * from articoli WHERE id = 1; DROP table articoli;
che ovviamente provoca la cancellazione della tabella articoli.

Contromisure possibili sono:

Autenticazione in sistemi aperti

Autenticarsi in sistemi aperti significa che gli utenti devono dimostrare la propria identità per ogni servizio utilizzato e i server devono garantire la propria identità al client. Per controllare chi è chi e cosa è cosa si sono create delle carte d'identità particolari chiamate certificati digitali.
Un certificato digitale è un documento elettronico che attesta, con una firma digitale, l'associazione tra una chiave pubblica e l'identità del soggetto. Esso è garantito da una terza parte fidata nota col nome di Certification Authority (per gli amici CA) che rilascia il certificato digitale contenente le informazioni dell'utente per cui rilascia il certificato, oltre alla chiave pubblica.
Il certificato lega il nome di un soggetto ad una chiave pubblica e per verificarne l'autenticità basta confrontarla con la chiave pubblica della CA.
La creazione di un certificato digitale avviene tramite queste fasi:
1. l'utente deve provare la propria identità alla CA (certification authority)
2. la CA verifica l'autenticità della chiave

3. la CA crea un certificato digitale inserendo la chiave pubblica e i dati identificativi dell'utente
4. la CA firma il certificato con la propria chiave privata

Lo standard più diffuso per la rappresentazione di certificati è lo standard X.509. Esso definisce:

Lo standard X.509 supporta due principali sistemi di revoca:

Il CRL (certificate revocation list) è una lista di certificati revocati che viene sempre controllata prima di considerare un certificato valido.
Per ogni certificato revocato il CRL contiene le seguenti informazioni:

Non esiste una singola CA che certifica tutte le chiavi pubbliche, ma sono organizzate in modo gerarchico: la root authority firma certificati per authority di livello più basso, authority di basso livello firmano certificati per singole reti e così via creando catene di certificati.

Firewall

Un firewall è un sistema di controllo degli accessi che verifica tutto il traffico che transita attraverso lui. In particolare:

Permette o nega il passaggio del traffico basandosi su una politica di sicurezza quindi significa che non rileva i percorsi non previsti dalla politica. Purtroppo controlla solo ciò che passa attraverso di lui perciò intrusioni dall'interno non sono rilevate e nemmeno se arrivano da un percorso non controllato. Inoltre non controlla file infetti da virus.
Le due specifiche ad alto livello, della politica di sicurezza, previste sono:

Un concetto legato ai firewall è la Demilitarized Zone(DMZ):
è un segmento isolato di LAN (una "sottorete") raggiungibile sia da reti interne che esterne che permette, però, connessioni esclusivamente verso l'esterno: gli host attestati sulla DMZ non possono connettersi alla rete aziendale interna.
Tale configurazione viene normalmente utilizzata per permettere ai server posizionati sulla DMZ di fornire servizi all'esterno senza compromettere la sicurezza della rete aziendale interna nel caso una di tali macchine sia sottoposta ad un attacco informatico. Per chi si connette dall'esterno dell'organizzazione la DMZ è infatti una sorta di "strada senza uscita" o "vicolo cieco".(from Wikipedia)

Ci sono diversi tipi di firewall:

Un'altra distinzione possibile è:

Ora analizziamo in dettaglio il packet filtering: i pacchetti vengono filtrati solo sulla base delle informazioni presenti nell'header, quindi: indirizzo sorgente, indirizzo destinazione, porta sorgente, porta destinazione, tipo di protocollo, opzioni di protocollo.
Come già accennato sopra questo tipo di filtraggio non riesce a tracciare la correlazione tra pacchetti in una trasmissione, perché non mantiene informazioni sullo stato della connessione.

Le regole di filtraggio possibili per questa politica sono:

  1. controllare gli indirizzi usati per chiudere/aprire il traffico da determinate sorgenti a determinate destinazioni.
    Quindi ad esempio se abbiamo un pacchetto che arriva sull'interfaccia esterna che però ha un mittente della rete interna lo si blocca.
  2. controllare i numeri di porta usati per bloccare/permettere servizi noti.
  3. bloccare un protocollo sospetto.
  4. una combinazione dei precedenti.

Le regole di filtraggio sono memorizzate in uno specifico ordine e ogni regola è applicata al pacchetto nell'ordine in cui è memorizzata.
Perciò:
- se una regola blocca la trasmissione/ricezione di un pacchetto il pacchetto è rifiutato, se la regola lo permette il pacchetto è permesso.
- se invece il pacchetto non soddisfa nessuna regola si applica la regola di default: deny, politica chiusa(tutto ciò che non è espressamente permesso viene negato).

Svantaggi Packet Filter:

  1. nelle connessioni TCP i numeri di porte minori di 1024 sono permanentemente assegnati a server.
  2. client usano porte nel range [1024, 16383] e devono perciò essere disponibili per i client per ricevere response.
  3. pacchetti in input diretti a qualche client con porta superiore a 1024 devono essere permessi (potrebbe essere la risposta di un server ad una connessione stabilita precedentemente o un traffico illecito, ma non si può saperlo con certezza se non si tiene traccia dello stato di ogni connessione).
  4. non è possibile accettare il traffico in ingresso solo se relativo ad una richiesta proveniente dall'interno (se il protocollo è TCP, cioè connection-oriented, si può fare; ma se è UDP, cioè connection-less, non si può).

Torna alla pagina di Elementi di sicurezza e privatezza

(Printable View of http://www.swappa.it/wiki/Uni/ESP-SicurezzaNelleReti)