Czym jest Replay Attack?
Replay Attack to sytuacja, gdy ktoś przechwytuje prawidłową, podpisaną akcję kryptograficzną i wysyła ją ponownie, tak że sieć traktuje ją jak świeżą. Podpis jest prawidłowy, a moment wysłania podstępny. Można to porównać do kogoś, kto używa ponownie twojego podpisanego czeku przy innym okienku, które nadal stosuje te same reguły.
Replay Attack oznacza, że skradziono twój klucz prywatny. Nie do końca. Atakujący może ponownie użyć już podpisanej wiadomości, jeśli dwa miejsca akceptują ją w ten sam sposób, nawet nie znając twojego klucza.
Jak działa Replay Attack
Krótki przegląd, żeby łatwiej zapamiętać.
- Krok 1: Wysyłasz podpisaną transakcję.
- Krok 2: Atakujący kopiuje dokładnie te same podpisane dane.
- Krok 3: Wysyłają ją ponownie tam, gdzie nadal przejdzie weryfikację, na przykład po hard fork lub na łańcuchu, który akceptuje te same zasady podpisu.
- Krok 4: Sieć widzi prawidłowy podpis i przetwarza go ponownie, więc środki zostają przesłane dwukrotnie.
- Krok 5: Tylko mechanizmy przeciw-replayowe powstrzymają to, takie jak identyfikatory łańcucha (chain IDs), nonce lub jednorazowe uprawnienia na poziomie aplikacji.
To cały trik. Denerwujące, ale można temu łatwo zapobiec.
Dlaczego Replay Attack ma znaczenie
Czemu powinno cię to obchodzić? Bo może skopiować prawdziwą operację, którą chciałeś wykonać raz, i zamienić ją w dwie.
- Korzyść: Świadomość ryzyka oszczędza pieniądze i nerwy, pomagając zaplanować bezpieczniejsze działania.
- Perspektywa: Środowisko wielołańcuchowe to teraz norma, więc skopiowane wiadomości trafiają w niewłaściwe miejsce częściej niż się wydaje.
- Gdzie się z tym spotkasz: Spotkasz ten termin podczas przenoszenia środków przez sieć blockchain, w czasie rozgałęzień łańcucha lub podczas podpisywania wiadomości poza łańcuchem dla aplikacji.
Używaj portfela, który wyraźnie pokazuje aktywny łańcuch i poprawnie ustawia identyfikatory łańcucha (chain IDs). W razie wątpliwości wyślij najpierw mały test, potem resztę.
Kluczowe cechy Replay Attack
Rozpoznaj wzorzec szybko dzięki tym wskazówkom:
- Kopia: Ponownie używa dokładnie tej samej podpisanej wiadomości, bajt po bajcie.
- Prawidłowość: Podpis jest prawdziwy, więc węzły go akceptują, chyba że istnieją mechanizmy przeciw-replayowe.
- Czas: Najczęściej występuje przy rozgałęzieniach łańcucha, mostach lub gdy aplikacje pomijają sprawdzanie nonce.
Warianty
Ta sama metoda, różne scenariusze:
- Fork: Replay pomiędzy dwoma łańcuchami, które się rozdzieliły i nadal honorują te same podpisy.
- Crosschain: Replay między łańcuchami, które dzielą parametry lub akceptują te same formaty wiadomości.
- Contract: Replay podpisanych uprawnień lub meta transakcji w aplikacjach, które zapomniały o jednorazowym nonce.
Po dużych aktualizacjach lub rozgałęzieniach sprawdź swoją historię transakcji na obu łańcuchach. Jeśli coś wygląda na zdublowane, wstrzymaj się przed wysłaniem kolejnych.
Przykład
Po forkie DAO niektóre wypłaty podpisane na Ethereum były ponownie akceptowane na Ethereum Classic, dopóki nie wprowadzono silniejszej ochrony przed replay.
Ciekawostka
Ethereum wprowadziło chain IDs w 2016 roku za pomocą EIP155 właśnie po to, by zatrzymać triki Replay Attack, i ta decyzja projektowa wpłynęła na to, że nowoczesne portfele wymagają wcześniejszego wyboru łańcucha.
Podsumowanie
Replay Attack w jednym zdaniu: prawdziwy podpis, użyty ponownie tam lub kiedy nie powinien. Traktuj to jak podwójne obciążenie i zauważysz to szybciej.
