Firefoxと XULの セキュリティ ホール ---- powered by 高橋メソッド in XUL ---- 2004.4.18 Mozilla.Party.JP 5.0 ---- 前回「字が 小さい」と 言われたので ---- でかく してみた ---- オンラインで 利用できて無 駄に高機能な [[高橋メソッド|http://www.rubycolor.org/takahashi/]] 実行エンジン ---- XULは こんな使い 方もできる ---- SI案件など で使えば コスト削減に 役立つかも ---- 宣伝 ---- WEB+DB PRESS Vol.27 6月発売号 XULの紹介 記事(予定) ---- それは 置いといて ---- 自己 紹介 ---- Piro ---- 超重量級 拡張機能 「タブブラ   ウザ拡張」 ---- 糞な拡張を量産 していることで (一部で)評判 ---- 肩書 「株式会社    グッデイ    チーフ     デザイナー」  ---- でも 「デザイナー」 は社内に一人だけ ---- =デザイン 関係の 雑用係 ---- それは さておき ---- Firefox のセキュ リティ ---- 前提 ---- 脆弱性 とは? ---- =セキュリ ティホール ---- =攻撃を 受ける 「弱点」 ---- 攻撃 ---- 2種類 ---- (1) 「壊す」 ---- システムに ダメージ ---- ページを見た だけでハード ディスクを フォーマットとか ---- 恐ろ しい ---- (2) 「盗む」 ---- 秘密の情 報を盗む ---- 保存された 情報を盗み 見たりとか ---- ユーザを騙して パスワードを 入力させたり とか ---- ヤバ イ ---- 開発者の間でも 利用者の間でも セキュリティに 対する関心が 高まっている ---- 本題 ---- Firefoxの どこにどんな セキュリティ ホールがある? ---- Firefoxを 構成する層 ---- 4つ ---- (1) バックエンド ---- JavaScriptの 実行エンジン 画面の 描画エンジン ---- プログラ ムにバグ は付き物 ---- 例えば ---- [[Bug #288688|https://bugzilla.mozilla.org/show_bug.cgi?id=288688]] メモリ内の情報を 盗める (Firefox 1.0.3で  修正) ---- [[Bug #285595|https://bugzilla.mozilla.org/show_bug.cgi?id=285595]] 不正な画像で ヒープオーバー フロー (修正済) ---- こういう問題は どんなアプリ ケーションでも ありがち ---- (2) XPCOM ---- ファイル 操作などの ライブラリ ---- Firefoxの 全機能を これで実現 ---- =XPCOMを使えば (Firefoxに できることは) 何でもできる ---- =XPCOMにアク セスできれば 破壊も盗みも 思いのまま ---- アクセス 制限 ---- 原則 「インストール されたスクリプト からしか使えない」 ---- =拡張機能や Firefox本体 内部でしか 使えない ---- でも ---- 制限を回避 できたら したい放題 ---- 詳しくは 後述 ---- (3) XUL ---- アプリケー ションの UIを定義 する ---- ブラウザ のUI ---- パスワー ド入力欄 ---- 偽物のブラ ウザのUI ---- 偽物のパス ワード入力欄 ---- =ユーザを 騙せる 危険性 ---- [[サンプル|browser2.xul]] ---- ツールバー類 を常に表示して いると引っかか らない(かも) ---- 「これは   本物の   入力欄?」 ---- 常に 疑う ---- 悲しい時代になったものですね…… ---- (4) XULアプリ ケーション ---- XPCOM+XUL +JavaScript によるプログラム ---- [[image src="chrome1.png" width="1000" height="517"]] ---- 抜け 道 ---- [[image src="chrome2.png" width="1000" height="511"]] ---- 例えば ---- [[Bug #284627|https://bugzilla.mozilla.org/show_bug.cgi?id=284627]] サイドバー内から 任意のコードを 実行できる (修正済) ---- [[Bug #285438|https://bugzilla.mozilla.org/show_bug.cgi?id=285438]] ドラッグ&ドロッ プでアクセス制限 が回避される (修正済) ---- 抜け道を 作らない 見落とさ ない ---- 拡張 ---- 拡張機能も 他人事 じゃない ---- [[image src="chrome3.png" width="1000" height="593"]] ---- Firefox本体 が修正された! これで安心だ! ---- [[image src="chrome4.png" width="1000" height="432"]] ---- 作者が 直さない と ---- 穴開き っぱ ---- Firefox本体 だけの更新で 安心しがち ---- 超 危険 ---- [[Bug #285438|https://bugzilla.mozilla.org/show_bug.cgi?id=285438]] ドラッグ&ドロップで アクセス制限が 回避される問題 ↓ [[Super Drag and Go|http://superdragandgo.mozdev.org/]] で再発 ---- 拡張作者は Firefox本体の セキュリティ アップデート を追っかける ---- ユーザも 気づいた人 はぜひ報告 してほしい ---- 作者も 利用者も 気を抜け ません ---- 体験談 ---- 拡張を作る上で やってしまい がちな失敗 ---- もとい ---- 僕が犯し た失敗 ---- XPCOMへの アクセス制限を 無駄にしてしま うポイント ---- 読み込むURI をサニタイズ してない ---- sanitize =危険な URIを はじく ---- data:~ javascript:~ chrome:~ など ---- [[image src="chrome5.png" width="1000" height="517"]] ---- これを防ぐためには [[nsIScriptSecurityManager|http://lxr.mozilla.org/mozilla/source/caps/idl/nsIScriptSecurityManager.idl]] を活用したり 自分でサニタイズしたり しないとけない ---- JavaScript のコード ---- Webページ内 のコードを 拡張内の eval()で 実行する時とか ---- 拡張内で 定義した 関数 ---- [[image src="chrome6.png" width="1000" height="516"]] ---- そんなつもり はなくても ---- [[image src="chrome7.png" width="1000" height="527"]] ---- 実行コン テキスト ---- 変数の スコープ ---- JSの 深層 ---- しっかり 理解して ないと ---- 大変な 事に ---- JS ナメたら あかん ---- Firefoxも JSで動作 ---- 穴があれば 覗き放題 触り放題 ---- 根本的 な問題 ---- アプリケーションを Webページと同じ 技術で作るという こと ---- IEの Active X Mozillaの XPCOM ---- Flashがアプリ ケーションの開発 環境になる? ---- この流れは もう止まら ない? ---- 疑問 ---- 絶対安全な ブラウザは 無いの? ---- Firefoxの 不安を煽って みたけど ---- この手の危険性 はどんなアプリ ケーションにも ある ---- IEも Operaも Safariも w3mも 潜在的には危険 ---- 「絶対安全」 な物が欲し かったら ---- ネットに 繋がない ---- これ 最強 ---- 比較 論で ---- Firefoxは IEより 安全か? ---- (1) IEじゃない ---- IEのセキュリティ ホールの影響を 受けない(当然) ---- 攻撃者の 今までの ノウハウは 役に立たない ---- しばらくは 安心して よさげ? ---- (2) オープン ソース ---- ソースコー ドを誰でも 見れる ---- 開発体制も オープン ---- 「黙っておこう」 という訳には いかないからか 対応は速い ---- [[Bug #288688|https://bugzilla.mozilla.org/show_bug.cgi?id=288688]] メモリ内の情報を 盗める ↓ 報告当日に修正 ---- 技術力のある人 ↓ すぐに手元に 反映できる ---- でも ---- 一般人 ↓ リリース待ち ---- 10日以上経って やっと1.0.3 リリース ---- 一般人向け リリースまで の時間が鍵 ---- (3) カスタマイ ズ性が高い ---- ユーザ自身が 色々な対策を 取れる ---- 特定環境だけ を狙った攻撃 には引っかか りにくい? ---- まとめ ---- 開発者は 気を抜か ない ---- ユーザ も ---- 気を抜 かない ---- 過信 ダメ ---- ご静聴 ありがとう ございます