ブラウザーとセキュリ
ティー
- 安全な Web のために
Murachi Akira aka hebikuzure
This material provided by CC BY-NC-ND 4.0. See http://creativecommons.org/licenses/by-nc-nd/4.0/
About me
村地 彰 aka hebikuzure
http://www.murachi.net/
http://www.hebikuzure.com/
https://hebikuzure.wordpress.com/
MicrosoftMVP(InternetExplorer)Apr.2011~
2015/1/31 2© 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015
Agenda
今日の Web を取り巻く脅威の傾向
脅威とその対策 (技術的側面から)
◦ 悪意のあるコードを実行させない
◦ 悪意のあるコードが実行されても影響を限定
化する
◦ それぞれどのような技術があるのか
Call to action
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 3
はじめに
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 4
インターネットの利用者の
増加
0.0
10.0
20.0
30.0
40.0
50.0
60.0
70.0
80.0
90.0
100.0
0
2,000
4,000
6,000
8,000
10,000
2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013
利用者数 人口普及率
日本国内の利用者、情報通信白書平成26年度版より作成
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 5
マルウェアの増加
(出典)McAfee社脅威レポート(2012年第4四半期)
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 6
脅威の変化と多様化
情報処理推進機構「2014年版 情報セキュリティ10大脅威」より引用
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 7
インターネットの入り口は
多様
ブラウザー (PC / モバイル)
e-mail (PC / モバイル)
アプリ (PC / モバイル)
RTC (ex. LINE, Skype, WhatsApp, … )
Device (Camera,MusicPlayer,GamePlayer,…)
IoT (Everything connect to Internet, wow!)
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 8
ということは…
Attack surface は
ブラウザーだけ
ではない
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 9
ということは…
安全な Web
≠ 安全なブラウザー
安全なインターネット
≠ 安全なブラウザー
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 10
その上で
ブラウザーによる インター
ネット (Web サイト、Web ア
プリケーション) の利用を想
定したセッション内容です
考えなければならないことは
まだまだ他にもあります
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 11
本題
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 12
Web 上の脅威
サーバーに
被害
クライアントに
被害
サーバーに
原因
SQL
インジェクション
XSS, CSRF
クライアントに
原因
Bot 感染による
DDoS
マルウェア感染
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 13
被害
原因
二つの対策
悪意のあるコードを
実行させない
悪意のあるコードが実行
されても影響を限定化する
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 14
「実行させない」対策
脆弱性の排除
DEP
ASLR
XSS フィルター
X-Frame-Options ヘッダー
SmartScreen フィルター
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 15
「影響を限定化する」対策
UAC (User Account Control)
管理者としてログオンしない
ACL (Access Control List)
整合性レベル
実行環境の仮想化
Firewall / Proxy / Gateway Security
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 16
「実行させない」対策
脆弱性の排除
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 17
脆弱性の排除 : 実行環境
実行環境 (= オペレーティング システム、
ミドルウェア、ブラウザー、アドオン)
のセキュア コーディング
主な対策事項
◦ バッファ オーバーフロー
◦ 整数オーバーフロー
◦ フォーマット文字列の脆弱性
◦ 動的メモリ管理の脆弱性
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 18
脆弱性の排除 : 実行環境
参考情報
IPA「セキュア プログラミング講座」
◦ https://www.ipa.go.jp/security/awareness/vendor/
programmingv2/
JPCERT CC「セキュアコーディング」
◦ https://www.jpcert.or.jp/securecoding/
Hacking:美しき策謀 第2版
◦ http://www.oreilly.co.jp/books/9784873115146/
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 19
脆弱性の排除 : 実行環境
製品で対処されていても、実際の実行環
境に適用されていなければ意味がない
セキュリティ更新プログラムの適用
セキュリティ対策済みバージョンへの
アップグレード
更新できない場合は代替の回避策を適用
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 20
脆弱性の排除 : Web サイト
Web ページ / Web アプリケーションのセ
キュア コーディング
主な対策事項
◦ XSS
◦ CSRF
◦ SQL インジェクション
◦ コマンド インジェクション
◦ ディレクトリ トラバーサル
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 21
XSS (Cross Site Scripting)
クライアントからの入力を元にページを
生成する際、不正な入力によりページ内
に攻撃者の意図する実行可能コンテンツ
(一般的に JavaScript) が挿入さてしまう
攻撃者が挿入したスクリプトが元の
Web サイトのセキュリティ コンテキスト
で実行される
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 22
XSS の例
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 23
攻撃ページ
① リンクを踏まるなどして
攻撃ページを開かせる
被害者のブラウザー
XSS 脆弱性のあるサーバー
② レスポンス
④ 攻撃スクリプトを含むレスポンス
③ 不正入力を含むリクエスト
攻撃ページをホストするサーバー
Fire!!
XSS の種別
反射型 XSS
蓄積型 XSS
Dom Based XSS
Mutation-based XSS (mXSS)
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 24
わかりやすい XSS
<?php
session_start();
!empty($name = $_GET['name']);
?>
<html>
<body>
<h1>XSS</h1>
<p>名前:<?php echo $name; ?><p/>
</body>
</html>
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 25
DOM Based XSS
<html>
<h1>DOM Based XSS</h1>
Hi
<script>
varpos=document.URL.indexOf("name=")+5;
vars=document.URL.substring(pos,document.URL.length)
document.write(s);
</script>
<br>
</html>
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 26
XSS の対策
基本
◦ ページに出力する文字内の <, >, ", & をエス
ケープする
◦ タグの属性は " で括る
◦ ex. <input type="hidden" name="foo"
value="&lt;script&gt;">
応用
◦ 参考文献を参照 w
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 27
CSRF (Cross-site Request Forgery)
クライアントからの入力を受け付ける
ページで、本来受け付ける意図のない外
部ページからの入力を受け取ってしまう
攻撃ページを用意して被害者ユーザーに
アクセスさせると、ユーザーが意図しな
いページへの投稿、データ入力を強制さ
れる
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 28
CRSF の例
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 29
攻撃ページ
攻撃ページをホストするサーバー
被害者のブラウザー
CSRF 脆弱性のあるサーバー
信頼関係 (ログオン)
② レスポンス
③ 不正な投稿の
リクエスト
① リンクを踏ませるなどして
攻撃ページを開かせる
ユーザー意図に
反した操作
CRSF の対策
referer は偽装されたり参照できなかった
りするので使えないと考えた方がよい
トークン認証
◦ 本来の送信ページにトークンを埋め込み、
トークンを含まないリクエストは拒否する
パスワード再入力
◦ 重要な操作のリクエストにはパスワードの再
入力を求める
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 30
SQL インジェクション
外部からの入力を元にデータベースに
SQL コマンドを発行する際、意図しない
SQL コマンドを挿入されてしまう
データベースの改竄 / 破壊や、データ
ベース内の秘密情報の漏洩が発生する
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 31
SQL インジェクションの
例
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 32
① 細工したクエリを
含むリクエスト
② 意図しない SQL コマンド
③ 秘密情報を返却④ 秘密情報を含む
ページをレスポンス
攻撃者 Web アプリケーション データベース
不適切な SQL
コマンド生成
コード例
SELECT * FROM USERMASTER
WHERE USERID = '{$userId}' AND
PASSWORD = '{$passwd}'
◦ $userId : akira
◦ $passwd : ' OR 'A' = 'A
SELECT * FROM USERMASTER
WHERE USERID = 'akira' AND
PASSWORD = '' OR 'A' = 'A'
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 33
SQL インジェクションの
対策
プレース ホルダーを利用する (推奨)
発行前に SQL 文を検証する
入力されたクエリの文字列を適切にエス
ケープする
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 34
脆弱性の排除 Web サイト
参考資料
IPA「セキュア プログラミング講座」
◦ https://www.ipa.go.jp/security/awareness/vendor/
programmingv2/
IPA「安全なウェブサイトの作り方」
◦ https://www.ipa.go.jp/security/vuln/websecurity.html
「体系的に学ぶ安全なWebアプリケーションの作り方」
◦ http://www.sbcr.jp/products/4797361193.html
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 35
体系的に学ぶ 安全な
Webアプリケーションの作
り方
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 36
著者: 徳丸浩
発売日: 2011年3月1日
ISBN: 978-4-7973-6119-3
出版社: ソフトバンククリエイティブ
価格: ¥3,360(税込み)
https://www.hash-c.co.jp/wasbook/
お勧め
「実行させない」対策
クライアント側の対策
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 37
DEP (Data Execute Prevention)
メモリ領域をプログラム(実行可能) 領域
とデータ (実行不可) 領域に分離し、デー
タ領域からのコード実行を防ぐ機能
バッファ オーバーフローなどで不正な
実行エントリ (メモリ番地) が指示されて
も、そこがデータ領域であればコードは
実行されない
(Windows XP SP2 以降の機能)
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 38
ASLR (Address Space Layout Randomization)
プログラム モジュールがロード (読み込
み) されるメモリ領域を、起動の度にラ
ンダム化する機能
バッファ オーバーフローなどで実行エ
ントリ (メモリ番地) を書き換えて、特定
のプログラム モジュールの機能を呼び出
すことを困難にする
(Windows Vista 以降の機能)
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 39
ASLR のイメージ
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 40
最初の起動 2回目の起動
最初と2回目
で、モジュー
ルがロードさ
れているアド
レスが異なる
https://technet.microsoft.com/ja-jp/library/dd362922.aspx より引用
XSS フィルター
GET / POST されるデータと、レスポンス中
のコンテンツを比較し、XSS のパターンに
マッチする場合、XSS となる部分を修正し
てレンダリングする機能
◦ http://blogs.technet.com/b/srd/archive/2008/08/18/
ie-8-xss-filter-architecture-implementation.aspx
◦ http://blogs.msdn.com/b/ieinternals/archive/2011/0
1/31/controlling-the-internet-explorer-xss-filter-
with-the-x-xss-protection-http-header.aspx
(Internet Explorer 8 以降の機能)
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 41
X-Frame-Options ヘッダー
Clickjacking を防止するため、ページのフ
レーム内での表示を禁止する HTTP ヘッ
ダー
◦ https://msdn.microsoft.com/ja-jp/library/cc288472.aspx
◦ https://developer.mozilla.org/ja/docs/HTTP/X-Frame-Options
(Internet Explorer 8 以降の機能、他のブラウ
ザーでも実装済み)
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 42
Clickjacking
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 43
ユーザーに意図に反した
操作をさせたいページを
透明化したフレーム内に
読み込んで、操作を誘導
する別のページと重ね合
わせる。
ユーザーは見えている誘
導ページをクリックした
つもりでも、実際には透
明なフレーム内のページ
をクリックしている。
SmartScreen フィルター
Web からダウンロードされるファイルが
安全かどうか評価し、危険な可能性があ
る場合、ダウンロード前に警告 / ブロッ
クする機能
(Internet Explorer 8 以降の機能)
◦ IE8 は URL でのみ評価
◦ IE9 以降は URL とプログラムの両方で評価
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 44
SmartScreen の効果
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 45
「影響を限定化する」対策
主にクライアントでの対策
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 46
限定化の考え方
多層防御 (Defense in Depth)
複数の手法により防御の「層」を重ね
て、一つの層が突破されても他の層で影
響の拡大を防ぐ手法
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 47
UAC (User Account Control)
管理者 (Administrators) としてログオンし
ても、通常の操作は標準ユーザー (Users)
と同じ権限で実行される
管理者としての権限が必要な場合は、昇格
のプロンプトで許可を与える必要がある
システム設定の変更など重要な操作がサイ
レントに行われることがない
(WindowsVista以降の機能)
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 48
管理者としてログオンしな
い
UAC は管理者としての操作のすべての場
面で昇格を求める訳ではない
標準ユーザーとしてログオンし、管理者
権限が必要な場合のみ昇格する方がより
安全になる
標準ユーザーが昇格するには管理者ユー
ザーのパスワードが必要
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 49
ACL (Access Control List)
セキュリティ オブジェクト (ファイル、
レジストリ キーなど) に対する操作の権
限を、ユーザー / ユーザー グループごと
に制御する機能
いわゆる「アクセス権」の機能
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 50
整合性レベル
セキュリティ オブジェクト (ファイル、レジ
ストリ キーなど) に対する操作の権限を、プロ
セス (実行されているプログラム) に対して制
限する機能 (WindowsVista以降の機能)
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 51
整合性
アクセスレベル
つシステム特権
高
管理者特権 (プロセスはファイルを Program Files フォルダにインストールし、
HKEY_LOCAL_MACHINE などの重要なレジストリ領域に書き込みを実行できます)
中
ユーザー特権 (プロセスはユーザーのドキュメント フォルダ内でファイルを作成およ
び変更することができ、HKEY_CURRENT_USER などのユーザー専用のレジストリ領域
に書き込みを実行できます)
低
信頼性の低い権限 (プロセスは Temporary Internet FilesLow や
HKEY_CURRENT_USERSoftwareLowRegistry キーなどの整合性が低いロケーションにし
か書き込みを実行できません)
実行環境の仮想化
安全性が確認できない Web アプリケー
ションの利用、ファイルのダウンロード
と実行を、仮想化環境で行う
Hyper-V、Windows Virtual PC 、他サード
パーティ製品など
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 52
Firewall / Proxy / Gateway Security
特定のクライアント / サーバーにセキュ
リティ上の問題が生じても、ネットワー
クを経由して他のクライアント / サー
バーに影響を与えることを防ぐ
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 53
まとめ
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 54
脅威の分析
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 55
サーバーに
被害
クライアントに
被害
サーバーに
原因
SQL
インジェクション
XSS, CSRF
クライアントに
原因
Bot 感染による
DDoS
マルウェア感染
被害
原因
二つの対策
悪意のあるコードを
実行させない
悪意のあるコードが実行
されても影響を限定化する
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 56
Call to Action
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 57
Web 開発者の方
セキュア プログラミングの実践
脆弱性診断を受ける
「ユーザーが増えてからセキュアにすれ
ばよい」は間違い
脆弱性報告を受け付ける窓口を整備して、
報告に適切に対処する
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 58
ユーザーの方
オペレーティング システム (Windows)
とブラウザー (Internet Explorer) はできる
限り最新バージョンを利用する
セキュリティ更新プログラムは必ず適用
する
管理者としてログオンしない (標準ユー
ザーで利用する)
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 59
Any Question?
2015/1/31 © 2015 Murachi Akira - CC BY-NC-ND - MVP Community Camp 2015 60

Browser andsecurity2015

Editor's Notes

  • #19 バッファ オーバーフロー ⇒ スタック オーバーフロー、ヒープ オーバーフロー
  • #20 バッファ オーバーフロー ⇒ スタック オーバーフロー、ヒープ オーバーフロー
  • #25 最近の流行  DOM Based XSS : DOM 操作によりスクリプトが挿入される/ mXSS :例えば innerHTML などを経由してすでに構築されているDOMツリーを参照したときに、本来のDOM構造とは異なる結果を得てしまい、そのためにHTML構造の破壊を引き起こすという類のDOM based XSSの亜種
  • #34 この例だと ' (シングルクォート) をユーザー入力内からエスケープすれば回避できるが、それだけでは済まない場合が一般的