検索
連載

図解:OAuth 2.0に潜む「5つの脆弱性」と解決法デジタルID最新動向(2)(2/4 ページ)

SNSなど複数のWebサービスが連携して動くサービスは広く使われている。連携に必要不可欠なのが、アクセス権限をセキュアに受け渡すための「OAuth 2.0」といった仕組みだ。今回はOAuth 2.0に関連する代表的な5つの脆弱(ぜいじゃく)性と攻撃手法、対策についてシーケンス図を使って解説する。

Share
Tweet
LINE
Hatena

【攻撃手法1】Cross-Site Request Forgery(CSRF)

 「Cross-Site Request Forgery(CSRF)」攻撃は、一般のWebサービスでも珍しくありません。悪意のある外部サービスへユーザーをアクセスさせたり、特定のURLへの誘導などをきっかけに、ユーザーの意図しない機能を実行させたりする攻撃です。

 例えばブログサービスやSNSがCSRF対策を怠ると、悪意のある第三者により、標的となったログイン中のユーザーが、犯罪予告のような意図せぬ記事投稿をさせられる恐れがあります。

 OAuth 2.0ではCSRF攻撃の目的が多少異なります。標的となったユーザーに対し、攻撃者が自らのProtected Resourceにアクセスする許可を与えることを意味します。

 これでは攻撃にならないように思えます。そこで、攻撃者のユーザーデータにアクセスすると、何が問題になるのか、例を2つ紹介しましょう。

  • 攻撃例1

 ClientとAuthorization Server、Resource Serverの間でプライベートなデータをやりとりする場合を考えます。

  • Client:プライベートな画像や動画を管理するサービスであり、外部のオンラインストレージサービスにデータを保存できる
  • Authorization Server、Resource Server:画像や動画を保存できるオンラインストレージサービス

 CSRF攻撃は、標的ユーザーのClientアカウントに対して、攻撃者のアカウントにひも付くオンラインストレージへのアクセスを許可させます。これだけで攻撃者は標的ユーザーのプライベートな画像や動画にアクセス可能になります。

  • 攻撃例2

 ClientがソーシャルログインにOAuth 2.0を利用しているとします。

  • Client:パスワードを用いたログイン機能に加え、外部サービスのアカウントを用いたソーシャルログイン機能を持つ
  • Authorization Server、Resource Server:ユーザーの識別子やプロフィール情報などを提供するSNS

 CSRF攻撃によって、標的ユーザーのClientアカウントと攻撃者のAuthorization Serverのアカウントを用いたソーシャルログイン機能が有効になります。この場合、攻撃者は標的ユーザーのClientアカウントに簡単にログインできるようになります。

 CSRF攻撃の流れを図2にまとめました。どこに脆弱性があるのか分析してみましょう。

  1. 攻撃者(Attacker)は自らの環境から、Authorization Server上でClientに対してProtected Resourceへのアクセスを許可する
  2. 攻撃者はその後、URL形式を採る「Authorization Response」と呼ばれるClientに戻る際のリクエストを中断する(図2中の赤い矢印)
  3. 標的となるユーザーにURLを送るなどの行為によって、中断したAuthorization Responseの処理を続行させる(青い矢印)
  4. Clientは標的となるユーザーと攻撃者のProtected Resourceへのアクセス権限をひも付ける(緑の矢印)

 つまり、攻撃者の環境で生成されたAuthorization ResponseをClientが標的ユーザーの環境で受け付けてしまう実装になっている点が問題になります。

図2
図2 CSRF攻撃の流れ 以下の図では攻撃者や攻撃者の環境を表す要素の下に赤線を引いた

 CSRF攻撃を防ぐには、図3の流れになるように対策を採ります。

 ClientからAuthorization ServerにResource Ownerを送る際のAuthorization Requestへ、「stateパラメーター」と呼ぶClientのセッションにひも付く値を含めるように改善します(図3中の青い部分)。Authorization ServerはClientに戻るAuthorization Responseにも、同じstateパラメーターの値を含めます。このためstateパラメーターの値をClientが検証して、同一セッション上の処理だと確認できます。同一セッションでなければリジェクトします(赤い矢印)。

 攻撃者は自らのセッションにひも付くstateパラメーターを知ってはいても、標的となるユーザーのセッションにひも付くstateパラメーターを知ることは難しいため、CSRF攻撃の手順4を防止できます。

図3
図3 stateパラメーターを使うことでCSRF攻撃を防ぐ

 攻撃というとどうしても「攻撃者に×××を奪われる可能性がある」といったイメージがあります。しかし、攻撃者のリソースとひも付けられるリスクがあることを覚えておくとよいでしょう。

