Pachetele protejate nu expiră criptografic, așa că unul care era valid acum cinci minute este încă valid acum, pentru că criptarea și protecția integrității nu spun nimic despre momentul în care au fost produse octeții. Un atacator care poate captura și retransmite trafic nu trebuie să spargă cifrul. De aceea fiecare protocol de tunel serios poartă stare de secvență alături de cheile sale.

Mecanismul este mic, iar modurile sale de eșec se confundă ușor cu pierderea de pachete.

Textul cifrat valid nu este text cifrat proaspăt

Autentificarea răspunde la o singură întrebare: au venit acești octeți nemodificați de la deținătorul cheii. Nu răspunde dacă este prima dată când receptorul îi vede. Un pachet retransmis trece perfect primul test, și exact de aceea verificarea integrității singură nu poate opri o retransmisie și de aceea protocolul are nevoie de o a doua regulă privind acceptarea. Un receptor care doar autentifică nu are apărare împotriva unui atacator care deține o înregistrare.

Regula aceea este ieftin de implementat și ieftin de enunțat: acceptă un pachet protejat dat o singură dată, sub o cheie dată. Tot restul din acest domeniu decurge din felul în care implementarea urmărește acea singură dată.

Să citești o respingere din cauza retransmisiei ca pe o eroare de decriptare te trimite în subsistemul complet greșit.

Un număr de secvență și o fereastră

IPsec ESP poartă un număr de secvență, iar receptorul ține o fereastră glisantă a valorilor acceptate recent, în timp ce specificația ESP descrie dimensiunea implicită a ferestrei și opțiunea de a o extinde. WireGuard urmează o altă cale, cu un contor per cheie și o verificare explicită împotriva lui. Niciunul dintre proiecte nu presupune că pachetele sosesc în ordine, pentru că rețelele reale le reordonează. Ambele tolerează reordonarea și niciunul nu tolerează repetarea.

Fereastra este cea care face posibilă această toleranță. Un pachet puțin în urma celei mai mari valori văzute poate fi încă acceptat dacă nu a fost acceptat înainte; unul mult în urmă, sau unul al cărui loc este deja marcat, este eliminat. Mărește fereastra și tolerezi mai multă reordonare cu prețul mai multă stare per asociere.

Contoarele de diagnostic îți arată în ce caz te afli. Respingerea retransmisiilor crește un contor specific, nu o eroare generică, iar citirea acelui contor este prima observație utilă.

nstat -az | grep -i XfrmIn
ip -s xfrm state | head -n 30
wg show wg0 transfer

Starea aparține cheii, nu gazdei

Starea contorului este legată de o asociere de securitate sau de o epocă a cheii, așa că o reînnoire a cheii creează un context proaspăt și propriul spațiu de secvență. Ștergerea unui contor fără înlocuirea cheii, sau reutilizarea unei asocieri după o resetare manuală, încalcă ipoteza de care depinde fereastra receptorului. De aceea există reînnoirea cheilor condusă de protocol, nu un buton de resetare vizibil pentru operator.

Când un tunel se comportă prost după o intervenție manuală, întreabă dacă intervenția a atins starea de secvență. O configurație care pare identică se poate comporta diferit pentru că starea moștenită nu este starea pe care o așteaptă.

Diagnostichează cauza înainte de a dezactiva ceva

Pierderea, reordonarea, traficul duplicat și un defect de implementare se manifestă toate ca retransmisii, și doar una dintre ele este o problemă de retransmisie. Dezactivarea verificării pentru a reduce zgomotul elimină proprietatea pe care te bazai și face cauza originală mai greu de găsit, pentru că acum retransmisiile nu au nicio explicație.

Colectează dovezi limitate: identificatori de asociere, numere de secvență și contoare, fără încărcăturile utile. Este suficient pentru a distinge un duplicat de o sosire reordonată, și nu transformă fișierul tău de diagnostic într-o copie a traficului utilizatorului.

Ce nu promite verificarea

Protecția împotriva retransmisiei este o proprietate a procesării pachetelor în interiorul unui protocol. Nu înseamnă că operatorul nu ține jurnale, că un site nu poate recunoaște un cont sau că o sesiune este anonimă. Sunt întrebări separate despre sisteme separate, iar un design solid anti-retransmisie nu răspunde la niciuna dintre ele.

Software întreținut cu setări acceptate este controlul practic de care dispune un utilizator. Protocolul se ocupă de pachet; tot restul rămâne o decizie operațională.

Articole similare