75
第2回 MT KANSAI 最低限知っておきたい Webセキュリティーについて KDDIウェブコミュニケーションズ 阿部 正幸

最低限知っておきたい Webセキュリティーについて@MT関西

Embed Size (px)

Citation preview

Page 1: 最低限知っておきたい Webセキュリティーについて@MT関西

第2回 MT KANSAI

最低限知っておきたい Webセキュリティーについて

KDDIウェブコミュニケーションズ 阿部 正幸

Page 2: 最低限知っておきたい Webセキュリティーについて@MT関西

● ACE01 / SmartRelease プロダクトマネージャー ● CPI エバンジェリスト 統括 ● KDDIウェブ 公認 CPI スタッフブログ 編集長 ● Drupal(g.d.o Japan)日本コミュニティー ● テックアカデミー 講師 ● HTML5 Fun 理事 OSSを広げる活動、Web制作に関する情報発信を行う

神戸生まれ、横浜育ち、7月31日生まれ 阿部 正幸(あべ まさゆき)

ディレクター プログラマー プロマネ Evangelist

Page 3: 最低限知っておきたい Webセキュリティーについて@MT関西

Venture Since 1998

Web Service Hosting

Page 4: 最低限知っておきたい Webセキュリティーについて@MT関西
Page 5: 最低限知っておきたい Webセキュリティーについて@MT関西

cpi-line

Line@ 始めました

Line限定の情報も発信しています。

Page 6: 最低限知っておきたい Webセキュリティーについて@MT関西

本日は『 Webセキュリティー 』 できていて当たり前のことを紹介します。

できていないと

『 恥ずかしい 』と思ってください。

Page 7: 最低限知っておきたい Webセキュリティーについて@MT関西

第1章

WWWに公開することの危険性

Page 8: 最低限知っておきたい Webセキュリティーについて@MT関西

WWW公開直後から狙われています

Page 9: 最低限知っておきたい Webセキュリティーについて@MT関西

WWW公開直後から狙われています

Page 10: 最低限知っておきたい Webセキュリティーについて@MT関西
Page 11: 最低限知っておきたい Webセキュリティーについて@MT関西
Page 12: 最低限知っておきたい Webセキュリティーについて@MT関西

セキュリティーリスク

2013年8月、某レンタルサーバー会社に対する Wordpressの脆弱性を狙ったサイト改ざん被害件数

8,438件

Page 13: 最低限知っておきたい Webセキュリティーについて@MT関西

セキュリティーリスク

- 一部上場企業のサイトダウン -

Page 14: 最低限知っておきたい Webセキュリティーについて@MT関西
Page 15: 最低限知っておきたい Webセキュリティーについて@MT関西

第2章 - 侵入経路を防ぐ -

私たちが最低限できること

Page 16: 最低限知っておきたい Webセキュリティーについて@MT関西

究極のセキュリティー対策

個人情報など含むデータを

保持しないこと

Page 17: 最低限知っておきたい Webセキュリティーについて@MT関西
Page 18: 最低限知っておきたい Webセキュリティーについて@MT関西

セキュリティーリスク軽減のために

万が一の時は リストア

アップデート、XSS対策など

侵入経路

CPU負荷監視等

監視 バックアップ

何かあってからでは手遅れ、

事前準備を行うことが大事

Page 19: 最低限知っておきたい Webセキュリティーについて@MT関西

第2章 - ID、パスワードについて -

私たちが最低限できること

Page 20: 最低限知っておきたい Webセキュリティーについて@MT関西

なにげなく付けているID、パスワード

危険です!!

Page 21: 最低限知っておきたい Webセキュリティーについて@MT関西

『 参考資料 』

弊社メールサーバーのアタック状況

- 2015年 5月 7日ログより -

Page 22: 最低限知っておきたい Webセキュリティーについて@MT関西

アタック元 1位は

『 中国 』

Page 23: 最低限知っておきたい Webセキュリティーについて@MT関西

ブルートフォースアタック で狙われるアカウントは

『 test 』

  アカウント名 計

1 test@ 271,948

2 info@ 192,031

3 admin@ 173,350

4 demo@ 54,967

5 anonymous@ 47,298

