SlideShare uma empresa Scribd logo
1 de 37
Baixar para ler offline
HTML5のセキュリティ
もうちょい詳しく
HTML5セキュリティ その3 : JavaScript API
Jun 6 2014
Yosuke HASEGAWA
#owaspkansai
OWASP Kansai Local Chapter Meeting #2 #owaspkansai
自己紹介
はせがわようすけ
ネットエージェント株式会社
株式会社セキュアスカイ・テクノロジー 技術顧問
http://utf-8.jp/
OWASP Kansai Chapter Leader
OWASP Japan Chapter Advisory Board member
OWASP Kansai Local Chapter Meeting #2 #owaspkansai
HTML5時代のWebアプリ
次々とリリースされるブラウザ
多数の新しい要素と属性
canvas, video, audio, input…
多数の新しいAPI
Web Sockets, Web Storage, XHR Lv.2…
最適化されたJavaScriptエンジン
高速化された描画エンジン
どのブラウザにどの機能が実装されてい
るのか把握できない
OWASP Kansai Local Chapter Meeting #2 #owaspkansai
次々リリースされるブラウザ
6 7 8
2001 2001 2003 2004 2006 2007 2008 2009
1 3 4
5 9 10
3.5 3.63.01.5 2.0
6 7 8
2
41 2 3
20102005
1.0
5
2011 2012
9 10
15
23
5
11 12
6
OWASP Kansai Local Chapter Meeting #2 #owaspkansai
HTML5の新機能
マルチメディアのサポート
<video> <audio> <canvas>...
文書構造を表す要素
<section> <header> <footer> ...
フォームの拡張
<input type="email"> ...
JavaScript API
Web Workers, WebSocket, File...
その他…
OWASP Kansai Local Chapter Meeting #2 #owaspkansai
HTML5時代のWebアプリ
HTML5時代のブラウザ
高速化、高機能化
実行コードのブラウザ上へのシフト
ネイティブアプリからWebアプリへ
サーバ側で実行されていた処理がブラウザの
JavaScript上へ
攻撃もクライアントサイドへシフト
JavaScript上の問題点の増加
XSSやCSRFなどの比重が増加
Webの技術 楽しいですよね!
Webの技術 楽しいですよね!
クロスサイトスクリプティング
SQLインジェクション
CSRF
HTTPレスポンス分割
オープンリダイレクタ
HTTPヘッダインジェクション
セッションハイジャック
パストラバーサル
リモートファイルインクルード
DoS
OSコマンドインジェクション
メモリリーク
バッファオーバーフロー
強制ブラウズ
セッション固定攻撃
LDAPインジェクション
XPathインジェクション
書式文字列攻撃
OWASP Kansai Local Chapter Meeting #2 #owaspkansai
HTML5を使った攻撃
攻撃側こそ新しいWebの技術をもっとも
活用できる
クロスブラウザ対応不要!
誰に遠慮することもなく使いたい技術を選ん
で使える!
多少不安定な技術でもかまわない!
OWASP Kansai Local Chapter Meeting #2 #owaspkansai
HTML5で増加する脅威
攻撃もクライアントサイドへシフト
JavaScriptを通じた攻撃の比重が増加
XSSのリスクも増加
多くの点から見て、XSS 脆弱性の危険性
はバッファ オーバーフローに匹敵します。
”
“
セキュリティに関するブリーフィング : Web に対する SDL の適用
http://msdn.microsoft.com/ja-jp/magazine/cc794277.aspx
OWASP Kansai Local Chapter Meeting #2 #owaspkansai
HTML5で増加する脅威
XSS
HTML5の新要素によるXSS
JSコード量の増加 – DOM Based XSS
AjaxデータによるXSS
CSRF
XMLHttpRequestで攻撃者有利
オープンリダイレクタ
JavaScriptによるリダイレクトの増加
その他
Ajaxデータからの情報漏えい
APIの使い方の問題
WebSocket、Web Storage、Web Workers…
OWASP Kansai Local Chapter Meeting #2 #owaspkansai
今日のはなし
JavaScript API使用上の注意点
WebSocket
Web Storage
Web Workers
WebSocket
OWASP Kansai Local Chapter Meeting #2 #owaspkansai
WebSocket
JavaScriptにおける双方向通信機能
var ws = new WebSocket( "ws://example.jp/" );
ws.onopen = function( evt ){
console.log( "connected" );
};
ws.onmessage = function( evt ){
console.log( "received:" + evt.data );
};
ws.send( "hello" );
OWASP Kansai Local Chapter Meeting #2 #owaspkansai
WebSocket
重要な情報はTLS(wss://)を使うこと
httpに対するhttpsと同様
// no TLS
var ws = new WebSocket( "ws://example.jp/" );
// over TLS
var ws = new WebSocket( "wss://example.jp/" );
OWASP Kansai Local Chapter Meeting #2 #owaspkansai
WebSocket
Cookieはhttp/httpsと共有される
http://example.jp/で発行されたCookie
は
https://example.jp/
ws://example.jp:8080/websocket
wss://example.jp:8081/websocket
などで共有される
(secure属性がない場合)
OWASP Kansai Local Chapter Meeting #2 #owaspkansai
WebSocket
Cookieはhttp/httpsと共有される
GET /index.html HTTP/1.1
Host: example.jp
Connection: Keep-Alive
HTTP/1.1 200 OK
Date: Tue, 1 Jan 2013 09:00:00 GMT
Content-Length: 2524
Content-Type: text/html; charset=utf-8
Set-Cookie: session=12AFE9BD34E5A202; path=/
....
GET /websocket HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: example.jp
Origin: http://example.jp
Sec-WebSocket-Key: mU6OBz5GKwUgZqbj2OtWfQ==
Sec-WebSocket-Version: 13
Sec-WebSocket-Protocol: chat, superchat
Cookie: session=12AFE9BD34E5A202
HTTP/1.1 101 Switching Protocols
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Accept: IsCRPjZ0Vshy2opkKOsG2UF74eA=
Sec-WebSocket-Protocol: chat
....
OWASP Kansai Local Chapter Meeting #2 #owaspkansai
WebSocket
secure属性付きのCookieはhttpsとwss
で共有される
https://example.jp/index.html
wss://example.jp:8081/websocket
Web Storage
OWASP Kansai Local Chapter Meeting #2 #owaspkansai
Web Storage
JavaScriptでデータを保存する機構
Cookieより大容量
Cookieと違って自動送信されない
JavaScript上で明示的な読み書きが必要
localStorage - 永続的に保持
sessionStorage - セッション間だけ保持
sessionStorage.setItem( "foo", "abcdefg" );
var value = sesseionStorage.getItem( "foo" );
OWASP Kansai Local Chapter Meeting #2 #owaspkansai
Web Storage
localStorage
明示的に削除しない限りデータを保持
原則、オリジン単位でデータを保持
IE8ではhttpとhttpsで共有される
Safariではプライベートブラウズ時に読み書
きできない
sessionStorage.setItem( "foo", "data" ); // 例外発生
alert( sesseionStorage.getItem( "foo" ) );
OWASP Kansai Local Chapter Meeting #2 #owaspkansai
Web Storage
sessionStorage
ブラウザが開かれている間データを保持
新しいタブでは異なるセッション
同一オリジンのiframe、frameではセッ
ションを共有(IE8,9を除く)
IE8ではhttpとhttpsで共有される
OWASP Kansai Local Chapter Meeting #2 #owaspkansai
Web Storage
Cookieと違い、常にJavaScriptから読
み書き可能
Cookie – httponlyによってJSからアクセ
ス不可
XSSが発生したときに盗み見を防ぐことがで
きない
パスワードや生年月日などの重要情報をWeb
Storageに保存しないこと
OWASP Kansai Local Chapter Meeting #2 #owaspkansai
Web Storage
Webアプリケーションの「セッション」
と異なるデータ保持期間
Webアプリケーション: セッション = ログ
インからログアウトまで
sessionStorage – (原則)タブを閉じるまで
localStorage – 無期限
ログインしたユーザに紐づくデータの保
存期間に注意
OWASP Kansai Local Chapter Meeting #2 #owaspkansai
Web Storage
Web Storage
タイムアウトによる
強制ログアウト
ユーザA
ログイン
ユーザB
データを保存
誤ったデータの使用
データ漏えい
ログイン
データ読み込み
他のユーザとデータが混在する可能性
OWASP Kansai Local Chapter Meeting #2 #owaspkansai
Web Storage
対策
ユーザIDと合わせて保存する
未ログインでのページロード時やログイン処
理時、ログアウト処理時にstorage内のデー
タを削除する
(ログアウト処理は確実に走るとは限らない)
sessionStorage.setItem( userid + "-foo", "data" );
Web Workers
OWASP Kansai Local Chapter Meeting #2 #owaspkansai
Web Workers
JavaScriptによるバックグラウンド処理
機構
多量の計算などの重い処理をUIをブロックせ
ず実行
var worker = new Worker( "background-task.js" );
worker.onmessage = function( event ){
alert( "completed:" + event.data );
};
// background-task.js
for( var i = 0, sum = 0; i < 1000; i++ ){
sum += i;
}
postMessage( sum );
OWASP Kansai Local Chapter Meeting #2 #owaspkansai
Web Workers
外部からのコードが実行されないよう注
意
攻撃者が用意したスクリプトがWorkerとし
て実行される
ただしDOM操作できないので脅威は低い
// 脆弱なコード
// http://example.jp/#data:text/javascript,onmessage=...
var src = location.hash.substring(1);
var worker = new Worker( src );
OWASP Kansai Local Chapter Meeting #2 #owaspkansai
Web Workers
importScriptsも同様
//脆弱なコード。importScriptsに任意のURIがわたる
var src = location.hash.substring(1);
var worker = new Worker( 'worker.js' );
worker.postMessage( src );
// worker.js
onmessage = function( evt ){
if( evt.data ) importScripts( evt.data );
}
まとめ
Conclusion
OWASP Kansai Local Chapter Meeting #2 #owaspkansai
まとめ
WebSocket
重要情報はTLSで保護されたwss:スキームで
Cookieの共有に注意
Web Storage
重要情報は保存しない
複数ユーザの意図しないデータ共有に注意
Web Workers
外部由来のコードをworker srcとして使用
しない
参考文献
OWASP Kansai Local Chapter Meeting #2 #owaspkansai
HTML5 調査報告 from JPCERT/CC
OWASP Kansai Local Chapter Meeting #2 #owaspkansai
参考文献
http://utf-8.jp/
HTML5セキュリティ その1:
基礎編、XSS編
http://utf-8.jp/public/20130613/owasp.pptx
HTML5セキュリティ その2:
オープンリダイレクト、CSRF
http://utf-8.jp/public/20131114/owasp.pptx
質問タイム
Question ?
OWASP Kansai Local Chapter Meeting #2 #owaspkansai
Question? 質問
hasegawa@utf-8.jp
hasegawa@netagent.co.jp
@hasegawayosuke
http://utf-8.jp/

Mais conteúdo relacionado

Mais procurados

とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達
zaki4649
 
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
Hiroshi Tokumaru
 
徳丸本ができるまで
徳丸本ができるまで徳丸本ができるまで
徳丸本ができるまで
Hiroshi Tokumaru
 
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
Hiroshi Tokumaru
 
文字コードの脆弱性はこの3年間でどの程度対策されたか?
文字コードの脆弱性はこの3年間でどの程度対策されたか?文字コードの脆弱性はこの3年間でどの程度対策されたか?
文字コードの脆弱性はこの3年間でどの程度対策されたか?
Hiroshi Tokumaru
 

Mais procurados (20)

Webアプリ開発者のためのHTML5セキュリティ入門
Webアプリ開発者のためのHTML5セキュリティ入門Webアプリ開発者のためのHTML5セキュリティ入門
Webアプリ開発者のためのHTML5セキュリティ入門
 
とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達
 
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
 
とある診断員とSQLインジェクション
とある診断員とSQLインジェクションとある診断員とSQLインジェクション
とある診断員とSQLインジェクション
 
今日こそわかる、安全なWebアプリの作り方2010
今日こそわかる、安全なWebアプリの作り方2010今日こそわかる、安全なWebアプリの作り方2010
今日こそわかる、安全なWebアプリの作り方2010
 
徳丸本ができるまで
徳丸本ができるまで徳丸本ができるまで
徳丸本ができるまで
 
phpMyAdminにおけるスクリプト実行可能な脆弱性3種盛り合わせ
phpMyAdminにおけるスクリプト実行可能な脆弱性3種盛り合わせphpMyAdminにおけるスクリプト実行可能な脆弱性3種盛り合わせ
phpMyAdminにおけるスクリプト実行可能な脆弱性3種盛り合わせ
 
[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見
 
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
 
次世代プラットフォームのセキュリティモデル考察(前編)
次世代プラットフォームのセキュリティモデル考察(前編)次世代プラットフォームのセキュリティモデル考察(前編)
次世代プラットフォームのセキュリティモデル考察(前編)
 
XXE、SSRF、安全でないデシリアライゼーション入門
XXE、SSRF、安全でないデシリアライゼーション入門XXE、SSRF、安全でないデシリアライゼーション入門
XXE、SSRF、安全でないデシリアライゼーション入門
 
Railsエンジニアのためのウェブセキュリティ入門
Railsエンジニアのためのウェブセキュリティ入門Railsエンジニアのためのウェブセキュリティ入門
Railsエンジニアのためのウェブセキュリティ入門
 
文字コードの脆弱性はこの3年間でどの程度対策されたか?
文字コードの脆弱性はこの3年間でどの程度対策されたか?文字コードの脆弱性はこの3年間でどの程度対策されたか?
文字コードの脆弱性はこの3年間でどの程度対策されたか?
 
PHPカンファレンス2014セキュリティ対談資料
PHPカンファレンス2014セキュリティ対談資料PHPカンファレンス2014セキュリティ対談資料
PHPカンファレンス2014セキュリティ対談資料
 
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのかSecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
 
安全なWebアプリケーションの作り方2018
安全なWebアプリケーションの作り方2018安全なWebアプリケーションの作り方2018
安全なWebアプリケーションの作り方2018
 
XSS再入門
XSS再入門XSS再入門
XSS再入門
 
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
 
セキュアコーディング方法論再構築の試み
セキュアコーディング方法論再構築の試みセキュアコーディング方法論再構築の試み
セキュアコーディング方法論再構築の試み
 
Phpcon2015
Phpcon2015Phpcon2015
Phpcon2015
 

Destaque

90分間濃縮 PHPエラーの教室
90分間濃縮 PHPエラーの教室90分間濃縮 PHPエラーの教室
90分間濃縮 PHPエラーの教室
Yusuke Ando
 
ログイン前セッションフィクセイション攻撃の脅威と対策
ログイン前セッションフィクセイション攻撃の脅威と対策ログイン前セッションフィクセイション攻撃の脅威と対策
ログイン前セッションフィクセイション攻撃の脅威と対策
Hiroshi Tokumaru
 
セキュリティスキルをゲットする、たった3つの方法
セキュリティスキルをゲットする、たった3つの方法セキュリティスキルをゲットする、たった3つの方法
セキュリティスキルをゲットする、たった3つの方法
Riotaro OKADA
 
Chromeでjavascriptデバッグ!まず半歩♪
Chromeでjavascriptデバッグ!まず半歩♪Chromeでjavascriptデバッグ!まず半歩♪
Chromeでjavascriptデバッグ!まず半歩♪
Yuji Nojima
 
自分でできるWebアプリケーション脆弱性診断 - デブサミ2010
自分でできるWebアプリケーション脆弱性診断 - デブサミ2010自分でできるWebアプリケーション脆弱性診断 - デブサミ2010
自分でできるWebアプリケーション脆弱性診断 - デブサミ2010
Sen Ueno
 

Destaque (20)

90分間濃縮 PHPエラーの教室
90分間濃縮 PHPエラーの教室90分間濃縮 PHPエラーの教室
90分間濃縮 PHPエラーの教室
 
ログイン前セッションフィクセイション攻撃の脅威と対策
ログイン前セッションフィクセイション攻撃の脅威と対策ログイン前セッションフィクセイション攻撃の脅威と対策
ログイン前セッションフィクセイション攻撃の脅威と対策
 
辞書攻撃をする人は何をどう使っているのか
辞書攻撃をする人は何をどう使っているのか辞書攻撃をする人は何をどう使っているのか
辞書攻撃をする人は何をどう使っているのか
 
PHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考えるPHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考える
 
Chrome Devtools for beginners (v1.1)
Chrome Devtools for beginners (v1.1)Chrome Devtools for beginners (v1.1)
Chrome Devtools for beginners (v1.1)
 
【デブサミ関西2014】Web技術で作るエンタープライズアプリ
【デブサミ関西2014】Web技術で作るエンタープライズアプリ【デブサミ関西2014】Web技術で作るエンタープライズアプリ
【デブサミ関西2014】Web技術で作るエンタープライズアプリ
 
セキュリティスキルをゲットする、たった3つの方法
セキュリティスキルをゲットする、たった3つの方法セキュリティスキルをゲットする、たった3つの方法
セキュリティスキルをゲットする、たった3つの方法
 
130821 owasp zed attack proxyをぶん回せ
130821 owasp zed attack  proxyをぶん回せ 130821 owasp zed attack  proxyをぶん回せ
130821 owasp zed attack proxyをぶん回せ
 
困った時のDev toolsの使い方(初心者向け)
困った時のDev toolsの使い方(初心者向け)困った時のDev toolsの使い方(初心者向け)
困った時のDev toolsの使い方(初心者向け)
 
The innerHTML Apocalypse
The innerHTML ApocalypseThe innerHTML Apocalypse
The innerHTML Apocalypse
 
今日から使える! Sass/compass ゆるめ勉強会
今日から使える! Sass/compass ゆるめ勉強会今日から使える! Sass/compass ゆるめ勉強会
今日から使える! Sass/compass ゆるめ勉強会
 
Chromeでjavascriptデバッグ!まず半歩♪
Chromeでjavascriptデバッグ!まず半歩♪Chromeでjavascriptデバッグ!まず半歩♪
Chromeでjavascriptデバッグ!まず半歩♪
 
はじめてのWi-Fiクラック
はじめてのWi-FiクラックはじめてのWi-Fiクラック
はじめてのWi-Fiクラック
 
PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015
PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015
PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015
 
自分でできるWebアプリケーション脆弱性診断 - デブサミ2010
自分でできるWebアプリケーション脆弱性診断 - デブサミ2010自分でできるWebアプリケーション脆弱性診断 - デブサミ2010
自分でできるWebアプリケーション脆弱性診断 - デブサミ2010
 
無料セミナー20170321 awsから始めるlinux入門
無料セミナー20170321 awsから始めるlinux入門無料セミナー20170321 awsから始めるlinux入門
無料セミナー20170321 awsから始めるlinux入門
 
脆弱性検査ツールってどうよ
脆弱性検査ツールってどうよ脆弱性検査ツールってどうよ
脆弱性検査ツールってどうよ
 
Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!
 
PHPにないセキュリティ機能
PHPにないセキュリティ機能PHPにないセキュリティ機能
PHPにないセキュリティ機能
 
SecurityCamp2015「バグハンティング入門」
SecurityCamp2015「バグハンティング入門」SecurityCamp2015「バグハンティング入門」
SecurityCamp2015「バグハンティング入門」
 

Semelhante a HTML5のセキュリティ もうちょい詳しく- HTML5セキュリティその3 : JavaScript API

Html5, Web Applications 2
Html5, Web Applications 2Html5, Web Applications 2
Html5, Web Applications 2
totty jp
 
リモートデバッグツール Weinerをつかってみた
リモートデバッグツール Weinerをつかってみたリモートデバッグツール Weinerをつかってみた
リモートデバッグツール Weinerをつかってみた
Masakazu Muraoka
 
JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要
Shumpei Shiraishi
 
Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会
Masakazu Muraoka
 

Semelhante a HTML5のセキュリティ もうちょい詳しく- HTML5セキュリティその3 : JavaScript API (20)

いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
 
Html5, Web Applications 2
Html5, Web Applications 2Html5, Web Applications 2
Html5, Web Applications 2
 
リモートデバッグツール Weinerをつかってみた
リモートデバッグツール Weinerをつかってみたリモートデバッグツール Weinerをつかってみた
リモートデバッグツール Weinerをつかってみた
 
WebSocket + Node.jsでつくるチャットアプリ
WebSocket + Node.jsでつくるチャットアプリWebSocket + Node.jsでつくるチャットアプリ
WebSocket + Node.jsでつくるチャットアプリ
 
JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要
 
これから利用拡大?WebSocket
これから利用拡大?WebSocketこれから利用拡大?WebSocket
これから利用拡大?WebSocket
 
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
 
HTML5 & The Web Platform
HTML5 & The Web PlatformHTML5 & The Web Platform
HTML5 & The Web Platform
 
[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005
 
Firefox5+HTML5×5
Firefox5+HTML5×5Firefox5+HTML5×5
Firefox5+HTML5×5
 
Mvc conf session_5_isami
Mvc conf session_5_isamiMvc conf session_5_isami
Mvc conf session_5_isami
 
Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会
 
IETF94 M2M Authentication関連報告
IETF94 M2M Authentication関連報告IETF94 M2M Authentication関連報告
IETF94 M2M Authentication関連報告
 
Concentrated HTML5 & Attractive HTML5
Concentrated HTML5 & Attractive HTML5Concentrated HTML5 & Attractive HTML5
Concentrated HTML5 & Attractive HTML5
 
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
 
サービスリリースから安定軌道に乗せるまでに行った開発施策
サービスリリースから安定軌道に乗せるまでに行った開発施策サービスリリースから安定軌道に乗せるまでに行った開発施策
サービスリリースから安定軌道に乗せるまでに行った開発施策
 
PlayFramework1.2.4におけるWebSocket
PlayFramework1.2.4におけるWebSocketPlayFramework1.2.4におけるWebSocket
PlayFramework1.2.4におけるWebSocket
 
Iss seminar 2010709#1-upload
Iss seminar 2010709#1-uploadIss seminar 2010709#1-upload
Iss seminar 2010709#1-upload
 
第3回企業Webシステム開発セミナー「業務システムにHTML5を上手に取り入れるためには?」
第3回企業Webシステム開発セミナー「業務システムにHTML5を上手に取り入れるためには?」第3回企業Webシステム開発セミナー「業務システムにHTML5を上手に取り入れるためには?」
第3回企業Webシステム開発セミナー「業務システムにHTML5を上手に取り入れるためには?」
 
OWIN - .NETにおけるPSGI -
OWIN - .NETにおけるPSGI -OWIN - .NETにおけるPSGI -
OWIN - .NETにおけるPSGI -
 

HTML5のセキュリティ もうちょい詳しく- HTML5セキュリティその3 : JavaScript API

  • 1. HTML5のセキュリティ もうちょい詳しく HTML5セキュリティ その3 : JavaScript API Jun 6 2014 Yosuke HASEGAWA #owaspkansai
  • 2. OWASP Kansai Local Chapter Meeting #2 #owaspkansai 自己紹介 はせがわようすけ ネットエージェント株式会社 株式会社セキュアスカイ・テクノロジー 技術顧問 http://utf-8.jp/ OWASP Kansai Chapter Leader OWASP Japan Chapter Advisory Board member
  • 3. OWASP Kansai Local Chapter Meeting #2 #owaspkansai HTML5時代のWebアプリ 次々とリリースされるブラウザ 多数の新しい要素と属性 canvas, video, audio, input… 多数の新しいAPI Web Sockets, Web Storage, XHR Lv.2… 最適化されたJavaScriptエンジン 高速化された描画エンジン どのブラウザにどの機能が実装されてい るのか把握できない
  • 4. OWASP Kansai Local Chapter Meeting #2 #owaspkansai 次々リリースされるブラウザ 6 7 8 2001 2001 2003 2004 2006 2007 2008 2009 1 3 4 5 9 10 3.5 3.63.01.5 2.0 6 7 8 2 41 2 3 20102005 1.0 5 2011 2012 9 10 15 23 5 11 12 6
  • 5. OWASP Kansai Local Chapter Meeting #2 #owaspkansai HTML5の新機能 マルチメディアのサポート <video> <audio> <canvas>... 文書構造を表す要素 <section> <header> <footer> ... フォームの拡張 <input type="email"> ... JavaScript API Web Workers, WebSocket, File... その他…
  • 6. OWASP Kansai Local Chapter Meeting #2 #owaspkansai HTML5時代のWebアプリ HTML5時代のブラウザ 高速化、高機能化 実行コードのブラウザ上へのシフト ネイティブアプリからWebアプリへ サーバ側で実行されていた処理がブラウザの JavaScript上へ 攻撃もクライアントサイドへシフト JavaScript上の問題点の増加 XSSやCSRFなどの比重が増加
  • 9. OWASP Kansai Local Chapter Meeting #2 #owaspkansai HTML5を使った攻撃 攻撃側こそ新しいWebの技術をもっとも 活用できる クロスブラウザ対応不要! 誰に遠慮することもなく使いたい技術を選ん で使える! 多少不安定な技術でもかまわない!
  • 10. OWASP Kansai Local Chapter Meeting #2 #owaspkansai HTML5で増加する脅威 攻撃もクライアントサイドへシフト JavaScriptを通じた攻撃の比重が増加 XSSのリスクも増加 多くの点から見て、XSS 脆弱性の危険性 はバッファ オーバーフローに匹敵します。 ” “ セキュリティに関するブリーフィング : Web に対する SDL の適用 http://msdn.microsoft.com/ja-jp/magazine/cc794277.aspx
  • 11. OWASP Kansai Local Chapter Meeting #2 #owaspkansai HTML5で増加する脅威 XSS HTML5の新要素によるXSS JSコード量の増加 – DOM Based XSS AjaxデータによるXSS CSRF XMLHttpRequestで攻撃者有利 オープンリダイレクタ JavaScriptによるリダイレクトの増加 その他 Ajaxデータからの情報漏えい APIの使い方の問題 WebSocket、Web Storage、Web Workers…
  • 12. OWASP Kansai Local Chapter Meeting #2 #owaspkansai 今日のはなし JavaScript API使用上の注意点 WebSocket Web Storage Web Workers
  • 14. OWASP Kansai Local Chapter Meeting #2 #owaspkansai WebSocket JavaScriptにおける双方向通信機能 var ws = new WebSocket( "ws://example.jp/" ); ws.onopen = function( evt ){ console.log( "connected" ); }; ws.onmessage = function( evt ){ console.log( "received:" + evt.data ); }; ws.send( "hello" );
  • 15. OWASP Kansai Local Chapter Meeting #2 #owaspkansai WebSocket 重要な情報はTLS(wss://)を使うこと httpに対するhttpsと同様 // no TLS var ws = new WebSocket( "ws://example.jp/" ); // over TLS var ws = new WebSocket( "wss://example.jp/" );
  • 16. OWASP Kansai Local Chapter Meeting #2 #owaspkansai WebSocket Cookieはhttp/httpsと共有される http://example.jp/で発行されたCookie は https://example.jp/ ws://example.jp:8080/websocket wss://example.jp:8081/websocket などで共有される (secure属性がない場合)
  • 17. OWASP Kansai Local Chapter Meeting #2 #owaspkansai WebSocket Cookieはhttp/httpsと共有される GET /index.html HTTP/1.1 Host: example.jp Connection: Keep-Alive HTTP/1.1 200 OK Date: Tue, 1 Jan 2013 09:00:00 GMT Content-Length: 2524 Content-Type: text/html; charset=utf-8 Set-Cookie: session=12AFE9BD34E5A202; path=/ .... GET /websocket HTTP/1.1 Upgrade: websocket Connection: Upgrade Host: example.jp Origin: http://example.jp Sec-WebSocket-Key: mU6OBz5GKwUgZqbj2OtWfQ== Sec-WebSocket-Version: 13 Sec-WebSocket-Protocol: chat, superchat Cookie: session=12AFE9BD34E5A202 HTTP/1.1 101 Switching Protocols Upgrade: WebSocket Connection: Upgrade Sec-WebSocket-Accept: IsCRPjZ0Vshy2opkKOsG2UF74eA= Sec-WebSocket-Protocol: chat ....
  • 18. OWASP Kansai Local Chapter Meeting #2 #owaspkansai WebSocket secure属性付きのCookieはhttpsとwss で共有される https://example.jp/index.html wss://example.jp:8081/websocket
  • 20. OWASP Kansai Local Chapter Meeting #2 #owaspkansai Web Storage JavaScriptでデータを保存する機構 Cookieより大容量 Cookieと違って自動送信されない JavaScript上で明示的な読み書きが必要 localStorage - 永続的に保持 sessionStorage - セッション間だけ保持 sessionStorage.setItem( "foo", "abcdefg" ); var value = sesseionStorage.getItem( "foo" );
  • 21. OWASP Kansai Local Chapter Meeting #2 #owaspkansai Web Storage localStorage 明示的に削除しない限りデータを保持 原則、オリジン単位でデータを保持 IE8ではhttpとhttpsで共有される Safariではプライベートブラウズ時に読み書 きできない sessionStorage.setItem( "foo", "data" ); // 例外発生 alert( sesseionStorage.getItem( "foo" ) );
  • 22. OWASP Kansai Local Chapter Meeting #2 #owaspkansai Web Storage sessionStorage ブラウザが開かれている間データを保持 新しいタブでは異なるセッション 同一オリジンのiframe、frameではセッ ションを共有(IE8,9を除く) IE8ではhttpとhttpsで共有される
  • 23. OWASP Kansai Local Chapter Meeting #2 #owaspkansai Web Storage Cookieと違い、常にJavaScriptから読 み書き可能 Cookie – httponlyによってJSからアクセ ス不可 XSSが発生したときに盗み見を防ぐことがで きない パスワードや生年月日などの重要情報をWeb Storageに保存しないこと
  • 24. OWASP Kansai Local Chapter Meeting #2 #owaspkansai Web Storage Webアプリケーションの「セッション」 と異なるデータ保持期間 Webアプリケーション: セッション = ログ インからログアウトまで sessionStorage – (原則)タブを閉じるまで localStorage – 無期限 ログインしたユーザに紐づくデータの保 存期間に注意
  • 25. OWASP Kansai Local Chapter Meeting #2 #owaspkansai Web Storage Web Storage タイムアウトによる 強制ログアウト ユーザA ログイン ユーザB データを保存 誤ったデータの使用 データ漏えい ログイン データ読み込み 他のユーザとデータが混在する可能性
  • 26. OWASP Kansai Local Chapter Meeting #2 #owaspkansai Web Storage 対策 ユーザIDと合わせて保存する 未ログインでのページロード時やログイン処 理時、ログアウト処理時にstorage内のデー タを削除する (ログアウト処理は確実に走るとは限らない) sessionStorage.setItem( userid + "-foo", "data" );
  • 28. OWASP Kansai Local Chapter Meeting #2 #owaspkansai Web Workers JavaScriptによるバックグラウンド処理 機構 多量の計算などの重い処理をUIをブロックせ ず実行 var worker = new Worker( "background-task.js" ); worker.onmessage = function( event ){ alert( "completed:" + event.data ); }; // background-task.js for( var i = 0, sum = 0; i < 1000; i++ ){ sum += i; } postMessage( sum );
  • 29. OWASP Kansai Local Chapter Meeting #2 #owaspkansai Web Workers 外部からのコードが実行されないよう注 意 攻撃者が用意したスクリプトがWorkerとし て実行される ただしDOM操作できないので脅威は低い // 脆弱なコード // http://example.jp/#data:text/javascript,onmessage=... var src = location.hash.substring(1); var worker = new Worker( src );
  • 30. OWASP Kansai Local Chapter Meeting #2 #owaspkansai Web Workers importScriptsも同様 //脆弱なコード。importScriptsに任意のURIがわたる var src = location.hash.substring(1); var worker = new Worker( 'worker.js' ); worker.postMessage( src ); // worker.js onmessage = function( evt ){ if( evt.data ) importScripts( evt.data ); }
  • 32. OWASP Kansai Local Chapter Meeting #2 #owaspkansai まとめ WebSocket 重要情報はTLSで保護されたwss:スキームで Cookieの共有に注意 Web Storage 重要情報は保存しない 複数ユーザの意図しないデータ共有に注意 Web Workers 外部由来のコードをworker srcとして使用 しない
  • 34. OWASP Kansai Local Chapter Meeting #2 #owaspkansai HTML5 調査報告 from JPCERT/CC
  • 35. OWASP Kansai Local Chapter Meeting #2 #owaspkansai 参考文献 http://utf-8.jp/ HTML5セキュリティ その1: 基礎編、XSS編 http://utf-8.jp/public/20130613/owasp.pptx HTML5セキュリティ その2: オープンリダイレクト、CSRF http://utf-8.jp/public/20131114/owasp.pptx
  • 37. OWASP Kansai Local Chapter Meeting #2 #owaspkansai Question? 質問 hasegawa@utf-8.jp hasegawa@netagent.co.jp @hasegawayosuke http://utf-8.jp/