まちゅダイアリー

OAuthを悪用したTwitter DMスパムが登場

2009-08-01

はじめに

今回のDMスパムについての基本的な情報です。

ここから本題

これは初めてOAuthが悪用された事例になるかも。

TwitterでスパムDMが広がっている。これを踏むと、意図せずにフォロワーへスパムDMを送信してしまうというもの。 スパムDMについては ITmedia に記事がでている。

Twitterで8月1日ごろから、スパムDM(ダイレクトメッセージ)が出回っている。DMに書かれたURLのページにアクセスし、ボタンをクリックすると、同じDMを自動でフォロワーに送り付けるという仕組み。

ここで注目なのが、「ボタンをクリックすると、同じDMを自動でフォロワーに送り付ける」の一文。 これまでにも SNS を悪用したスパムDMは存在したけど、たいていはスパムサイトにIDとパスワードを教えてしまうか、サイトにセキュリティ上の問題(CSRFへの脆弱性)があった場合だった。 もともと、SNS経由のスパムDMは知り合いからのメッセージということで警戒感が薄れてしまうけど、今回はボタンのクリックだけでDMが送られてしまうという、より広まりやすい条件になっている。

スパムDMが送られるまでの流れ

まず、知り合いから自分のTwitterアカウントにDMが届く。 DMは、 MobsterWorld というサービスへ無料で招待しますよ、という内容。

oauth-attack 01

DMのURLをクリックすると、スパムサイトへとアクセスする。 サイトにはTwitterベースのマフィアゲームという紹介文と赤いボタンが載っている。

oauth-attack 02

赤いボタン (Click here to play!) をクリックすると、Twitterのサイトへと戻ってくる。 Twitterのサイトには「An application would like to connect to your account.」というタイトルと、「Allow Mobster World access?」というメッセージが表示されている。

oauth-attack 03

ここで「Allow」をクリックすると、先ほど送られてきたDMと同じ内容が、今度は自分の名前で他のフォロワーへと自動的に送られてしまう。

ALLOWをクリック 感染 してしまったら

ITmediaの記事にあるように、Twitterの画面から「設定」→「このユーザーに対する操作」をクリックして、「Mobster World」の「許可を取り消す」をクリックすればOK。

ボタンクリックだけでDMが送られる理由

これはウイルスや脆弱性じゃなくて、OAuthという仕組みを見事に悪用している。 OAuth詐欺とでも言えばいいのか。

OAuthというのは、Webサービスへのアクセス権を、他のサービスへ与えるための仕組み。 たとえば、ブログを更新すると、自動的にブログのタイトルを Twitter でつぶやいてくれるというサービスがあったとする。 普通は、 Twitter の ID とパスワードを、そのブログサービスに教えることで実現するんだけど、これを「パスワードを教えることなく」実現できるのが OAuth のいいところ。 OAuthについての詳細は、以下のサイトを参照。

ちょっと難しいけど、OAuthは「Twitterのパスワードを教えずに、パスワードを教えるのと同じこと(つぶやき)ができる仕組み」と思ってもらえればOK。

スパムDMの話に戻る。 先ほどの Mobster World サイトのボタンは、実は OAuth 要求を Twitter に送るためのボタンになってる。 なので、Twitterのサイトでは、「Mobster World にあなたの Twitter アカウントの権限を与えますか?」というメッセージを表示している。 ここで、「ALLOW(与えるよー)」ボタンを押すと、スパムサイト (Mobster World) にアカウント権限を与えてしまうことになり、このサイトがユーザの代わりに勝手にDMを送れるようになってしまうという訳。

何が問題なのか?

ここで「OAuthって怖い」と考えそうだけど、そうじゃない。 これだけ WebAPI が普及した今、「パスワードを教えずに、パスワードを教えるのと同じことができる仕組み」自体は必要。

問題は、 OAuth の運用方法、特にユーザインタフェースじゃないかと思う。 Twitter の確認画面だけど、「パスワードを教えるのと同じことができる」ことを確認するには、少し説明不足。

例えば、Yahoo!の OpenID でログインする場合には、以下のような警告メッセージが表示される。

oauth-attack 04

冒頭に警告アイコンが表示されていたり、「Warning」と書かれていたりと、利用者が一瞬手を止めるようなデザインになっている。 OpenID のように ID を通知するだけでもこのメッセージなので、アクセス権限を与える OAuth ならもう少し強めのメッセージの方がいいんじゃないかな。 それに、ログインのたびに確認を求める OpenID と違って、 OAuth は一度許可したら取り消すまではずっと有効になる。 ユーザは1サービスあたり1回だけの確認なので、少し手間だったとしても問題ない。

例えば、「私は危険性を理解した上で、○○へアクセス権限を与えます」というチェックボックスを入れないと「ALLOWボタン」が有効にならないとか、ね。危険性という言葉がネガティブなら、「私は○○サイトを信頼するので、アクセス権限を与えます」でもいい。 合わせて、アクセス権限が何を意味するのかも明記する。

さらに、DMはUpdateとは別の権限にしたほうがよさそう。

まとめ

OAuth はまだ認知度が低いので、幅広いユーザが使うサービスで使う場合は、ユーザへの説明を丁寧にすべきといういい事例になったと思う。 パスワードを教えることに近い(もちろん完全に同じじゃないけど)ことをやるための仕組みだし、「パスワード入力欄」が表示されない分だけ、さらにユーザに注意を促すことが大切。 でも、こういう事件を経ながら、少しずつ普及するんじゃないかな。

また、ユーザとしては一般論として、怪しいDM・URLは無視することと、(特に)英語のメッセージを読み飛ばさない(分からないならボタンをクリックしない)ことが自衛として大切かなぁ。

追記

MobstarWorldのOAuth利用スパムについて - r-weblifeという記事に、Yahoo!とYahoo! JapanのOAuth承認画面のスクリーンショットが載っている。 このインターフェースは参考になる。