giovedì 15 maggio 2014

TCP e la mia sfera di cristallo

Alcuni ricercatori israeliani hanno pubblicato da poco un articolo scientifico su una rivista molto prestigiosa in cui dimostrano la fattibilità di una cosa molto interessante. Ne parlo qui come ulteriore esempio del fatto che la mia sfera di cristallo personale funziona davvero. E' necessaria una introduzione.

Un client ha aperto una connessione TCP con un server. E' possibile che un attaccante riesca ad iniettare dati in quella connessione ?

Il server riceverebbe dalla connessione dati generati dall'attaccante, invece che dal client; allo stesso modo, il client riceverebbe dati generati dall'attaccante invece che dal server.

La gravità potenziale di attacchi del genere è evidente.

In Reti di Calcolatori II analizziamo (anche) questa tipologia di problemi. L'analisi è molto istruttiva, non solo per il risultato (un attaccante che si trova in mezzo tra il client ed il server può fare di tutto, compresi questi attacchi) ma soprattutto come "esempio storico":
  • 1985: La gente inizia a rendersi conto che anche un attaccante che non si trova in mezzo tra il client ed il server può iniettare dati in una connessione esistente---faccenda evidentemente terribile.
  • Gli attacchi cominciano a verificarsi davvero.
  • 1995: Tutte le implementazioni di TCP vengono modificate in modo da rendere impossibili tali attacchi. Tralasciando i dettagli, il valore iniziale di un certo contatore viene scelto in modo pseudo-random. Il numero di tentativi che deve fare un attaccante per iniettare dati diventa talmente elevato da rendere l'attacco impraticabile. Tutti contenti. Tutti.
  • 2001: Dopo ben 6 anni, qualcuno si rende conto che l'analisi statistica effettuata era sbagliata: il numero di tentativi da fare è mooooolto minore di quello che si pensava ed è sufficientemente piccolo da essere praticabile. Viene introdotta una nuova modifica. Tutti contenti. Tutti.
  • 2004: Dopo altri 3 anni si scopre che la nuova modifica soffre essenzialmente dello stesso problema di quella precedente. Ancora una nuova modifica. Tutti nuovamente contenti.
Per ben due volte, un problema estremamente pressante per mezzo mondo è stato studiato dalle aziende ed organizzazioni più all'avanguardia; tutti convinti di averlo risolto; tutti si erano sbagliati; sono stati necessari anni per rendersene conto (inutile dire che durante questi anni nessuno sa cosa gli attaccanti siano riusciti a fare in segreto, ma questa è un'altra faccenda).

Esempio istruttivo di uno degli aspetti fondamentali della sicurezza informatica: oggi tutto il mondo ritiene che una certa azione non è fattibile; domani qualcuno dimostra che tutti (tutti) si erano sbagliati. E' già successo molte volte, per molti protocolli.

Dal 2004 si ritiene che se un attaccante non si trova in mezzo al client al server, "data injection may be possible. However, this has not been demonstrated and it appears to be problematic". Nelle mie slide scrivo dopo questa frase:



Bene, cosa è stato dimostrato proprio pochissimi giorni fa ? "We present attacks that allow an off-path adversary to learn the client port and sequence numbers, and thereby to inject traffic into the TCP connection". Pertanto, ancora una volta si erano sbagliati tutti.

Loro sono andati addirittura oltre. Come discutiamo a Reti II, iniettare dati è solo parte del problema. E' necessario anche che i dati corrispondano a ciò che il livello applicativo si aspetta di ricevere (se un server POP si aspetta di ricevere un comando USER e riceve invece un comando PASS iniettato in modo fraudolento dall'attaccante, allora il server non accetta il comando fraudolento; per un attaccante che non si trova in mezzo e non riesce a vedere il traffico, risolvere questo problema di sincronizzazione è enormemente difficile). Bene, loro sono riusciti anche a falsificare le risposte del server e, quindi, a fornire al browser dati scelti da loro: "we show how to...inject spoofed objects such as scripts and web pages to a connection with a victim web site".

Traduzione: il browser si collega con un server; il browser riceve la pagina fornita dal server, alla quale l'attaccante ha aggiunto script ed elementi scelti da lui. Inutile sottolineare le implicazioni.

La mia sfera di cristallo funziona molto bene.
Posta un commento