2025-03-10 セッション・リプレイ攻撃
セッション・リプレイ攻撃とは
Session Replay attack(セッション・リプレイ攻撃)とは。
リプレイ攻撃とは、正規のユーザーとサーバー間でやり取りされた認証情報や通信データを傍受し、そのデータを再送信することで不正アクセスを行う攻撃手法です。
リプレイ攻撃とは?仕組みと対策をわかりやすく解説 - 株式会社アクト
mermaid でシーケンス図を書くとこんな感じ。
sequenceDiagram actor A as Attacker actor V as Victim participant S as Server Note over V,S: Legitimate Session V->>S: Login Request S->>V: Authentication Challenge V->>S: Authentication Response S->>V: Session Token V->>S: Request with Session Token S->>V: Response with Sensitive Data Note over A,S: Attacker Intercepts Communication A->>+A: Captures Session Token & Traffic Note over V,S: Session Ends V->>S: Logout or Session Expires Note over A,S: Replay Attack A->>S: Replays Request with Captured Session Token S->>A: Response with Sensitive Data Note over S: Server Unable to Distinguish
Replayed Requests from Legitimate Ones
実際にやってみる
下記の記事で紹介されているような手順で再現可能。
Railsでセッションリプレイ攻撃を防ぐ方法(翻訳)|TechRacho by BPS株式会社
- Aユーザーでログイン
- Aユーザーのセッションcookieをコピー
- Aユーザーがログアウト(or セッション有効期限切れ)
- Bユーザーのセッションcookieを、Aユーザーのセッションcookieで上書き
- BユーザーがAユーザーとしてログインされた状態になる。
この問題を修正するには、user_idに加えてもう1つミュータブルなデータポイントを追加し、両方が有効な場合にのみユーザーを認証するようにします。
ここで追加するミュータブルなデータポイントは「セッショントークン(session token)」と呼ばれます。セッショントークンはセッションcookieと同様にデータベースに安全に保存されますが、値が永続的ではない点が異なります。