6 root@ 46,930

7 company@ 46,213

8 webmaster@ 46,208

9 postmaster@ 43,455

Page 24: 最低限知っておきたい Webセキュリティーについて@MT関西

【ID】 admin、test、root、demo 【PW】 password、1234、1111

絶対にダメ!!!

Page 25: 最低限知っておきたい Webセキュリティーについて@MT関西

『admin』に対してアタックきていました

- CPIスタッフブログ -

5月7日に資料を作成、5月7日の 朝方にアタックが来ていました (; ゚д゚)コワヒ

Page 26: 最低限知っておきたい Webセキュリティーについて@MT関西

アプリケーションとして

Page 27: 最低限知っておきたい Webセキュリティーについて@MT関西

第2章 - アップデートについて -

私たちが最低限できること

Page 28: 最低限知っておきたい Webセキュリティーについて@MT関西

CMSアップデート

CMSのアップデートほぼ毎月?

『 必ず実施しましょう 』

Page 29: 最低限知っておきたい Webセキュリティーについて@MT関西

アップデートしやすい CMS を構築

CMS Plugin Theme + +

CMSコアファイルには手をつけない

Page 30: 最低限知っておきたい Webセキュリティーについて@MT関西

My plugin

CMS Plugin Theme + +

My Theme +

Web Site

OVERRIDE

Page 31: 最低限知っておきたい Webセキュリティーについて@MT関西

My plugin

CMS Plugin Theme + +

My Theme +

Web Site

アップデート が容易

Page 32: 最低限知っておきたい Webセキュリティーについて@MT関西

第2章 - XSSについて -

私たちが最低限できること

Page 33: 最低限知っておきたい Webセキュリティーについて@MT関西

XSSについて

Webサイト管理者が意図しないJavascriptコードが サイト利用者に実行されること

Page 34: 最低限知っておきたい Webセキュリティーについて@MT関西

Web site

悪意のあるユーザー

脆弱性のあるサイトを発見 <script>・・・</script> を設置

コメント・掲示板や、SNSなど

Page 35: 最低限知っておきたい Webセキュリティーについて@MT関西

Web site 一般ユーザー

何も知らずにアクセス 悪意あるコードを実行される。

フィッシングサイトに飛ばされたり、 パスワードを盗聴されたり。

Page 36: 最低限知っておきたい Webセキュリティーについて@MT関西

XSS例 <form> <button onclick="javascript:alert('Javascript実行がされました')"> Text </button> </form>

Page 37: 最低限知っておきたい Webセキュリティーについて@MT関西

XSS例 <form> <button onclick="javascript:alert('Javascript実行がされました')"> Text </button> </form> ユーザーの何らかの操作が必要

Page 38: 最低限知っておきたい Webセキュリティーについて@MT関西

HTML5 普及後

<video>  <source onerror="javascript:alert('On-error')"> </video> <input value="" autofocus onfocus="alert('Auto-Focus')">

Page 39: 最低限知っておきたい Webセキュリティーについて@MT関西

HTML5 普及後

<video>  <source onerror="javascript:alert('On-error')"> </video> <input value="" autofocus onfocus="alert('Auto-Focus')">

onから始まらないイベントや、 Viedoタグ、Sourceタグなどから

実行可能に。

サイトが表示されただけで実行される

Page 40: 最低限知っておきたい Webセキュリティーについて@MT関西

その他にも

•  XMLHttpRequest •  Cross Document Messaging •  Office Web Application •  Web Storage •  WebSocket •  Web Workers

Page 41: 最低限知っておきたい Webセキュリティーについて@MT関西

XSS脆弱性に対して

ユーザーからの下記のような入出力があった 場合に無効化すれば良い

<video><source onerror="javascript:alert('On-error')"></video>

<input value="" autofocus onfocus="alert('Auto-Focus')">

<script>alert('Code')</script>

Page 42: 最低限知っておきたい Webセキュリティーについて@MT関西

<script> function XSS(){

var some_text = '<input value="" autofocus onfocus="alert()">'

// 脆弱性のあるタイプ var f = document.getElementById("dtext"); f.innerHTML = some_text;

// javascriptをエスケープ var f = document.getElementById("dtext"); var safe_text = document.createTextNode(some_text); f.appendChild(safe_text);

} </script>

