Breve Introduzione

Tutto nasce da un problema presente su un cliente che è anche un collega essendo azienda del settore. Sulla loro rete interna in presenza di Firewall i pc con Windows 7 davano strane anomalie. Come si suol dire “le scarpe del calzolaio sono sempre rotte”, non hanno mai avuto tempo e modo per approfondire il problema, fatto salvo quando si sono trovati a cambiare i pc interni da XP a Windows 7, a questo punto per poter lavorare si sono trovati costretti a risolvere l’anomalia.

Il problema dopo parecchie ricerche è risultato essere una incompatibilità della “Stateful Inspection” su un Firewall Sonic Wall in presenza di Windows 7. Disabilitando la “Stateful Inspection” tutto ha ricominciato a funzionare correttamente.

Inutile dire che la problematica mi ha messo un’enorme curiosità, cosa ci può essere di incompatibile nella “Stateful Inspection” al punto da creare problemi assolutamente casuali? (occasionalmente, impossibilità di collegarsi tramite remote desktop, ftp, ssh, firmare digitalmente documenti on-line, ecc.) ho voluto approfondire l’argomento cercando di capire “cosa c’è dietro” ed ho scoperto una novità interessante di Windows Vista/7, che sinceramente non conoscevo, ma iniziamo dall’inizio….

La Storia

Lo “Stateful Inspection” è una modalità di lavoro sul “Layer 3″ presente abitualmente sui firewall ed inventata dalla Checkpoint. Ogni singola connessione verso il mondo esterno è fatto da una sessione, questa sessione è fatta da uno scambio di pacchetti, ogni singolo pacchetto ha un “Header” che riporta le informazioni fondamentali per poter individuare la sessione di riferimento e quindi smistarla nel modo corretto (considerate che abitualmente il PC a molte sessioni attive, provate dal prompt di comandi , netstat, ogni riga che vedete è di fatto una sessione attiva).

La “Stateful Inspection” mantiene una lista delle sessioni attive acquisendo le informazioni dall’Header di ogni singolo pacchetto scambiato

In questo modo è in grado di identificare se ogni pacchetto entrante si riferisce ad una sessione già attiva o meno e quindi valutare se va analizzato in modo più approfondito (nel caso di pacchetto non riconosciuto) oppure farlo passare in quanto si riferisce ad una sessione già precedentemente analizzata e con Header corretto. Questa è una descrizione semplice ma è importante capire che è utilissimo lo “Stateful Inspection” in quanto permette ai firewall di lavorare espressamente sui pacchetti a rischio (che non fanno parte di sessioni attive) effettuando un’analisi più approfondita dove necessario. In questo modo ove presente la “Stateful Inspection” risulterà più complesso sovraccaricare firewall con attacchi DOS o effettuare modifiche sui pacchetti entranti (session hijacking), in quanto nel primo caso essendo solitamente inizio sessioni possono essere gestiti differentemente rispetto ai pacchetti di sessioni iniziate, nel secondo caso è estremamente complesso effettuare la modifica di un pacchetto entrante in quanto sarebbe necessario conoscere informazioni derivanti da precedenti pacchetti come la Sequence Number ed i Flag, informazioni che la tabella interna del Firewall conosce.

Spero sia stato chiaro, mi rendo conto che sono termini un po’ tecnici ma era una premessa fondamentale per vedere le cause di questo problema,

Linux dalla versione 2.6.8 del Kernel a Microsoft con Vista (e poi con Windows 7) si sono resi conto di un “limite” intrinseco del TCP, e delle grosse problematiche di perdita di sessione con l’incrementare della velocità, hanno quindi deciso di implementare il “Window Scaling” dinamico, è lo stesso Sistema Operativo che decide e valuta a seconda del traffico attivo se è necessario attivare questo tipo di opzione del TCP, in modo da garantire “stabilità” alle sessioni stesse.

TCP Window Scaling

Evito di addentrarmi troppo sui tecnicismi, cercando invece di far capire il concetto con il quale si è deciso di utilizzare quest’opzione, ed eventualmente rimandandovi all’RFC-1323 e alla Descrizione fatta su Wikipedia, la necessità è quella di garantire il buon funzionamento del protocollo TCP anche in presenza di ritardi sulla connessione e con alta velocità, su Wikipedia c’è un esempio su connettività da 1,5MB e ritardi nell’ordine dei 513ms, con ritardi di questo tipo si riempie facilmente i 64KB di Buffer disponibili, ma con l’aumentare della velocità il ritardo “concesso” diminuisce progressivamente, ed avendo oggi facilmente connessioni nell’ordine dei 10MB, ovviamente si raggiungerebbero velocemente questi limiti con la conseguenza di perdere facilmente sessioni attive.

