リプレイ攻撃
英語表記:replay-attack
リプレイ攻撃とは、一度やり取りされた通信データを盗み取り、それをあとから悪用する攻撃のことです。通信の内容をそのまま「再生(replay)」するようなイメージから、この名前が付いています。
例えば、あなたがあるサービスにログインするためにIDとパスワードを送ったとします。そのときの通信内容を、攻撃者が途中でこっそり盗み取ったとしましょう。そして時間をおいて、まったく同じデータをサーバーに送ったらどうなるでしょうか。サーバー側は「本人がもう一度ログインした」と誤解して、攻撃者にアクセスを許してしまうかもしれません。これがリプレイ攻撃です。
この攻撃が厄介なのは、正しい通信内容をそのまま使っていることです。違和感のある文字列を送りつけたり、不審な動作をしたりするわけではありません。だからこそ、通常のエラー検知では見抜きにくいのです。
リプレイ攻撃は、認証や決済など、重要な通信が行われる場面で特に警戒が必要です。例えば、オンラインショッピングで商品を「一度だけ購入」したつもりが、攻撃者に通信を再送されて「何度も注文」が通ってしまうケースも起こり得ます。
このような攻撃を防ぐには、通信ごとに「一度しか使えない番号(ワンタイムトークン)」を付ける方法が有効です。番号が毎回変わるため、過去の通信をそのまま使っても無効と判断されます。また、通信に時刻情報を含め、一定時間を過ぎたものは拒否する、といった対策も取られています。
リプレイ攻撃は、通信が暗号化されていないときに特にリスクが高まります。とはいえ、暗号化していても「その通信が今のものか、過去のものか」を見分けるしくみがなければ、攻撃を完全に防ぐことはできません。だからこそ、認証まわりの設計には一層の工夫が求められます。
用語解説の監修:増井 敏克