Inside Yahoo Attack: Analisi e Difesa.






Cos'e' successo




Lunedi 8 Febbraio, i servizi di yahoo non sono stati accessibili per circa 3 ore.
La compagnia dichiara che si e' trattato di un attacco di tipo "distributed denial of service" partito da una cinquantina di computer.
Appena accorti dell'attacco hanno installato un "rate filter" che ha riportato il servizio al funzionamento normale.







Cos'e' un attacco di tipo "denial of service"




In questo tipo di attacco si cerca di portare il funzionamento di un sistema (che fornisce il servizio) al limite, lavorando su uno dei parametri d'ingresso.

Nel caso di yahoo, l'attacco si chiama smurf e viene attuato cosi':
Si manda un pacchetto di "echo request" ad un indirizzo di broadcast.
Il router dell'indirizzo di broadcast puo' convertire l'indirizzo di broadcast IP in broadcast in un broadcast di livello inferiore.
Ad esempio per una rete ethernet viene convertito l'indirizzo di broadcast IP in FF:FF:FF:FF:FF:FF, cioe' diretto a tutti i computer che ricevono il pacchetto.
Ogni computer che riceve questo pacchetto di "echo request" risponde al mittente con un pacchetto "echo reply".
Chi manda il pacchetto mette come mittente, non il proprio indirizzo ma quello dell'host da colpire, al quale arrivano cosi' tanti pacchetti "echo reply".
Quindi per ogni pacchetto "echo request" mandato, al "bersaglio" arrivano tanti pacchetti quanti sono i computer che rispondono; la richiesta iniziale viene, cioe', amplificata di un certo numero di volte.


Qui possiamo vedere una rappresentazione molto semplificata dell'attacco: agli indirizzi sono stati sostituiti dei "nomi simbolici".



		PASSO 3
				
	   <- 4 Echo reply				   PASSO 1
             ( da: PC1, PC2, PC3, PC4   
                a: Obiettivo)     +------------+       <- Echo reqest
	    		          |   Router   |   	 ( da: Obiettivo
  	    		 ||=======|	       |            a: Tutti i PC )
+-----------+		 ||   	  |	       |======	     
|  	    |		 ||	  +------------+     ||	     +----------+
|  	    |============||	   |  |   |   |	     ||	     | 		|
| OBIETTIVO |			   |  |   |   |	     ||	     | ATTACKER |
|  	    |			   |  |   |   |	     ||	     |		|
|  	    |		    	   |  |   |   |	     ||      |		|
|  	    |			   |  |	  |   |      ||      |          |
|           |			   |  |   |   |      ||======|		|
|   	    |		     	   |  |   |   |              |		| 
|     	    |		     	   |  |	  |   |		     |		|
|	    | 		 +---------|  |   |   |		     +----------+
+-----------+		 |    	      |   |   |
	  		 |	  +---|	  |   |------+
		 /|\	 |	  |	  |          |  /|\
       Echo reply |  +-----+  +-----+  +-----+	+-----+  |   Echo reply  
    ( da: PC1     |  | PC1 |  |	PC2 |  | PC3 |	| PC4 |  | (da: PC 4
       a: Obiettivo) |     |  |	    |  |     |  |     |	     a: Obiettivo)
		     +-----+  +-----+  +-----+  +-----+	
		Echo reply /|\      /|\   Echo reply
	   ( da: PC2 	    |	     |  ( da: PC3
	      a: Obiettivo) |	     |     a: Obiettivo)
	      
	      
	                      PASSO 2 






Se invece di mandare un solo pacchetto "echo request" alla volta, si mandano un certo numero di pacchetti, all'host "bersaglio" arriva un "flusso di dati" molto piu' grande di quello di partenza (uguale a quello iniziale moltiplicato per il numero di computer che rispondono).
Chi attacca, deve cercare di avere una buona "banda" in uscita e per tutto il percorso che faranno tutti i pacchetti.
I migliori computer, a questo scopo, sono quelli di universita', grandi organizzazioni (es. NASA), e grandi gruppi industriali (es. SUN).








