くらラボ研究記録

ID関連などのエンジニア的な技術記録を残していきます。

トークンの置き換えに注意!

こんばんはーです、ブログはやっぱり続かないなーって実感のくらです。

ここまで2回にわけてOAuth 2.0のAuthorization Code FlowとImplicit Flowの基礎をざっくりお話ししました。今回は「トークンの置き換え」についてお話ししたいと思います〜

トークンの置き換え攻撃って?

f:id:kura_lab:20120617221629p:plain

みなさんが毎日つかっているiPhoneAndroidのアプリですが、アプリの目的には不要な情報の収集、IDやパスワード抜き盗りなど悪質なアプリがおおくなってきているらしいです。それらの中にはOAuthを悪用してトークンを置き換えて攻撃するアプリもでてきてしまっているようです。悪意をもった開発者が悪いアプリで取得したユーザさんのトークンを悪意のないアプリのアクセストークンと置き換えて認証をいつわっちゃったりするんです。そんなコトされたらこまっちゃいますよね。では、その方法がどんなものなのか簡単にみていきましょー

1. いつもどおりOAuth 2.0でリクエスト開始

具体例はいつものFacebookのウォールに投稿するアプリの例で説明します。

新しいアプリの利用を開始しました。これまでのアプリと同じようにOAuth 2.0プロトコルを用いたもののようです。認可サーバ(Authorization Server)にリクエストするとログインと認可を求められました。(なんだかあやしい気もするけどホントに大丈夫かな…?)

f:id:kura_lab:20120623153951p:plain

2. ログイン&認可画面は公式だから大丈夫だよね…?

Facebookの公式のページでログイン&認可を行います。「なーんだ。ちゃんとFacebookと連携しているので安心、安心。いつものように同意ボタン押せばいいんでしょ?」という感じでこのアプリに認可してアクセストークンをもらいます。

f:id:kura_lab:20120617221750p:plain

3. 悪意あるサーバにアクセストークンががが…

実はこのアプリはトークン置き換え攻撃を目的とした悪意あるアプリだったんです…ニャンてこったぁ!

f:id:kura_lab:20120617221758p:plain

4. 他のアプリのトークンと置き換えで認証されちゃう

悪意あるアプリに渡してしまったトークンは、他のImplicit Flowで実装したブラウザやスマフォアプリでも使用できるため、置き換えてユーザさんを装って認証されちゃうこともあるんです。アプリの開発者さんたちは、悪いひとたちが簡単にトークンを置き換えられないように実装する必要があるんですよ。

f:id:kura_lab:20140331224021p:plain

本日のまとめ

  • OAuth 2.0を利用した悪意のあるアプリが増えてます
  • アプリへの認可は慎重に!
  • アクセストークンを盗まれるとなりすましされる可能性あり
  • 開発者はトークンの流出だけでなく置き換えされにくい実装が必要

無料のアプリだからといって何も考えずに認可してトークンを盗まれてしまい、知らないところでつぶやきや画像が投稿されてしまうのは避けたいですよね。開発者さんたちも自分のアプリをとおして悪用されるのはこまるとおもいます。

このImplicit Flowのトークン置き換えの問題はOAuth 2.0をベースにした「OpenID Connect」というプロトコルで対策することができます。少し難しくなるのですが気になる人は以下を参考にするといいとおもいますー

このOpenID Connectについては機会があれば解説したいとおもいます。次回のテーマは決まっておらず、いつになるかわかりませんが気が向いたら書きたいと思います~