Ecco un attacco interessante: l’autore lo chiama NAT pinning, e prevedo che, se è efficace in modo diffuso, avrà un grande successo: come credo di aver già detto, l’aggiornamento del “firmware” dei router ADSL è un evento eccezionale, e quindi anche se/quando il problema verrà corretto la vulnerabilità rimarrà diffusa.
Purtroppo non posso provare l’attacco sul mio router ADSL perché non è configurato per fare affidamento sul NAT 😉 (inizialmente sembrava che l’attacco funzionasse, ma in realtà stava funzionando un altro tipo di rimappatura, legittima).
Il problema è, in poche parole, che i moduli che implementano il NAT per i protocolli con contrattazione dinamica delle porte devono interpretare il protocollo applicativo e rimappare le porte di cui è stata richiesta l’apertura dal client sulla rete protetta: in qualche caso, ad esempio per l’ftp “attivo”, anche connessioni entranti. Tuttavia, questi moduli sono “minimali”, non capiscono l’intero protocollo: nel caso specifico, non capiscono se il traffico verso la porta 6667 è effettivamente traffico irc o è http: tutto quello che fanno è “intercettare” una stringa corrispondente, in irc, ad un comando che richiede l’apertura di una porta, e rimappano di conseguenza, aprendo un canale verso l’interno.
L’attacco dimostra dicevo, un principio importante: il NAT non è un meccanismo di sicurezza. Tutto quello che viene di sicurezza viene per caso e non in modo affidabile, e comunque non è molto. L’altra cosa dimostrata dall’attacco è il problema di “indovinare” il protocollo in base alla porta destinataria: vale per il NAT ma anche per i meccanismi di proxy trasparenti.
Infine, dimostra che da un firewall non bisogna aspettarsi più di quanto esplicitamente dichiarato: se il prodotto dichiara di permettere il funzionamento di irc attraverso il NAT, non è legittimo dedurne che impedirà connessioni entranti. È vero che qui stiamo parlando di prodotti molto di base, ma il principio di non ipotizzare per un firewall capacità oltre a quelle esplicitamente dichiarate vale in generale, particolarmente quando si tratta di interpretare protocolli applicativi.