2009年2月17日火曜日

Twitletを自己流に検証してみた人の手記

Twitter関連サービスはいっぱいあるけど利用するのにユーザIDとパスワードを要求するところがある。ユーザIDとパスワードを入力してしまうということはイコールサービス事業者(この場合Twitterのサービスを利用しているだけでTwitter本体とは関係ない)に自分のタイムラインを明け渡すことに等しいわけで、以前にこういうことがあった。

悪名高きSam Sethis、最新のベンチャーはTwitblogs
http://jp.techcrunch.com/archives/20081214the-notorious-sam-sethi-launches-his-latest-venture-twitblogs/

Twitblogを使ってみるためには、Twitterの認証情報を直接Twitblogに入力しなければならないことを除いては。これは最良の状態でさえ危うい行為だ。しかし、そのサービスが過去に倫理的に問題のある行動をとったことがあるとしたら、結果は言わずと知れている。しかもこのサービスには利用規約もプライバシーポリシーもないので、ユーザーは自分の個人情報がどう使われるのか売られるのか悪用されるのかもわからない。

……というわけで、基本的にユーザIDとパスワードを要求するようなサービスは使わないことにしている。

と、そんなときに

image Twitterに投稿できるブックマークレットを作成してくれるってことでTwitletを紹介されたわけで……

●Twitletの中身を開いてみた(図の①に相当する想像)
とりあえず用心深くユーザIDだけは入力して、パスワードにはダミー(文字通りdummyと入れた)を放り込んでみたら意外なことにブックマークレットが作れてしまった。もちろん直接Twitterでは認証が通らないはずなので、ダイアログは出るものの投稿はできない(やってみたけどエラーメッセージすら出ない)
じゃあどの辺で認証してるのかなぁ、と思って当然のことながらブックマークレットのソースを覗いてみた。改行&インデントして見渡してみる。

javascript:void((function(){
var v=0.16;
if(document.body){
  var p=prompt('[FSQUARE] what are you doing?','');
  if(p){
    e=document.createElement('iframe');
    e.id='port';
    e.style.visibility='hidden';
    document.body.appendChild(e);
    var r=new RegExp('#this|#link','g'); 
    port=document.getElementById('port');
    port.src='http://www.twitlet.com/updates/index.php?a=(何らかの文字列)&t='+encodeURIComponent(p.replace(r,location.href))
  }
}else{
  window.location='http://www.twitlet.com'
}
})());

まずわかることはブックマークレット内にパスワードが存在しないこと(ユーザIDもあくまでダイアログの表示用で、送信に使われていない) このブックマークレットは単体では直接Twitterに投稿することはできないことになる。
あとつたない知識と検索でわかったのは

・ダイアログに入力した文字列に"#this""#link"という表記があったら、現在開いているサイトのURLに置き換える
(これはTOPページにも書いてある仕様)
id=’port’という名のiframeタグ(属性はvisibility='hidden')を生成してサイトに追加。
・その中に'http://www.twitlet.com/updates/index.php?a=(何らかの文字列)’というURLを表示して入力した文字列(t=)を流し込む。

推測でしかないけど、a=……の部分はおそらく認証情報が一意になって管理されてる部分で、Twitletのサーバに最初に入力したユーザIDとパスワードが記録されてしまっていると思われる。aの値が1つである(2つの文字列の組み合わせかもしれない)ことを考えると登録ごとに使い捨てになっていて削除や変更は受け付けられないというかできない仕様になっているかもしれない。

えふすく個人が出す結論としては、ユーザIDとパスワードをTwitter以外のところに握られてしまうので使えないと判断した。
もし登録してしまって、やめたくなった場合はTwitterの方のパスワードを変更しておけば大丈夫だと思う(上記の推測に基づくので確かではない)

●で、Twitletに任せてもいいのか?(図の②に相当する想像)

仮にユーザIDとパスワードを預けてでもTwitletを使いたい、という場合Twitletというサービスのセキュリティ関する品質を見極めなければならない。
Twitlet側からは一応セキュリティについての回答が載っていた。

Is it secure?(これって安全なの?)

Yes and No. Twitlet is storing your username and password in the bookmarklet code on your browser for fast and simple updating. This means if other people have access to your computer they can send messages to your Twitter account. Your username and password are encrypted to ensure that even if someone sees your bookmarklet's source code, she can't easily remember or guess it. Obviously that wont be that hard for a person to decode it (with enough experience in cryptology.) So you should only use it at your own risk.

YesともNoとも言える。Twitletは速くかつ簡単に投稿できるように、ブックマークレットのコードはあなたのユーザーIDとパスワードを含んでいる。これは他の人々があなたのコンピュータにアクセスすれば、あなたのアカウントでTwitterにメッセージを送信できてしまうことを意味している。あなたのユーザーIDとパスワードは誰かがあなたのブックマークレットのコードを見ても覚えたり、推測することができないように暗号化されているが、(暗号の偉い人の手にかかれば)人の手で解読することはそんなに難しくない。よって、これはあなたがあなた自身の責任で使うべきだ。(訳:えふすく)

想像とは違ってa=に与えられていた文字列はユーザIDとパスワードの組み合わせを暗号化したものであるようだ。投稿時はそれをTwitletのサーバが解読してTwitterに送っているのだろうか。

●一応図示してみた

20090217_1上がブックマークレットのソースを見た段階での想像図。下がTwitletの説明を読んだ上でなお想像してみた図。
決定的に違うと言えそうなのは、上の形では登録者の認証情報(ユーザID&パスワード)をTwitletが蓄積しているのでヤバそうなのに対して、下の形ではあくまで相互の暗号化アルゴリズムを持っているに過ぎないので認証情報なんか持ってませんよーと言うことができそうだ。

●課題(今のところやるつもりゼロ)

・API経由でのTwitterの投稿に最低限必要なパラメータっていくつあるの?
Twitlet見る限りではユーザID&パスワード&コメントだけでできそうな感じになってるけど。自分でサービスとかクライアントとか作る技量はない。

・そもそもTwitterのアカウント乗っ取られても有名人でもない限り被害なくね?
たぶんそんなことないと思うけど。具体例があまり思いつかなかった無名の人。

・お前ここ間違ってるよ。
自己解決の過程ですのでコメントで指摘していただければいい注釈になると思います。

0 件のコメント:

アクセス解析