<a id="dtext" onclick="XSS('')">DOMを使った脆弱性テスト</a>

フロントエンドで無効化

Page 43: 最低限知っておきたい Webセキュリティーについて@MT関西

<?php // < は「&lt;」に   // > は「&gt;」に // & は「&amp;」に // ” は「&quote;」に、 // ’ は「&#39;」に // 変換し悪意のあるスクリプトを無効化します。 $str = htmlspecialchars($some_text, ENT_QUOTES, 'UTF-8'); ?>

サーバーサイドで無効化

Page 44: 最低限知っておきたい Webセキュリティーについて@MT関西

確認してみよう

<script>alert(‘hoge’)</script>

Page 45: 最低限知っておきたい Webセキュリティーについて@MT関西

第2章 - SQLインジェクションについて -

私たちが最低限できること

Page 46: 最低限知っておきたい Webセキュリティーについて@MT関西

Web site

悪意のあるユーザー

脆弱性のあるサイトを発見 SQL文を含めたクエリを送信 情報を抜きだしたり、Databaseを 削除したりすることができる。

Page 47: 最低限知っておきたい Webセキュリティーについて@MT関西

SQLインジェクション対策が必要なケース

『動的にSQL文を生成する場合』

● ユーザーが入力したデータを元にSQL文を生成 - ログインフォーム、検索フォーム、掲示板等

● 読み込んだデータを元にSQL文を生成

- cookie、Database、RSSなどから

Page 48: 最低限知っておきたい Webセキュリティーについて@MT関西

SQLインジェクション対策

フレームワークが用意しているO/Rマッパーを使う

● CMSやフレームワーク利用の場合

● PHPなどから接続する場合 文字コード指定

特殊文字をエスケープする

パラメータは変数に対してバインドする

Page 49: 最低限知っておきたい Webセキュリティーについて@MT関西

PHPなどから接続する場合

『mysqli』 か、『PDO_Mysql』を使い

MySQLに接続しましょう。

Googleで「php mysql」などと検索するとmysql関数を 使ったコードの紹介が結構でてきますが、「mysql」関数は 非推奨です。

Page 50: 最低限知っておきたい Webセキュリティーについて@MT関西

文字エスケープ

'  →  '' \ → \\

● SQLで使える特殊文字をエスケープ

攻撃例 ) SELECT * FROM user WHERE uid=’username' AND pwd='' OR 'A'='A'

Page 51: 最低限知っておきたい Webセキュリティーについて@MT関西

シングルクオーテーションを使わない攻撃

SELECT name FROM user where uid = '$uid' AND age > $age

uid : user_id age : 31 AND SQL文

意図しないSQL文が実行されてしまう

Page 52: 最低限知っておきたい Webセキュリティーについて@MT関西

シングルクオーテーションを使わない攻撃

SELECT name FROM user where uid = '$uid' AND age > $age

uid : user_id age : 31 AND SQL文

意図しないSQL文が実行されてしまう

『mysqli::prepare() 』で

SQLで使うパラマメータをバインドする

Page 53: 最低限知っておきたい Webセキュリティーについて@MT関西

