Bug del Kernel: SACK

L’ufficio di sicurezza di Netflix, per mano di Jonathan Looney, ha pubblicato una serie di bug presenti nel kernel Linux piuttosto spiacevoli che riguardano il trasferimento via TCP, e in particolare la feature SACK (Selective ACK – conferma selettiva).

Ma cerchiamo di fare chiarezza: si può immaginare il trasferimento via TCP come la trasmissione di un libro pagina dopo pagina; l’invio, però, avviene a gruppi, ed il numero di pagine per ogni gruppo può variare durante il trasferimento; dopo ogni invio si aspetta risposta dall’altro capo per sapere qual è l’ultima pagina arrivata (ACK, conferma), e ricominciare l’invio dal gruppo immediatamente successivo a quella. La funzionalità SACK permette di sapere, dopo ogni trasmissione, quali pagine di un gruppo non siano arrivate, così da poter inviare nuovamente solo quelle, e non l’intero gruppo di pagine; questo rende -teoricamente- più efficiente il trasferimento.

Questa feature è disponibile dal kernel 2.6.29 (più di 10 anni fa), ed a quanto pare è sempre stata fallata; inoltre, la stessa problematica si riscontra anche nei kernel deii sistemi FreeBSD.
Usando ad arte le informazioni fornite durante la connessione e usate da SACK, un client remoto è in grado di occupare memoria e far rallentare l’intero sistema server; la cosa impressionante è che talvolta è possibile compromettere le informazioni tenute nel kernel al punto da scatenare un kernel panic, bloccando completamente il server. Come già detto, piuttosto spiacevole.

Il rischio reale risulta però piuttosto contenuto, in quanto solo i servizi direttamente esposti possono essere presi di mira; e qui il mondo può essere generalmente diviso due:

  • casalingo, che non espone servizi (se non in casi particolari);
  • enterprise, che espone servizi ma, tipicamente, attraverso altri apparati (bilanciatori, reverse proxy, firewall), quindi indirettamente.

Il problema è che, sicuramente, c’è tutta una zona grigia in queste due aree in cui sistemi Linux sono effettivamente esposti su Internet, così come -andando a guardare sotto il cofano- è possibile notare che gli stessi apparati hardware tendono a loro volta ad appoggiarsi a sistemi Linux/FreeBSD e, quindi, risultano comunque vulnerabili

Fortunatamente è presente una mitigation per ovviare al problema, disattivando a livello di kernel la funzionalità SACK:

echo 0 > /proc/sys/net/ipv4/tcp_sack

Ovviamente, ricordate anche di istruire la vostra distribuzione per applicare questa modifica al boot della macchina.

Ma. come spesso accade, la soluzione è sempre l’update del kernel, che -fortunatamente -per molti sistemi è già disponibile.

Aggiornare, aggiornare, aggiornare.

Tags: , ,