【書評】OAuth・OIDCへの攻撃と対策を整理して理解できる本(リダイレクトへの攻撃編) #技術書典

2020.03.09

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

OAuth や OIDC について、仕様を読みながら学習を進めていると、「何に使えるのかよくわからない値」や「挙動はわかっても実際にどのような攻撃を防げるのかがよくわからない値」がたくさん出てくるように感じます。

例えば以下は私の Slack での発言を検索した結果ですが、c_hash で何が防げるのかわからず苦悶しています。

そこで、OAuth・OIDCへの攻撃と対策を整理して理解できる本(リダイレクトへの攻撃編) を読んでみたところ、この手の混乱に非常に役立つように感じたので、こちらで紹介させていただきます。

OAuth・OIDCへの攻撃と対策を整理して理解できる本(リダイレクトへの攻撃編)

仕様を元に OAuth や OIDC の勉強をしていてわかりづらいのは、具体的な攻撃の手法よりも前に、防御の方法について記載があるためではないかと感じています。

それに対して、この本では具体的な攻撃方法の紹介の後に、その攻撃に対してどういった要素を使って、どのような仕組みで対策になるのか?という説明がされており、個人的にはその構成が非常にわかりやすいなと感じました。

どのような人に勧めたいか

  • なんとなく OAuth 2.0 や OIDC のフローは頭に入ったが、セキュアにするための方法に興味がある
  • state、nonce、PKCE、at_hash、c_hash の用途がよくわからない
  • これらの値、フローを使わないと何が起きるのかがよくわからない、何が起こり得るのか知りたい

といった方におすすめしたいです。

そもそも基本的なフローがよくわかっていない方には、先に以下の書籍を読むことをおすすめします。いずれも非常にわかりやすく感じました。

各章で何が学べるのか? & 個人的に感じたこと

第1章 OAuth・OIDC のおさらい

OAuth、OIDC の各登場人物とフローについてのおさらいです。 フローのおさらいを通じて認可レスポンスのコールバックのタイミングで攻撃が行われる理由について解説されています。 また、以降の章で解説される各攻撃に対して OAuth、OIDC のどの要素が対策となるのか?の一覧が紹介されています。

第2章 CSRF

コールバックの URI を他人に踏ませる CSRF について、以下について学ぶことができます。

  • どのような手順で攻撃が行われるか
  • 攻撃の結果、どのような影響が予想されるか
  • state を使って対策した場合のフローと、なぜこれで CSRF の対策になるか?

第3章 リプレイ攻撃

インプリシットフローが利用可能な ID プロバイダにて、攻撃者が他人の ID トークンを使って RP への認証を試みる攻撃を例に、以下について学ぶことができます。

  • リプレイ攻撃とはどのような攻撃なのか
  • ID トークンが漏れた場合の攻撃のシーケンス
  • nonce によって攻撃を防ぐ手順

state や nonce についてなんとなく理解してきたタイミングで、state と nonce がそれぞれ存在する必要があるのかわからない、という疑問は割とあるあるだと思うのですが、state では防げない攻撃のシーケンスを見ながら本書を読むことで、nonce が何を守りたいのか?というところが理解できるのではないかと感じました。

第4章 認可コード横取り攻撃

カスタム URL スキームの重複によりコールバックによって意図しないアプリが起動することによって認可コードを横取りされる攻撃について、以下について学ぶことができます。

  • 攻撃のフロー
  • PKCE のフロー
  • PKCE がどのように認可コード横取り攻撃の対策となるか

第5章 トークンインジェクション

  • トークンインジェクションとはどのような攻撃なのか
  • at_hash によるアクセストークンの置き換え検知の仕組み

について学ぶことができます。

また、「コラム: トークンはどこからもれるのか?」にて、トークンの漏れる経路について紹介されています。そもそもトークンが漏れることを前提にした対策、必要なの?という疑問の答えになるかもしれません。

第6章 コードインジェクション

  • コードインジェクションとはどのような攻撃なのか
  • PKCE によるフローと、PKCE でコードインジェクションを防ぐ仕組み
  • nonce によるフローと、nonce でコードインジェクションを防ぐ仕組み
  • c_hash によるフローと、c_hash でコードインジェクションを防ぐ仕組み

c_hash について何を防げるのかのイメージがついていなかったのですが、ハイブリッドフローの場合であることや、nonce と比べた際の利点について勉強になりました。

第7章 全体整理

各フローの各要素に対して、

  • どのような攻撃が存在するのか?
  • 防ぐにはどのような手段があるのか?
  • 複数の手段が考えられる場合、どのような差があるのか?

について学ぶことができます。 この辺りの学習を続けているとある攻撃が、X で防げるけど Y でも防げる、といった時に混乱することが多いと感じますが、まとめて整理されているのが非常にありがたいです。

まとめ

OAuth・OIDCへの攻撃と対策を整理して理解できる本(リダイレクトへの攻撃編)を紹介させていただきました。

この本では具体的な攻撃方法の紹介の後に、その攻撃に対してどういった要素を使って、どのような仕組みで対策になるのか?という説明がされており、個人的にはその構成が非常にわかりやすいなと感じました。

  • なんとなく OAuth 2.0 や OIDC のフローは頭に入ったが、セキュアにするための方法に興味がある
  • state、nonce、PKCE、at_hash、c_hash の用途がよくわからない
  • これらの値、フローを使わないと何が起きるのかがよくわからない、何が起こり得るのか知りたい

といった方におすすめしたいです。

クラスメソッド の事業開発部ではソフトウェアエンジニアを募集しています

現在私は事業開発部で prismatix というサービスの開発に携わっています。 具体的には認証認可のためのマイクロサービスの開発を行なっています。 OAuth 2.0 および OIDC の仕様を読みながらコードを書く仕事です。認証認可に強い方を切に求めています。

そして、事業開発部ではソフトウェアエンジニアを募集しています。

もし興味のある方がいましたら、こちらのページを見ていただけますと幸いです。(ソフトウェアエンジニアだけでなく、SRE、運用エンジニア、QA エンジニア、プロジェクトマネージャーなども募集中です。)

私からは以上です。