LoginSignup
0
2

More than 3 years have passed since last update.

[OIDC]nonceを用いた検証の目的と攻撃および防御の流れ

Last updated at Posted at 2020-09-17

nonceを用いた検証の目的

リプレイアタックの防止。

事例

仮想通貨DAOの不正送金
https://coin-media.jp/18208

攻撃例

サービス:S
Sのバックエンドサービス:SB
攻撃ユーザー:X
被害ユーザー:Y

  1. Sにおいて、YがSBの認可が必要なサービス(画面など)へアクセスする。
  2. Sは、SBへYをリダイレクトさせる。
  3. SBにおいて、Yが認証する。
  4. SBにおいて、認可コードを発行し、YへSへのリダイレクトURLを返却する。
  5. SBは、Sからの認可コードによるIDトークンの払い出しを受け付ける準備をする
  6. Yは認可コードを用いて、IDトークンを得る。
  7. 何らかの方法で、XがIDトークンを窃取する。
  8. Xは、正規のリクエストとして、窃取したYのIDトークンを用いて、不正アクセスを行う。

攻撃防止の流れ

  1. Sにおいて、YがSBの認可が必要なサービス(画面など)へアクセスする。
  2. Sは、SBへYをリダイレクトさせる。この時、SはリダイレクトURLにnonceを付加する。加えてYのセッション情報にこのnonceを保存する
  3. SBにおいて、Yが認証する。
  4. SBにおいて、認可コードを発行し、YへSへのリダイレクトURLを返却する。
  5. SBは、Sからの認可コードによるIDトークンの払い出しを受け付ける準備をする
  6. Yは認可コードを用いて、IDトークンを得る。このとき、トークンに含まれるnonceと2.でセッションの保存したnonceを比較し、一致しているか検証する。一致していたら、セッション情報のnonceを破棄する。
  7. XがIDトークンを窃取する。
  8. Xは悪意をもって、IDトークンを用いたアクセスをSBへ行う。
  9. Sは、渡されたIDトークンのnonceとYないしXのセッション情報で管理していたnonceと比較しようとするが、Yのセッションでアクセスされた場合は、nonceが削除済みもしくは不一致、Xのセッションでアクセスされた場合は不一致となる。

※ここはユーザ特定方法によるが、cookieを用いたセッション管理をしているなら、不正アクセスをしてきたXのセッション情報に含まれるnonceとクエリパラメータのnonceの同一性検証になる。

ポイント

  • nonceは一回限り、ということ。
  • nonceは衝突可能性の低いランダムな値。UUIDとか。

nonceの語源

number used once
悪意のある攻撃から身を守るには?

参考サイト様

OpenID Connectで使われるnonceパラメーターについて

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2