もう消しちゃったんだけど、前回の記事でちょっとだけ書いてたことには、もう名前がついてたらしい。のでメモ。
どんな話か
i アプリや、i モード 2.0 ブラウザの JavaScript には、「ダウンロード元と同じドメインにしかネットワーク接続できない」という制約がかかっている。これは、PC 向けの Java アプレット等と同様の制限で、Same origin policy と呼ばれる。
しかし、「同じドメイン」かどうかの判定がドメイン名で行われる場合、アプリやスクリプトのダウンロード後に DNS を書き換えると、ダウンロード元以外のサーバに接続することができてしまう。これを、DNS Rebinding というらしい。
- 徳丸浩の日記 - 今日の用語特別版 - DNS Rebinding
- http://www.tokumaru.org/d/20071126.html
誰が困るかは場合によるけど、i アプリとかの場合でいうと、「うちのサイトは i モードブラウザで『ふつうに』アクセスするしかないはず」と思い込んでいる人だろう。ちょうど昨日、JavaScript でも DNS Rebinding 攻撃ができてしまうという記事がはてブで注目を集めていた。HTML のソースが閲覧「できてしまう」という話。
アプリの場合
上記の blog にも「iモードアプリやiモードFlashでも同様なことが可能であると思います」と書かれている通り、実際に i アプリで DNS Rebinding 攻撃に成功したという報告を見たことがある。どこかというと、某掲示板の i アプリスレッド。2008 年 1 月くらいだったと思う。
i アプリの場合はバイナリも扱えるから、攻撃に成功した場合、HTML ソースを閲覧するだけでなく、攻撃先のサイトから画像やアプリなど任意のファイルを入手できてしまう。入手したファイルは、別のサーバに送ることもできるし、SD カードに保存して PC に移すこともできる。また、ファイルを入手するだけじゃなくて、偽のデータを送り込むこともできるから、例えばネットワークランキング対応のアプリがあったとして、サーバに偽の超ハイスコアを送り込むこともできてしまう。掲示板では、実際に公式サイトや Google Maps の i アプリ (jam/jar ファイル) をダウンロードして、PC に転送できたという報告が挙っていたと思う。
なお、同じスレッドで、ドコモのサービスの中に、「自分がアクセスした URL の一覧を後でまとめてレポートしてくれるサービス」があるって話もあった。i モードブラウザが正規の流れでアプリをダウンロードする際の URL もレポートに含まれるので、そもそも URL はユーザーに丸見えだと思った方がいい、という。これは DNS Rebinding と直接関係ないけど、DNS Rebinding を使って任意のファイルを入手しようとした場合、攻撃がしやすくなるだろう、ということが指摘されていたんだったと思う。
どうすればいいのか
ここから先がさらにうろ覚え。
ひとつの案として、攻撃先が HTTP 1.1 の「名前ベースのバーチャルホスト」を使っている場合、DNS Rebinding を使ったら Host ヘッダが合致しなくてアクセスできなくなるだろう、というのがあった。でも、掲示板には、「それじゃ防げないぞ」という書き込みもあったから、もしかしたらダメなのかも。
あと、504i あたりからだったと思うけど、リクエストヘッダの User-Agent を見ると、アプリからのアクセスとブラウザからのアクセスが見分けられるようになっているという話。でもこれも、アプリ本体のダウンロードは防げても、正規のアプリもアクセスするようなデータ (アプリの初回起動時にダウンロードするようなやつ) だと不正な方だけはじくことができない。また、もしかしたら機種によってはアプリから User-Agent を書き換え可能だったりしない? という話も挙っていたと思う。
結局その掲示板では、はっきりコレという対策手法が書き込まれることはなかったと記憶している。DNS Rebinding が可能だという前提に立った上で、それでも問題ないように複数のチェック方法を組み合わせるとか、攻撃された時にすぐ検知できるようにするとかしかないのかもしれない。