Cos'e' un attacco di tipo "distributed denial of service"




E' un attacco di tipo "denial of service", in cui si fa uso di un "gran" numero di macchine per aumentare il flusso di dati verso l'host "bersaglio".

Nel caso di yahoo e' stato usato il "Stacheldraht":
Questo ha un rapporto gerarchico (su tre livelli) tra le varie macchine:

                   +--------+             +--------+
                   | client |             | client |
                   +--------+             +--------+
                       |                      |
        . . . --+------+---------------+------+----------------+-- . . .
                |                      |                       |
                |                      |                       |
          +-----------+          +-----------+           +-----------+
          |  handler  |          |  handler  |           |  handler  |
          +-----------+          +-----------+           +-----------+
                |                      |                       |
                |                      |                       |
. . . ---+------+-----+------------+---+--------+------------+-+-- . . .
         |            |            |            |            |
         |            |            |            |            |
     +-------+    +-------+    +-------+    +-------+    +-------+
     | agent |    | agent |    | agent |    | agent |    | agent |
     +-------+    +-------+    +-------+    +-------+    +-------+


I client "gestiscono" tutte le fasi dell'attacco, gli handler ricevono i "comandi" dai client e li passano agli agenti (ad esempio di far partire un attacco smurf) che li eseguono.

"Stacheldraht" e' un'evoluzione di "Tribe Flood Network" e di "trinoo", a cui agginge la cifratura di tutte le comunicazioni tra i vari compnenti (e l'aggiornamento degli agenti).

Per poter utilizzare "Stacheldraht", servono gli account (da root) sulle varie macchine che faranno da "handler" e da "agenti" (per poter installare i vari demoni).

La connessione tra client e handler avviene con un canale TCP cifrato (e protetto da password) e con pacchetti ICMP.

La connessione tra agente e handler viene verificata (periodicamente) con pacchetti ICMP echo reply, con ID 666 e data field "skillz" verso l'handler e ID 667 e data field "ficken" verso l'agente.

L'agente, inoltre, per verificare se la rete permette lo spoofing manda fuori un pacchetto ICMP con indirizzo mittente 3.3.3.3, ID 666, e indirizzo dell'agente nel data field. Se l'handler riceve il pacchetto, risponde all'agente con un echo reply, con ID 1000 e nel data field "spoofworks".

Se l'agente riceve un pacchetto echo reply con ID 668, risponde con un echo reply con ID 669.









Come prevenire e difendersi dagli attacchi.




Come per qualunque tipo di attacco, il modo migliore per prevenirli e' di tenere TUTTI i sistemi aggiornati con le patch di sicurezza ed avere un buon amministratore di sistema.


Prevenire lo "smurfing" puo' essere fatto a diversi livelli:
- filtraggio dei pacchetti provenienti dalle proprie reti (ma con mittenti "spoofati"), per prevenire lo spoofing (ingress filtering).
- configurare i router per non convertire il broadcast da livello 3 (IP) al 2. (tranne in pochi casi, non si hanno problemi (es: rete smb senza wins) )
- configurare il router (quelli predisposti) per limitare un certo tipo di traffico (traffic shaping/policy shaping).
(esempio si puo' dedicare, nel caso di un server web, il 90% della banda a traffico di tipo "web" per assicurare una certa Qualita di Servizio (QoS) )
Questa misura puo' essere presa anche dopo l'attacco, che poi e' quello che ha fatto yahoo.


Per prevenire l'uso di Stacheldraht (sulle macchine intermedie, e non sul bersaglio) basterebbe filtrare tutti i pacchetti ICMP echo reply, per "tagliare" i canali di comunicazione tra handler e agenti.

Piu' facile e' evitare che vengano installati, tenendo d'occhio advisories e patch di sicurezza per i propri sistemi.


Internet e' una "comunita' ", e la (in)sicurezza di ognuno dipende da quella complessiva.