Submit Search
次世代プラットフォームのセキュリティモデル考察(前編)
•
19 likes
•
9,518 views
Y
Yosuke HASEGAWA
Follow
セキュリティキャンプ2016 講義資料
Read less
Read more
Gallery
Report
Share
Gallery
Report
Share
1 of 40
Download now
Download to read offline
More Related Content
次世代プラットフォームのセキュリティモデル考察(前編)
1.
SECURITY CAMP 2016 次世代プラットフォームの セキュリティモデル考察 (株)セキュアスカイ・テクノロジー
長谷川陽介 (株)リクルートテクノロジーズ 西村 宗晃 (前編)
2.
SECURITY CAMP 2016 講義紹介 HTML5やJavaScriptを利用したアプリケーション開発 技術、HTTPによる機器間の通信技術はWebという枠を 超え様々な分野で応用されつつあります。この講義では、 ElectronやCordova、Chromeアプリを題材に、これら 新世代のプラットフォームに備わっているセキュリティ上 の保護機構や、プラットフォームの使用により発生が予見 される問題点などについて考察し、アプリケーション開発 者がどういった点に気を付けなければいけないかの指標 を示せるような技術を身につけることを目的とします。
3.
はせがわようすけ @hasegawayosuke (株)セキュアスカイ・テクノロジー 常勤技術顧問 セキュリティキャンプ講師
(2008年~) OWASP Kansaiチャプターリーダー OWASP Japanボードメンバー CODE BLUEカンファレンス レビューボード http//utf-8.jp/ jjencodeとかaaencodeとか Black Hat Japan 2008, 韓国 POC 2008、POC 2010、OWASP AppSec APAC 2014他講演多数
4.
SECURITY CAMP 2016 WebアプリケーションのJSへのシフト ブラウザの高機能化 HTML5による表現力の向上 JavaScriptの実行速度の向上 JavaScriptプログラミング効率の向上 言語仕様の充実化 プログラミング環境の改善 実行コードのブラウザ上へのシフト ネイティブアプリからWebアプリへ 従来サーバ側で行っていた処理がクライアントの JavaScript上へ
5.
SECURITY CAMP 2016 Webを超えてのHTML+JavaScript Webアプリ以外でもHTML+JavaScriptで開発 HTML,CSS,JavaScriptという標準化された規格 マルチプラットフォームへの移植性 Webアプリで培われた資産や開発環境 開発者の「新しいもの好き」の満足感 新旧さまざまなアーキテクチャ Microsoft
HTML Application Firefox OS Apache Cordova / Adobe PhoneGap Electron / NW.js Chrome Apps
6.
SECURITY CAMP 2016 Webを超えてのHTML+JavaScript Microsoft
HTML Application おそらくもっとも古い(1999年)HTMLによるアプリケーション作成の仕組 み Firefox OS ブラウザをOSとしてしまうことで、HTML+JSをアプリケーションとして動作 させる Apache Cordova / Adobe PhoneGap 主にスマートフォン向けアプリをHTML+JSで作成可能にするフレーム ワーク Electron / NW.js node.js+Chromiumでマルチプラットフォームなデスクトップアプリを開 発可能にするフレームワーク Chrome Apps Chromeを意識させずに利用することで動作するデスクトップアプリ環境
7.
SECURITY CAMP 2016 Webを超えてのHTML+JavaScript 本講義では以下の3種類を対象として取り扱いま す Electron Chrome
Apps Apache Cordova
8.
SECURITY CAMP 2016 Electronアプリ
9.
SECURITY CAMP 2016 Electronアプリ node.jsとChromiumを内包 メインプロセス アプリケーション全体を統括。node.jsそのもの。 レンダラプロセス ブラウザ+node.js メインプロセス
レンダラプロセス Electronアプリ IPC
10.
SECURITY CAMP 2016 Electronアプリ メインプロセス内でレンダラプロセスを生成 { "name"
: "Application name", "version" : "0.1", "main" : "main.js" } let win = new BrowserWindow( {width:840,height:700} ); win.loadURL( `file://${__dirname}/index.html` ); <html> <head>...</head> <body>...</body> </html> main.js - メインプロセス index.html - レンダラプロセス package.json
11.
SECURITY CAMP 2016 Electronアプリ レンダラではブラウザ内でnode.jsが動く nodeを無効にすることもできる(デフォルトで有効) <script> function
foo(){ let fs = require( "fs" ); fs.readFile( "./test.txt", { encoding: "utf-8" }, (err, data)=>{ document.getElementById("main").textContent = data; } ); } </script> <div id="main"> </div>
12.
SECURITY CAMP 2016 Electronアプリ
- WebView 他のサイトをレンダラ内に埋め込む iframeと異なりwebview内から外側は完全に 見えない (window.topとか) webviewごとにnode機能の有無を指定可能 <webview src="http://example.jp/"></webview> <webview src="http://example.jp/" nodeintegration></webview> https://github.com/electron/electron/blob/master/docs/api/web-view-tag.md
13.
SECURITY CAMP 2016 Electronアプリのセキュリティ Electronの倒し方
(2016-03-07) http://utf-8.jp/public/2016/0307/electron.pdf Electronのセキュリティその後 (2016-06-29) http://utf-8.jp/public/2016/0629/electron.pdf Electronのセキュリティは難しい? — Mobage Developers Blog (2016-04-28) http://developers.mobage.jp/blog/electron-security
14.
SECURITY CAMP 2016 演習 Electronアプリの調査
15.
SECURITY CAMP 2016 演習
: Electronアプリの調査 Electronアプリを調査し、脆弱性や潜在的な脅 威を調べる Webアプリとして動作しているSNSをパッケージ化し たもの Electronアプリ、SNSアプリ(WebView内)それぞれ を調べる 具体的な脆弱性でなくてもOK 「こういう条件のときに危険かも知れない」というレベ ルでOK
16.
SECURITY CAMP 2016 演習
: Electronアプリの調査 Electronをインストール Electronアプリをダウンロード http://utf-8.jp/camp2016/electron.zip ZIPを展開後、以下のようにするとElectronアプ リが起動する 参考:配布されているElectronアプリの場合 通常はasar形式で 配布される C:¥foo¥bar¥electron>electron . C:¥foo>npm install -g asar C:¥foo>asar e app.asar app C:¥foo>cd app C:¥foo¥app>notepad main.js C:¥foo¥app>electron . C:¥foo¥bar¥>npm -g install electron-prebuilt
17.
SECURITY CAMP 2016 演習
- 答え合わせ Electronアプリの調査
18.
SECURITY CAMP 2016 演習
: Electronアプリの調査 レンダラ(WebView外)でnode機能が有効に なっている Electronアプリ部分にXSSが存在すると、攻撃者は 何でもできる WebViewでnode機能が有効になっている SNS内にXSSが存在していると何でもできる 広告が悪意を持つと何でもできる リンククリックで外部コマンドが起動 node-integrationが無効なときにどこまででき る?
19.
SECURITY CAMP 2016 演習
: Electronアプリの調査 レンダラ(WebView外)でnode機能が有効に なっている Electronアプリ部分にXSSが存在すると、攻撃者は 何でもできる WebViewでnode機能が有効になっている SNS内にXSSが存在していると何でもできる 広告が悪意を持つと何でもできる リンククリックで外部コマンドが起動 node-integrationが無効なときにどこまででき る?
20.
SECURITY CAMP 2016 レンダラでnode機能が有効 メインプロセスでBrowserWindow生成時、明 示的に無効にしなければレンダラ内でnode機 能が有効になる //
main.js win = new BrowserWindow( {width:840,height:700} ); win.loadURL( `file://${__dirname}/index.html` ); // main.js win = new BrowserWindow( {width:840,height:700, webPreferences:{nodeIntegration:false} } ); win.loadURL( `file://${__dirname}/index.html` );
21.
SECURITY CAMP 2016 レンダラでnode機能が有効 レンダラ内にXSSがあれば攻撃者は任意コード 実行が可能になる <html> <script> elm.innerHTML
= fs.readFileSync( file, {encoding:"utf8"} ); </script> .... <webview src="http://example.jp/"> </webview> <html> Content of http://example.jp </html> DOM-based XSS
22.
SECURITY CAMP 2016 レンダラでnode機能が有効 レンダラ内にXSSがあれば攻撃者は任意コード 実行が可能になる 演習用アプリにも実際にXSSがある デモ:
XSSを使って攻撃者が任意コード実行 // index.js wv.addEventListener( "page-title-updated", function( e ){ document.getElementById("info").innerHTML = e.title + " / electron v." + process.versions.electron + " node v." + process.versions.node; document.title = e.title; }, false );
23.
SECURITY CAMP 2016 レンダリングでnode機能が有効 出来る限り{nodeIntegration:false}を指定し てレンダラでのnodeを無効にする レンダラ内でnode機能が使いたい場合は IPC経由でメインプロセスに処理を任せる preload機能を使う
http://utf-8.jp/public/2016/0629/electron.pdf ただし現状(v1.2.5)ではうまく動かない // main.js win = new BrowserWindow( {width:840,height:700, webPreferences : { nodeIntegration : false, preload : './preload.js' } } ); win.loadURL( `file://${__dirname}/index.html` );
24.
SECURITY CAMP 2016 演習
: Electronアプリの調査 レンダラ(WebView外)でnode機能が有効に なっている Electronアプリ部分にXSSが存在すると、攻撃者は 何でもできる WebViewでnode機能が有効になっている SNS内にXSSが存在していると何でもできる 広告が悪意を持つと何でもできる リンククリックで外部コマンドが起動 node-integrationが無効なときにどこまででき る?
25.
SECURITY CAMP 2016 WebViewでnode機能が有効 WebView内でnode機能が有効になっている 明示的に指定しない場合は無効 ※レンダラのnode機能が無効の場合は、レンダラ内 のWebViewのnodeは有効にはできない //
index.html <webview src="..." id="wv" nodeintegration></webview> // index.html <webview src="..." id="wv"></webview>
26.
SECURITY CAMP 2016 WebViewでnode機能が有効 WebView内のWebアプリにXSSがあれば攻撃 者は任意コード実行が可能になる <html> .... <webview
src="http://example.jp/" nodeintegration> </webview> </html> <html> <script> elm.innerHTML = xhr.responseText; </script> </html> DOM-based XSS
27.
SECURITY CAMP 2016 WebViewでnode機能が有効 WebView内のWebアプリにXSSがあれば攻撃 者は任意コード実行が可能になる 演習用のSNSにも実際にXSSがある デモ:XSSを使って攻撃者が任意コード実行
28.
SECURITY CAMP 2016 WebViewでnode機能が有効 WebView内からnode機能が呼び出せる Webアプリ部分にXSSがなくても、広告提供者に悪 意がある
or 広告が汚染されればPC上で任意コー ドの実行が可能
29.
SECURITY CAMP 2016 WebViewでnode機能が有効 XSSがなくても広告が汚染されれば任意コード 実行が可能になる <html> <webview
src="http://example.jp/" nodeintegration> </webview> </html> <html> <iframe src="広告サイト"> </iframe> </html> <html> <script> require("child_process").exec( "calc.exe", null ); </script> </html> 悪意のある広告
30.
SECURITY CAMP 2016 WebViewでnode機能が有効 出来る限りwebviewタグでnode機能を有効に しない webview内でnode機能が使いたい場合は preload機能を使う BrowserWindowのpreloadは動作しないが、 WebViewのpreloadは動作する <webview
src="..." preload="./preload.js"></webview>
31.
SECURITY CAMP 2016 演習
: Electronアプリの調査 レンダラ(WebView外)でnode機能が有効に なっている Electronアプリ部分にXSSが存在すると、攻撃者は 何でもできる WebViewでnode機能が有効になっている SNS内にXSSが存在していると何でもできる 広告が悪意を持つと何でもできる リンククリックで外部コマンドが起動 node-integrationが無効なときにどこまででき る?
32.
SECURITY CAMP 2016 リンククリックで外部コマンドが起動 URLクリック時にOSのブラウザを起動させたい URLとしてfile://C:/windows/notepad.exeな どが与えられるとそれが起動する //
index.js const {shell} = require('electron'); wv.addEventListener( "new-window", function( e ){ shell.openExternal( e.url ); }, false );
33.
SECURITY CAMP 2016 リンククリックで外部コマンドが起動 shell.openExternalにはhttp、httpsのみを与 えるようにする //
index.js const {shell} = require('electron'); wv.addEventListener( "new-window", function( e ){ if( /^https?:¥/¥//.test( e.url ) ){ shell.openExternal( e.url ); } }, false );
34.
SECURITY CAMP 2016 演習
: Electronアプリの調査 レンダラ(WebView外)でnode機能が有効に なっている Electronアプリ部分にXSSが存在すると、攻撃者は 何でもできる WebViewでnode機能が有効になっている SNS内にXSSが存在していると何でもできる 広告が悪意を持つと何でもできる リンククリックで外部コマンドが起動 node-integrationが無効なときにどこまででき る?
35.
SECURITY CAMP 2016 node機能が無効なとき レンダラでnodeが無効なときはどこまで安全? XSSがあればアプリ内の機能は自由に呼び出せる 画面に偽情報の表示は可能
偽ログイン画面など WebViewでnodeが無効なときはどこまで安全? XSSがあればWebアプリとしては通常のXSSと同じ だけの脅威 XSSがなくても広告が悪意を持てば偽情報の表示 は可能 偽ログイン画面など
36.
SECURITY CAMP 2016 Chrome
Apps
37.
SECURITY CAMP 2016 Chrome
Apps Chromeを意識させることなくHTML+JSをアプ リのように実行 https://developer.chrome.com/apps/about_apps 使いたい機能を事前にmanifest.jsonで定義 Content Security Policyがデフォルト有効 インラインのスクリプトやevalなどは使えない https://developer.chrome.com/apps/contentSecurityPolicy XSSが発生しても被害が限定的 { ..., "permission" : [ "clipboardRead", "fileSystem" ], ...}
38.
SECURITY CAMP 2016 Apache
Cordova
39.
SECURITY CAMP 2016 Apache
Cordova …は西村さんにバトンタッチ
40.
SECURITY CAMP 2016 質問?
[email protected]
[email protected]
@hasegawayosuke http://utf-8.jp/
Download now