$mysqli = new mysqli($host, $user , $pw , ”db"); /* プリペアドステートメントを作成します */ if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) { $stmt->bind_param("s", $city); /* パラメータをバインド */ $stmt->execute(); /* クエリを実行します */ $stmt->bind_result($district); /* 結果変数をバインド */ $stmt->fetch(); /* 値を取得します */ $stmt->close(); /* ステートメントを閉じる */ } /* 接続を閉じる */ $mysqli->close();

Page 54: 最低限知っておきたい Webセキュリティーについて@MT関西

$mysqli = new mysqli($host, $user , $pw , ”db"); /* プリペアドステートメントを作成します */ if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) { $stmt->bind_param("s", $city); /* パラメータをバインド */ $stmt->execute(); /* クエリを実行します */ $stmt->bind_result($district); /* 結果変数をバインド */ $stmt->fetch(); /* 値を取得します */ $stmt->close(); /* ステートメントを閉じる */ } /* 接続を閉じる */ $mysqli->close();

『 バインドする場所』

Page 55: 最低限知っておきたい Webセキュリティーについて@MT関西

$mysqli = new mysqli($host, $user , $pw , ”db"); /* プリペアドステートメントを作成します */ if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) { $stmt->bind_param("s", $city); /* パラメータをバインド */ $stmt->execute(); /* クエリを実行します */ $stmt->bind_result($district); /* 結果変数をバインド */ $stmt->fetch(); /* 値を取得します */ $stmt->close(); /* ステートメントを閉じる */ } /* 接続を閉じる */ $mysqli->close();

『パラメータの型を指定』 i:Integerを指定 d:doubleを指定 s:stringを指定 b:blobを指定

Page 56: 最低限知っておきたい Webセキュリティーについて@MT関西

第2章 - 監視 -

私たちが最低限できること

Page 57: 最低限知っておきたい Webセキュリティーについて@MT関西

サーバー監視 外形監視

リソース監視

通常使われている80番portなどを監視し、 サービスが稼働しているか確認する。(ping、telnet)

Disk、CPU、Memoryなどのロードアベレージを監視 閾値を超えると、運用チームが調査にはいる。

Page 58: 最低限知っておきたい Webセキュリティーについて@MT関西
Page 59: 最低限知っておきたい Webセキュリティーについて@MT関西

第2章 - バックアップ -

私たちが最低限できること

Page 60: 最低限知っておきたい Webセキュリティーについて@MT関西

バックアップ

万が一に備えてバックアップ取得も重要

Page 61: 最低限知っておきたい Webセキュリティーについて@MT関西

e.g ) ACE01

Webサーバー Raid構成

Systemバックアップ

SmartRelease

外部バックアップ

標準

標準

オプション

Github、dropbox …

Page 62: 最低限知っておきたい Webセキュリティーについて@MT関西

第3章 - クラウド型WAFサービス -

私たちが最低限できること

Page 63: 最低限知っておきたい Webセキュリティーについて@MT関西

クラウド型WAFサービス

Page 64: 最低限知っておきたい Webセキュリティーについて@MT関西
Page 65: 最低限知っておきたい Webセキュリティーについて@MT関西

● WAF ( Web application firewall )

● CDN ( Content delivery network )

● Blocks network layer DDoS attacks

● Load balancing and failover

Page 66: 最低限知っておきたい Webセキュリティーについて@MT関西

● WAF ( Web application firewall )

● CDN ( Content delivery network )

● Blocks network layer DDoS attacks

● Load balancing and failover

いい感じにブロックしてくるし、

いい感じにキャッシュしてくれる

Page 67: 最低限知っておきたい Webセキュリティーについて@MT関西

Incapsula エンタープライズ版を導入し

CDNを試してみた。

Page 68: 最低限知っておきたい Webセキュリティーについて@MT関西

まずはテキストファイルに対してアタック

Page 69: 最低限知っておきたい Webセキュリティーについて@MT関西

928 requests / s 0 error & 0 timeout

Page 70: 最低限知っておきたい Webセキュリティーについて@MT関西

計算してみると

928 hits / sec ×

86,400 ( 1 Day )

30 ( 1 Month )

× =

(2,405,376,000) 24 億PV / 月

Page 71: 最低限知っておきたい Webセキュリティーについて@MT関西

CPIスタッフブログにアタック

Page 72: 最低限知っておきたい Webセキュリティーについて@MT関西

175 requests / s 0 error & 0 timeout

Page 73: 最低限知っておきたい Webセキュリティーについて@MT関西

175 hits / sec ×

86,400 ( 1 Day )

30 ( 1 Month )

× =

(453,600,000) 4億 PV / 月

計算してみると

Page 74: 最低限知っておきたい Webセキュリティーについて@MT関西

まとめ

● セキュリティーのために

  侵入経路を防ぐ、監視、バックアップ

● 多様化する攻撃手法のために

  クラウド型のWAFを導入するのも◎

Page 75: 最低限知っておきたい Webセキュリティーについて@MT関西

ご清聴ありがとうございました

ID:chiyo.abe 阿部 正幸