Help us understand the problem. What is going on with this article?

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

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は、クエリパラメータで伝搬してきたstateとYないしXのセッション情報で管理していたnonceと比較しようとするが、Yのセッションでアクセスされた場合は、nonceが削除済みもしくは不一致、Xのセッションでアクセスされた場合は不一致となる。

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

ポイント

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

nonceの語源

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

参考サイト様

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした