Proč samotné šifrování nezastaví přehraný paket
Starý paket si zachovává platný autentizační štítek, takže integrita nikdy nedokazuje čerstvost. Stav pořadového čísla a okno příjemce dělají tuto práci.
Chráněné pakety kryptograficky nevyprší, takže paket platný před pěti minutami je platný i teď, protože šifrování a ochrana integrity neříkají nic o tom, kdy byly bajty vytvořeny. Útočník, který umí zachytit a znovu odeslat provoz, nemusí prolomit šifru. Proto každý seriózní tunelový protokol nese stav pořadí spolu se svými klíči.
Mechanismus je malý a jeho režimy selhání lze snadno zaměnit se ztrátou paketů.
Platný šifrovaný text není čerstvý
Autentizace odpovídá na jednu otázku: přišly tyto bajty nezměněné od držitele klíče. Neodpovídá na to, zda je příjemce vidí poprvé. Přehraný paket první test bezchybně splní, a právě proto sama kontrola integrity nedokáže přehrání zastavit a protokol potřebuje druhé pravidlo o přijetí. Příjemce, který jen autentizuje, nemá obranu proti útočníkovi s nahrávkou.
Toto pravidlo je levné na implementaci i na vyslovení: přijmi daný chráněný paket jednou, pod daným klíčem. Všechno ostatní v této oblasti plyne z toho, jak implementace to jedno přijetí sleduje.
Číst zahození kvůli přehrání jako chybu dešifrování vás zavede do úplně špatného subsystému.
Pořadové číslo a okno
IPsec ESP nese pořadové číslo a příjemce drží posuvné okno nedávno přijatých hodnot, přičemž specifikace ESP popisuje výchozí velikost okna a možnost jeho rozšíření. WireGuard jde jinou cestou: počítadlo pro každý klíč a výslovná kontrola proti němu. Ani jeden návrh nepředpokládá, že pakety přicházejí v pořadí, protože skutečné sítě je přeskupují. Oba snášejí přeskupení a ani jeden nesnáší opakování.
Okno je to, co tuto toleranci umožňuje. Paket mírně za nejvyšší viděnou hodnotou lze stále přijmout, pokud už nebyl přijat dříve; paket hluboko vzadu, nebo ten, jehož místo je už označeno, se zahodí. Zvětšete okno a snášíte více přeskupení za cenu více stavu na asociaci.
Diagnostická počítadla ukazují, v jakém případě jste. Zahození kvůli přehrání zvyšují konkrétní počítadlo, nikoli obecnou chybu, a čtení tohoto počítadla je první užitečné pozorování.
nstat -az | grep -i XfrmIn
ip -s xfrm state | head -n 30
wg show wg0 transfer
Stav patří klíči, ne hostiteli
Stav počítadla je vázán na bezpečnostní asociaci nebo na epochu klíče, takže obměna klíče vytváří nový kontext a vlastní prostor pořadí. Vymazání počítadla bez nahrazení klíče nebo opětovné použití asociace po ručním resetu porušuje předpoklad, na kterém okno příjemce závisí. Proto existuje obměna klíčů řízená protokolem, a ne tlačítko resetu viditelné pro operátora.
Když se tunel po ručním zásahu chová špatně, ptejte se, zda zásah zasáhl stav pořadí. Konfigurace, která vypadá stejně, se může chovat jinak, protože stav, který zdědila, není stav, který očekává.
Než něco vypnete, diagnostikujte příčinu
Ztráta, přeskupení, duplikovaný provoz a vada implementace se všechny projevují jako retransmise a jen jedna z nich je problém přehrání. Vypnutí kontroly, aby utichl šum, odstraní vlastnost, na kterou jste spoléhali, a ztíží nalezení původní příčiny, protože retransmise teď nemají vůbec žádné vysvětlení.
Sbírejte omezené důkazy: identifikátory asociace, pořadová čísla a počítadla, bez užitečného obsahu. To stačí k rozlišení duplikátu od přeskupeného příchodu a nepřemění váš diagnostický soubor v kopii uživatelova provozu.
Co kontrola neslibuje
Ochrana proti přehrání je vlastností zpracování paketů v rámci jednoho protokolu. Neznamená, že operátor nevede záznamy, že web nemůže rozpoznat účet nebo že relace je anonymní. To jsou oddělené otázky o oddělených systémech a silný návrh proti přehrání neodpovídá na žádnou z nich.
Udržovaný software s podporovaným nastavením je praktická kontrola, kterou uživatel má. O paket se stará protokol; všechno ostatní zůstává provozním rozhodnutím.