再生攻撃 (サイクリックアタック) とは | 意味や読み方など丁寧でわかりやすい用語解説
再生攻撃 (サイクリックアタック) の読み方
日本語表記
再生攻撃 (サイセイコウゲキ)
英語表記
replay attack (リプレイアタック)
再生攻撃 (サイクリックアタック) の意味や用語解説
再生攻撃(Replay Attack)は、正規の利用者が送信した通信データを攻撃者が盗聴し、そのデータを後でそのまま再送することで不正な操作を行うサイバー攻撃の一種である。中間者攻撃の一形態と見なされることもあり、特に認証プロセスや金融取引など、重要な処理が行われる場面で深刻な被害を引き起こす可能性がある。この攻撃の巧妙な点は、攻撃者が通信内容を解読する必要がないことにある。たとえ通信が暗号化されていても、暗号化されたデータそのものを再利用することで攻撃が成立する場合があるため、暗号化だけでは根本的な対策にならない。攻撃の基本的な流れは、まず攻撃者が正規の利用者とサーバー間のネットワーク通信を傍受できる環境を確保する。次に、利用者がログイン認証や送金指示などのリクエストをサーバーに送信する際に、その通信データをキャプチャして保存する。最後に、攻撃者は保存したデータを、あたかも正規の利用者からのリクエストであるかのように見せかけてサーバーに再送信する。サーバー側でこの再送されたデータを有効なものとして受け入れてしまうと、意図しない認証の成功や二重送金といった問題が発生する。 再生攻撃が成功する根本的な原因は、サーバー側が受信したリクエストの正当性を検証する際に、そのリクエストが過去に一度も使われていない「一回性」を確認する仕組みを持っていないことにある。例えば、ある認証システムがユーザー名とパスワードのハッシュ値を送信するだけで認証を完了させている場合を考える。攻撃者はこのハッシュ値を盗聴し、後で再送するだけで正規の利用者になりすましてログインできてしまう。通信内容が暗号化されていても、暗号化されたデータブロック全体を再送すればよいため、攻撃者は暗号を解読する必要すらない。この攻撃を防ぐためには、通信データが正当なものであることに加え、それが「今、この瞬間に生成された、一度きりのリクエストである」ことをサーバーが検証できる仕組みを導入することが不可欠となる。 具体的な対策としては、いくつかの手法が存在する。一つ目はタイムスタンプの利用である。これは、クライアントがサーバーにリクエストを送信する際に、現在時刻の情報(タイムスタンプ)をデータに含める方法である。サーバーは受信したリクエストに含まれるタイムスタンプを確認し、サーバー自身の現在時刻と大きく乖離している場合や、一定時間以上経過している古いリクエストを無効なものとして拒否する。これにより、過去に盗聴されたデータを再利用した攻撃を防ぐことができる。ただし、クライアントとサーバーの時刻が正確に同期していることが前提となる。 二つ目の対策は、ノンス(Nonce)と呼ばれる一度しか使えないランダムな値をリクエストに含める方法である。ノンスは「Number used once」の略であり、リクエストごとに生成される使い捨ての文字列や数値である。サーバーは一度処理したリクエストのノンスを記録しておき、同じノンスを含むリクエストが再度送信されてきた場合には、それを再生攻撃と判断して拒否する。この方法はセッション管理におけるワンタイムトークンなどにも応用されており、非常に効果的な対策として広く用いられている。 三つ目はシーケンス番号の導入である。これは、一連の通信セッションにおいて、送受信されるパケットやメッセージに連続した番号を付与する方法である。サーバーは受信したメッセージのシーケンス番号を常に監視し、すでに受信済みの番号や、期待される順番と異なる番号を持つメッセージを不正なものとして破棄する。これにより、通信の順序が保証され、途中で記録された古いデータを挿入する形の再生攻撃を防止できる。 四つ目の対策として、チャレンジ/レスポンス認証方式がある。この方式では、まずクライアントが認証を要求すると、サーバーはランダムな値である「チャレンジ」を生成してクライアントに送信する。クライアントは受け取ったチャレンジと自身のパスワードなどの秘密情報を基に演算を行い、その結果である「レスポンス」をサーバーに返信する。サーバーも同じ計算を行い、クライアントからのレスポンスと一致するかどうかで認証を行う。チャレンジは毎回ランダムに生成されるため、たとえ攻撃者が一度の通信でレスポンスを盗聴したとしても、次の認証ではチャレンジが異なるため、盗んだレスポンスを再利用することはできない。 これらの対策を適切に組み合わせることで、再生攻撃のリスクを大幅に低減させることが可能となる。システムエンジニアは、単に通信を暗号化するだけでなく、通信データの一回性や鮮度を保証する仕組みを設計・実装することの重要性を理解しておく必要がある。