リプレイ攻撃 りぷれいこうげき
認証セッションハイジャックトークンタイムスタンプノンス中間者攻撃
リプレイ攻撃について教えて
簡単に言うとこんな感じ!
一度使った「正規の合言葉」を盗み録りして、後でこっそり再利用する攻撃だよ!「本人が送った本物の通信」をそのままコピーして送りつけるから、システムは「正規ユーザーだ」と勘違いして信じてしまうんだ。
リプレイ攻撃とは
リプレイ攻撃(Replay Attack) とは、正規ユーザーとサーバー間でやり取りされた通信データを攻撃者が盗み取り、そのデータをそのまま再送信することで、不正にアクセスや操作を成功させるサイバー攻撃の手法です。
たとえば、あなたがネットバンキングで「1万円を振り込む」というリクエストを送ったとします。攻撃者がその通信をコピーして保存しておき、後から同じリクエストを再送すると、サーバーは「また正規ユーザーが振り込み指示を出してきた」と判断して、二重に振り込んでしまう可能性があります。内容を改ざんしなくてもいいのがこの攻撃の巧妙なところです。
リプレイ攻撃は、暗号化されていても防げないという点で危険視されています。暗号化はデータの「中身を読めなくする」技術ですが、「そのまま再送する」だけなら中身を解読する必要がないからです。対策には、使い捨てのトークンやタイムスタンプなど、「同じデータを2度使えなくする仕組み」が必要になります。
リプレイ攻撃の仕組みと流れ
① 正規ユーザーがサーバーへ認証リクエストを送信
[ユーザー] ──── 認証データ ────▶ [サーバー] ✅ ログイン成功
② 攻撃者が通信を盗み聞きしてコピー
[ユーザー] ──── 認証データ ────▶ [サーバー]
↑
[攻撃者] こっそりコピー!
③ 攻撃者が同じデータをそのまま再送
[攻撃者] ──── 同じ認証データ ──▶ [サーバー] ✅ ログイン成功 😱
攻撃の流れを段階的に整理すると、以下のようになります。
| ステップ | 攻撃者の行動 | サーバーの判断 |
|---|---|---|
| 1. 傍受 | 正規の通信パケットをキャプチャして保存 | (気づかない) |
| 2. 待機 | 適切なタイミングを見計らう | (気づかない) |
| 3. 再送信 | 保存したパケットをそのままサーバーへ送りつける | 正規リクエストと誤認 |
| 4. 侵害成功 | 不正ログイン・二重送金・権限取得などを達成 | リクエスト承認 |
覚え方:「録画した合言葉をドアに叫ぶ」
「開けゴマ!」という合言葉を言った瞬間を録音して、後で自分がドアの前で再生すれば、ドアは本人だと思って開いてしまいます。リプレイ攻撃はまさにこれと同じ構造です。「本物かどうか」ではなく「過去に使われた本物のデータかどうか」を検知できないと防げません。
狙われやすいシステムの特徴
- 認証トークンに有効期限がない
- 通信にタイムスタンプが含まれていない
- ワンタイムパスワード(OTP)を使っていない
- セッションIDが固定・予測可能
歴史と背景
- 1980年代〜 :ネットワーク認証プロトコルの設計議論の中でリプレイ攻撃の脅威が認識され始める
- 1988年 :MITが認証プロトコル Kerberos を発表。リプレイ攻撃への対策としてタイムスタンプとチケットの有効期限を組み込んだ最初期の本格的な実装
- 1990年代 :インターネットの普及とともにHTTP通信への応用が広がり、Webアプリケーションでの被害事例が増加
- 2000年代 :ネットバンキングやECサイトの拡大により、二重送金や不正決済を狙ったリプレイ攻撃が社会問題化
- 2010年代〜 :OAuth 2.0やJWT(JSON Web Token)など、ノンス(nonce) や署名を組み込んだ現代的な認証標準が普及し、対策が標準化へ
主な対策と関連技術
リプレイ攻撃を防ぐための技術は「同じデータを2度使えなくする」という発想が基本です。
各対策技術を比較するとこうなります。
| 対策手法 | 仕組み | 採用例 | 注意点 |
|---|---|---|---|
| タイムスタンプ | 時刻のズレで不正を検知 | Kerberos、AWS署名 | 送受信側の時刻同期が必要 |
| ノンス(nonce) | 使い捨ての乱数で検証 | OAuth 2.0、OpenID Connect | サーバー側で管理コスト発生 |
| シーケンス番号 | 連番で二重受信を検知 | TLS、IPsec | 番号の管理と同期が必要 |
| OTP | 毎回新しいパスワードを生成 | 銀行トークン、TOTP | ユーザーの操作が増える |
| セッションの短命化 | セッションIDに短い有効期限 | Webアプリ全般 | 頻繁な再認証が必要になる |
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| RFC 4120 | Kerberosネットワーク認証サービス(タイムスタンプ・チケット有効期限によるリプレイ対策を規定) |
| RFC 6749 | OAuth 2.0認証フレームワーク(stateパラメータによるCSRF・リプレイ対策) |
| RFC 6238 | TOTP(Time-Based One-Time Password)アルゴリズムの標準仕様 |
| RFC 4301 | IPsecセキュリティアーキテクチャ(アンチリプレイウィンドウ機構を含む) |
| RFC 8446 | TLS 1.3(シーケンス番号管理とリプレイ対策の強化) |