セッション・リプレイ攻撃とは

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と同様にデータベースに安全に保存されますが、値が永続的ではない点が異なります。