Limiti in base alle relative velocità:

1

Mbits/sec

500

ms

5

Mbits/sec

100

ms

10

Mbits/sec

50

ms

20

Mbits/sec

25

ms

100

Mbits/sec

5

ms

In realtà quest’opzione risale al 1992 ma solo attorno al 2004 è stata sfruttata dai comuni PC, quindi solo dopo quella data era possibile vedere eventuali incompatibilità con i comuni Firewall domestici.

Incompatibilità Stateful Inspection con TCP Window Scaling

Questo tipo di adattamento all’interno dei pacchetti TCP rendono inefficiente le prime implementazioni dello “Stateful Inspection”, in quanto non prevedevano lo “scaling” riuscendo a riconoscere quindi solo i pacchetti privi di scaling, di fatto funzionando “a singhiozzo”. L’implementazione del “Windows Scaling” all’interno dei sistemi operativi è fatta solo nei casi in cui il sistema operativo lo ritenga necessario, anche per questo il problema si evidenzia a singhiozzo, inoltre il “Window Scaling” è presente solo su sessioni NON-http, per questo nella normale navigazione non si evidenzia.

Gli apparati che hanno questo tipo di incompatibilità sono Moltissimi,

Cisco PIX prima della 6.3.1
Cisco IOS prima della 12.4.0.2
SonicWall prima della 3.5
ma anche i più diffusi NetGear, Linksys, D-Link, ecc. su varie versioni

ovviamente sono nelle condizioni di vecchi aggiornamenti del Firewall, anche per questo si consiglia di effettuare l’aggiornamento su apparati di protezione di rete periodicamente, è luogo comune, una volta installato un Firewall che sia sufficiente per proteggere la rete interna da qualsiasi problema, mentre l’aggiornamento degli stessi è assolutamente fondamentale se si vuole mantenere la rete efficiente. Gli aggiornamenti NON solo garantiscono la risoluzione di problematiche come questa ma anche la protezione da nuove vulnerabilità, e vi assicuro che se ne presentano decine a settimana, tra i migliori siti che un “curioso” della sicurezza informatica dovrebbe visitare ci sono:

CERT-SPC Italiano
Security Focus Inglese
CVE Inglese

Un buon informatico dovrebbe periodicamente dare un’occhiata a questi siti e rendersi conto di quanti rischi ogni giorno arrivano sui nostri computer e valutare se attuare interventi presso la propria clientela.

Risolvere il problema

Bè chi è arrivato su questo articolo o è stato attirato dalla curiosità, oppure ha davvero questo problema e magari vorrebbe anche sapere come risolverlo, prima di tutto consiglierei di accertarsi che la causa sia questa, magari guardare che Firewall/Router avete e che versione di Firmware e se volete giratemela che Vi dico io se è affetta dal bug.

Oppure molto semplicemente provate a disabilitare l’opzione sul Vostro PC, se poi tutto funziona, probabilmente il Vostro apparato di rete è affetto da questo problema.

Per disabilitare il “Window Scaling” su Windows Vista o Windows 7 è necessario andare al Prompt dei comandi con privilegi da amministratore ed eseguire:

netsh interface tcp set global autotuninglevel=disabled

Riavviare il PC.

Se al riavvio il problema non si presenta, Vi consiglierei COMUNQUE di aggiornare il Vostro firewall, ci sono migliaia di Vulnerabilità presenti tra un apparato (che presumibilmente è del 2004/2006 se non prima) ad oggi, oltre a problemi di incompatibilità che potreste avere con decine di servizi di nuova generazione (Voip, Remote Desktop via Gateway, Skype, RPC, ecc.)

Per riabilitare il tutto è sufficiente tornare al Prompt dei comandi con diritti amministrativi

netsh interface tcp set global autotuninglevel=normal

Riavviare il PC

Spero possa essere d’aiuto a chi ha incontrato questo problema, o semplicemente darVi un possibile approccio alle problematiche che si possono incontrare sui protocolli Internet

Buon Firewalling a tutti!