【攻撃手法2】Token Replace Attack

 Webブラウザ上で動作するJavaScriptのアプリケーションなどを対象とした「Implicit Grant Flow」と呼ばれる処理フローが、OAuth 2.0にあります。

 このフローには、Authorization ServerからResource Ownerを経由してClientに戻る際のAuthorization Responseに「Access Token」の値が含まれています(図4中の青い矢印)*2)。ClientはそのAccess Tokenを用いてAPIアクセスを行います。ここまではOAuth 2.0で想定されているユースケースです(図1中の薄い灰色の長方形で囲んだ部分に相当)。

 ここで、Clientがソーシャルログインの機能を実装しようとして自らのバックエンドサーバと通信しているようなケースを考えます。

 ClientはバックエンドサーバにAccess Tokenを送り(赤い矢印)、バックエンドサーバはClientと同様にAPIアクセスを行い、取得したユーザー識別子を用いてログイン状態にする、という実装が考えられます。

*2) Access TokenはRFC 6749と同時期に公開されたRFC 6750で定義されている。

図4
図4 Implicit Grant Flowの処理内容 Access Tokenの流れを示した

 「Token Replace Attack」は、この「バックエンドサーバに送るAccess Tokenを別のものに置き換える」ことでClientに別のユーザーでログインできるようにします。

図5
図5 Token Replace Attackの攻撃内容

 図5に示した攻撃の流れは次の通りです。

  1. 攻撃者はClientのバックエンドサーバに対して、別途取得していた標的となるユーザーのAccess Tokenを送る(図5中の青い矢印)
  2. 攻撃者は標的となるユーザーとしてClientにログインできる

 一般のOAuth 2.0実装で使われているAccess Tokenは、RFC 6750で定義された”Bearer Token”と呼ばれており、単体でAPIアクセスが可能です。つまり、APIアクセスを成功させるために攻撃者が利用するAccess Tokenには制約がなく、Authorization ServerがこのClientに対して発行したものでなくても構いません。同じAuthorization Server、Resource Serverに対するClientであり、第三者のAccess Tokenを保持していれば、この攻撃が可能となります。

 ここまでを踏まえると、攻撃が成功する前提条件は次のようになります。

  • ClientがバックエンドサーバにAccess Tokenを送信している
  • ClientのバックエンドサーバはAccess Tokenを用いてユーザー識別子が取得できることしか確認しない
  • 攻撃者は同一Authorization Serverから発行された第三者のAccess Tokenを保持している

 この前提条件をつぶすことが対策になります。2種類の対策があります。

  1. ClientがバックエンドサーバにAccess Tokenを送ってログインさせる実装をやめる
  2. Access Tokenを送らざるを得ない場合、バックエンドサーバ側でAccess TokenがClient向けに送られたものだと検証する

 (1)については、「Authorization Code Flow」の利用が適しています。バックエンドサーバとの間でAccess Tokenのやりとりが必要ないからです。Authorization Serverによっては、Access TokenがどのClientに向けて発行されたものかを確認できるようなAPIを提供しています。

 (2)では、別のClientに発行されたAccess Tokenの利用を防止できます。ただし、詳細な実装内容はAuthorization Serverにより異なるので注意が必要です。

 Token Replace Attackは、Access Tokenを入手できれば実行できるため、難易度の高い攻撃ではありません。これを意識して、Clientで安全な実装をする必要があります。

 例えば、SNSのプロフィール情報を用いた占いサービスが悪意を持って構築された場合を考えてみましょう。OAuth 2.0の仕組みを用いてプロフィール情報へのアクセス許可を求めて来た場合、仕様用途も(一見)シンプルなため、ユーザーは比較的簡単に許可してしまうかもしれません。しかし、この占いサービスの開発者が悪意を持っていたら、取得したAccess Tokenを脆弱性のある別のサービスへの攻撃に利用できるのです。

Copyright © ITmedia, Inc. All Rights Reserved.

Security & Trust 記事ランキング

  1. 「生成AIのサイバー攻撃への悪用」は増加する? 徳丸浩氏が予測する2025年のセキュリティ
  2. AWS、組織のセキュリティインシデント対応を支援する「AWS Security Incident Response」を発表 アラートに圧倒されるセキュリティチームをどう支援?
  3. 商用国家安全保障アルゴリズム(CNSA)の期限となる2030年までに暗号化/キー管理サービス市場が60億ドルに達するとABI Researchが予測 急成長の要因とは?
  4. ChatGPTやClaudeのAPIアクセスをかたってマルウェアを配布するPython用パッケージ確認 Kasperskyが注意喚起
  5. Google、オープンソースのセキュリティパッチ検証ツール「Vanir」を公開 多種多様なAndroidデバイスの脆弱性対応を支援するアプローチとは
  6. 「このままゼロトラストへ進んでいいの?」と迷う企業やこれから入門する企業も必見、ゼロトラストの本質、始め方/進め方が分かる無料の電子書籍
  7. 高度なAIでAIをテスト OpenAIが実践するAIモデルのレッドチーム演習とは
  8. 「SQLite」のゼロデイ脆弱性、GoogleのAIエージェントが見つける AIは脆弱性調査の課題をどう解決したのか?
  9. 従業員は「最新のサイバー脅威との戦い」を強いられている セキュリティ教育に不満を持つ理由の1位は?
  10. 堅調なID管理や認証、脅威インテリジェンスなどを抑え、2024年上半期で最も成長したセキュリティ分野は?
ページトップに戻る