Атака повторного воспроизведения (replay-атака) — атака, при которой перехваченная легитимная передача данных — сообщение входа, токен или команда — злонамеренно повторяется, чтобы получить доступ или снова вызвать действие.
Как работает replay-атака
Атакующему не нужно расшифровывать или понимать перехваченные данные. Достаточно записать сообщение, которое получатель принимает как подлинное, и отправить его позже ещё раз. Для этого нужен доступ к трафику — как правило, позиция «человека посередине», открытая сеть Wi-Fi или радиоприёмник. Типичные примеры:
- Повторная отправка перехваченного сообщения аутентификации или хеша, чтобы войти от имени жертвы (CWE-294, обход аутентификации через capture-replay).
- Повторное использование украденного токена сессии или подписанного API-запроса — близко к перехвату сессии.
- Запись радиосигнала автомобильного брелока, гаражных ворот или сигнализации с фиксированным кодом и его воспроизведение, чтобы открыть дверь.
- Повтор платёжного поручения или перевода, чтобы он был исполнен дважды.
Почему это важно
Replay-атаки показывают, что одного шифрования недостаточно: зашифрованное сообщение может оставаться действительным и при повторе. Уязвимыми остаются слабые IoT-устройства и старые радиосистемы, а уязвимости протоколов, например атака KRACK на WPA2 в 2017 году, строились на повторном воспроизведении сообщений рукопожатия. При форках блокчейнов также понадобилась защита от повтора, чтобы транзакцию из одной цепочки нельзя было повторить в другой.
Как предотвратить
- Использовать протоколы с одноразовыми числами (nonce), метками времени или порядковыми номерами, как в TLS и Kerberos, и отклонять дубликаты.
- Делать токены короткоживущими и привязывать их к сессии или устройству; применять одноразовые пароли, которые перестают действовать после использования.
- Использовать плавающие коды (rolling codes) и схему «запрос — ответ» в беспроводных замках и брелоках.
- Требовать ключи идемпотентности для платёжных операций и API.