ゆうなんとかさんの雑記帳的な。

Twitterで踊ったり音ゲーしたりしてるあの名前がよくわからない人が書いてるらしいよ。

クロスサイトリクエストフォージェリ1歩手前までやってみた

「ちょっとこれはどうなの?」という声を頂いたので、実際にやってみました
この前Railsのアプリでうまくログインできないお話をしましたが、ちょっとだけCSRFがどうのと触れました。今回はそのお話です。

クロスサイトリクエストフォージェリ(CSRF、XSRF)とは?

「ぼくははまちちゃん!こんにちはこんにちは!」のアレです。
HTTPの盲点をついた攻撃方法のひとつで、黎明期から手を変え品を変え使われ続けている、意外と古い手口です。攻撃者の意図したリクエストを送ることで、うまく悪用すると掲示板荒らしから高額商品を勝手に買わせることまでいろいろできます。おおまかな流れはこうです。

  1. 攻撃者は攻撃用のサイトを構築し、適当なところに公開しておく
  2. 誰かが上のサイトにアクセスする
  3. このとき、何かしらの方法でアクセスした人が意図しないリクエストを送信する
  4. その結果、攻撃者の意図した動作をさせることができる

で、ためしにやってみた

一歩手前くらいまでなら割と簡単にできそうですね。ということで、私もやってみました。1歩手前までですよ!なんかよくわからないところにリクエストを飛ばすところまでなら10分くらい出できてしまいます。全工程の9割はツイートの内容を考えるところとHerokuにデプロイするところに割かれています。見込み通り簡単ですね。
実験会場はこちらです。
今回の手口はこちら。

  1. 上のリンクを踏む
  2. JSでwindow.locationを設定し、リダイレクトする
  3. ついでにパラメーターを送る
  4. その結果、おぞましい内容が某所でツイートされる←ここはやってません

GETでリクエストを投げるという古式ゆかしい手口*1を使ってみました。これだとパラメーターで何を送るかわかってしまいますが、そこは速攻でリダイレクトすることでネットワークを監視するか、JSを無効にしていないとわからないようになっています。
…というのを実際に最後までやってしまうとこのご時世大変なことになりますので、今回はTweet Buttonを表示させるにとどめておきました。ツイートするかどうかは皆さんにお任せします。
それにしても、リンクを踏んだ瞬間何をされるかわからないので結構怖いですね。

ただ、これだけだと誤解を与える気がするので、実際に簡単な掲示板を建ててやってみました。

*1:JSなんてものがデファクトでなかった時代はimgタグのsrc属性に/hoge.gif?body=piyo&みたいなのを設定していたらしい