FE EXAM

リプレイ攻撃(再送攻撃)

盗み取った認証データを再送して正規利用者になりすます攻撃。

INTERACTIVE VISUALIZATION
正規利用者
攻撃者
サーバ
状況
待機中
攻撃者の手元データ
サーバの判定
シナリオ
ステップ1 / 7
STEP 1/7攻撃が始まる前まだ何も起きていない状態です。これから正規利用者(=本来のアカウントの持ち主)がサーバへログイン用の認証データを送ります。攻撃者はその通信をひそかに見張っています。認証データ=合言葉やパスワードを暗号化したような「本人だと示す情報」のことです。
正規利用者攻撃者サーバ▶ を押すと攻撃の流れが始まります
解説

📌
リプレイ攻撃とは

正規利用者サーバ攻撃者認証データ盗聴→再送

リプレイ攻撃(再送攻撃)とは、盗み取った認証データ(=本人だと示す情報)を、あとでそのまま送り返して正規利用者になりすます攻撃のことです。リプレイ=録音した音声を「再生」するイメージから来ています。

身近な例で考えると、合言葉を録音しておいて、あとで再生して入場するのに似ています。合言葉の意味が分からなくても、録音をそのまま流せば門番は本人だと信じてしまいます。攻撃者は中身を解読する必要すらありません。

上のツールで▶ボタンを押すと、正規利用者の認証データを攻撃者が盗聴し、保存してから再送し、なりすましが成立する流れを確認できます。

🔁
攻撃の仕組み

攻撃は次の流れで進みます。難しい暗号解読は一切登場しないのが特徴です。

① 盗聴:通信路を流れる認証データを攻撃者がこっそりコピーする
② 保存:盗んだデータを手元にためておく
③ 再送(リプレイ):保存したデータをそっくりそのままサーバへ送りつける
④ なりすまし成立:サーバはデータが正しいので本人と信じて受理してしまう

成立してしまう根本原因は、認証データを何度でも使い回せてしまう点にあります。サーバには「これは初めて届いたものか、それとも前のものの再送か」を見分ける手立てがないため、同じデータを区別できません。中身が暗号化されていても、かたまりごと再送できるので暗号化だけでは防げません。

🛡️
対策(ナンス等)

毎回ちがうnonce古い値で再送使用済み→拒否

対策の基本は、認証データを「1回しか使えないもの」にすることです。同じデータの使い回しを禁止すれば、再送しても通らなくなります。

代表的な手段は次のとおりです。
ナンス(nonce):サーバが毎回ちがう使い捨ての乱数を発行し、認証に混ぜさせる。盗んだデータは古いナンスを含むので再送すると拒否される
タイムスタンプ:データに送信時刻を入れ、古すぎるものは無効にする
ワンタイムパスワード(OTP):毎回ちがう使い捨てのパスワードを使い、一度使ったものは二度と通らないようにする

どれも考え方は同じで、「1回限りの番号札」を配るイメージです。番号札が毎回ちがえば、過去の札を使い回そうとしても「もう使われた札ですね」と弾けます。上のツールの最終ステップで、古いナンスを含む再送が拒否される様子を確認できます。

📌
なぜ暗号化だけでは防げないのか

正規利用者サーバ🔒暗号化済みデータ攻撃者がコピーして保存🔒暗号のまま丸ごと再送受理してしまう(正規品と区別できない)暗号を解読しなくても、かたまりごと再送するだけで通る

「暗号化すれば安全では?」と思う人も多いですが、リプレイ攻撃は暗号を解読せずに成立します。理由は、攻撃者がやることは「盗んだデータをかたまりごと再送する」だけだからです。

たとえ通信が暗号化されていても、サーバは次のような判断しかできません。
「このデータは正しい形式の認証データか」→ 盗んだ本物のコピーなので「正しい」と判定される
「このデータは初めて届いたものか、使い回しか」→ 通常の暗号化では区別できない

身近な例で考えると、封をした手紙の「封印の印鑑」を丸ごとコピーして別の手紙に貼り付けるようなものです。印鑑が本物かどうかは確認できても、「同じ印鑑が前にも使われたか」は封筒を見るだけでは分かりません。暗号化は「内容を隠す」技術ですが、「1回限りしか使えない」という仕組みは別に用意する必要があるのです。

📌
対策の原理(なぜ1回限りで防げるのか)

1回目の認証nonce=A7x3受理 ✓A7x3を使用済みに再送(攻撃)nonce=A7x3拒否 ✕A7x3は使用済みサーバ側で使用済み管理

すべての対策に共通する発想は「1回しか使えない値を認証に含める」ことです。そうすると、盗んだデータを再送しても「その値はもう使われた」と拒否できます。

対策仕組み「1回限り」の作り方
ナンス(nonce)サーバが毎回ちがう使い捨て乱数を発行し、それを含めた認証を要求する同じ乱数は2度使えないようサーバが管理
タイムスタンプデータに送信時刻を入れ、古すぎるものは無効にする時間が過ぎたデータは自動的に期限切れ
OTP(ワンタイムパスワード)使い捨てのパスワードを毎回生成し、1回使ったら無効にするパスワード自体が1回限りの設計

なぜこれで防げるのか。攻撃者は盗んだデータをそのまま再送するだけです。しかしナンスやタイムスタンプが「一度使われた/古くなった」ことをサーバが覚えているので、同じデータを何度送っても「使用済み・期限切れ」として弾かれます。身近な例では、映画の半券が「使用済み」のスタンプを押されたら同じ半券では2度入場できないのと同じ発想です。

練習問題

🎯
基本情報技術者 練習問題

Q1.リプレイ攻撃の説明として最も適切なものはどれか。
A.盗み取った認証データをそのまま再送して正規利用者になりすます攻撃
B.大量のリクエストを送りつけてサーバを停止させる攻撃
C.パスワードを総当たりで試して突破する攻撃
D.利用者をだまして偽サイトに誘導する攻撃
Q2.リプレイ攻撃で、攻撃者が認証データの中身(暗号文)を解読できなくても攻撃が成立してしまう理由はどれか。
A.暗号は必ず短時間で解読できるから
B.同じデータを送り返すだけで認証が通ってしまうから
C.サーバが暗号化を行っていないから
D.攻撃者が正規利用者の鍵を持っているから
Q3.リプレイ攻撃への対策として最も適切なものはどれか。
A.パスワードを長くする
B.通信量を制限する
C.毎回異なる使い捨ての値(ナンス)やタイムスタンプを認証に含める
D.サーバのIPアドレスを隠す

関連コンテンツ

リプレイ攻撃 | Vizigo