Perché la sola crittografia non ferma un pacchetto riprodotto
Un vecchio pacchetto conserva un tag di autenticazione valido, quindi l’integrità non prova mai la freschezza. Lo stato di sequenza e una finestra del ricevente fanno quel lavoro.
I pacchetti protetti non scadono crittograficamente, quindi uno valido cinque minuti fa è ancora valido adesso, perché la crittografia e la protezione dell’integrità non dicono nulla su quando sono stati prodotti i byte. Un attaccante che può catturare e rinviare il traffico non ha bisogno di rompere il cifrario. Per questo ogni protocollo di tunnel serio porta con sé uno stato di sequenza accanto alle chiavi.
Il meccanismo è piccolo, e le sue modalità di guasto si confondono facilmente con la perdita di pacchetti.
Un testo cifrato valido non è un testo cifrato fresco
L’autenticazione risponde a una domanda: questi byte sono arrivati senza modifiche da chi possiede la chiave. Non risponde se è la prima volta che il ricevente li vede. Un pacchetto riprodotto supera perfettamente la prima prova, ed è esattamente per questo che il solo controllo di integrità non può fermare una riproduzione e che il protocollo ha bisogno di una seconda regola sull’accettazione. Un ricevente che si limita ad autenticare non ha difese contro un attaccante che possiede una registrazione.
Quella regola è economica da implementare ed economica da enunciare: accetta un dato pacchetto protetto una volta, sotto una data chiave. Tutto il resto in questo campo deriva da come l’implementazione tiene traccia di quella singola volta.
Leggere uno scarto per riproduzione come un errore di decifratura ti manda nel sottosistema completamente sbagliato.
Un numero di sequenza e una finestra
IPsec ESP porta un numero di sequenza e il ricevente mantiene una finestra scorrevole dei valori accettati di recente, con la specifica ESP che descrive la dimensione predefinita della finestra e l’opzione di estenderla. WireGuard segue un’altra strada con un contatore per chiave e un controllo esplicito su di esso. Nessuno dei due progetti presuppone che i pacchetti arrivino in ordine, perché le reti reali li riordinano. Entrambi tollerano il riordino, e nessuno tollera la ripetizione.
La finestra è ciò che rende possibile quella tolleranza. Un pacchetto leggermente dietro il valore più alto visto può ancora essere accettato se non è stato accettato prima; uno molto indietro, o uno il cui posto è già marcato, viene scartato. Aumenta la finestra e tollererai più riordino al costo di più stato per associazione.
I contatori diagnostici ti mostrano in quale caso ti trovi. Gli scarti per riproduzione incrementano un contatore specifico anziché un errore generico, e leggere quel contatore è la prima osservazione utile.
nstat -az | grep -i XfrmIn
ip -s xfrm state | head -n 30
wg show wg0 transfer
Lo stato appartiene alla chiave, non all’host
Lo stato del contatore è legato a un’associazione di sicurezza o a un’epoca della chiave, quindi un rinnovo della chiave crea un contesto nuovo e un proprio spazio di sequenza. Cancellare un contatore senza sostituire la chiave, o riutilizzare un’associazione dopo un ripristino manuale, spezza l’assunzione su cui si basa la finestra del ricevente. Per questo esiste il rinnovo delle chiavi guidato dal protocollo invece di un pulsante di ripristino visibile all’operatore.
Quando un tunnel si comporta male dopo un intervento manuale, chiediti se l’intervento ha toccato lo stato di sequenza. Una configurazione che sembra identica può comportarsi diversamente perché lo stato ereditato non è quello che si aspetta.
Diagnostica la causa prima di disattivare qualsiasi cosa
Perdita, riordino, traffico duplicato e un difetto di implementazione si manifestano tutti come ritrasmissioni, e solo uno di essi è un problema di riproduzione. Disattivare il controllo per zittire il rumore rimuove la proprietà su cui contavi e rende più difficile trovare la causa originale, perché ora le ritrasmissioni non hanno alcuna spiegazione.
Raccogli prove limitate: identificatori di associazione, numeri di sequenza e contatori, senza i payload. Basta per distinguere un duplicato da un arrivo riordinato, e non trasforma il tuo file di diagnostica in una copia del traffico dell’utente.
Cosa non promette il controllo
La protezione dalla riproduzione è una proprietà dell’elaborazione dei pacchetti all’interno di un protocollo. Non significa che l’operatore non tenga registri, che un sito web non possa riconoscere un account o che una sessione sia anonima. Sono questioni separate su sistemi separati, e un solido progetto anti-riproduzione non risponde a nessuna di esse.
Il software mantenuto con impostazioni supportate è il controllo pratico a disposizione di un utente. Il protocollo gestisce il pacchetto; tutto il resto resta una decisione operativa.