60
ブラウザーとセキュリ ティー - 安全な 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/

Browser andsecurity2015

  • Upload
    -

  • View
    3.305

  • Download
    0

Embed Size (px)

Citation preview

ブラウザーとセキュリティー-安全な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/

Microsoft MVP (Internet Explorer) 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, Music Player, Game Player, … )

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>var pos=document.URL.indexOf("name=")+5;var s=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}' ANDPASSWORD = '{$passwd}'◦ $userId : akira◦ $passwd : ' OR 'A' = 'A

SELECT * FROM USERMASTERWHERE USERID = 'akira' ANDPASSWORD = '' 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) と同じ権限で実行される

管理者としての権限が必要な場合は、昇格のプロンプトで許可を与える必要がある

システム設定の変更など重要な操作がサイレントに行われることがない

(Windows Vista 以降の機能)

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

整合性レベルセキュリティオブジェクト (ファイル、レジストリキーなど) に対する操作の権限を、プロセス (実行されているプログラム)に対して制限する機能 (Windows Vista 以降の機能)

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 Files\Low やHKEY_CURRENT_USER\Software\LowRegistryキーなどの整合性が低いロケーションにしか書き込みを実行できません)

実行環境の仮想化安全性が確認できない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