Slide 1

Slide 1 text

開発運⽤研修 2020 セキュリティ PSIRT ⼤塚 純平

Slide 2

Slide 2 text

この講義の内容 ▌情報セキュリティ(5分) ▌サイボウズで検出している脆弱性の紹介 • クロスサイト・スクリプティング (XSS) • SQLインジェクション(SQLi) • クロスサイトリクエストフォージェリ(CSRF) • HTTPのセキュリティ機能 ▌やられサイト (20分) ▌脆弱性の⾒つけ⽅(5分)

Slide 3

Slide 3 text

情報セキュリティ

Slide 4

Slide 4 text

情報セキュリティの3要素 「情報セキュリティ」とは「CIA(機密性、完全性、可⽤性)」を維持することです。 Confidentiality 認可されていない個⼈、 エンティティまたはプロセスに 対して、情報を使⽤させず、 また開⽰しない特性。 Integrity 正確さ及び完全さの特性。 Availability 認可されたエンティティが要 求したときに、アクセス及び使 ⽤が可能である特性。 JIS Q 27000

Slide 5

Slide 5 text

情報資産 ▌情報セキュリティで保護すべき対象となるもの。情報資産は様々であり、 組織そのものや⼈も該当します。 • 電⼦媒体(DVD・メモリスティック) • 印刷物 • 設備 • パソコン 情報資産

Slide 6

Slide 6 text

脆弱性 ▌脆弱性とは、セキュリティ上の問題箇所のこと。 • ソフトウェア製品の本来の機能や性能を損なう原因となりうる箇所 • 不適切な運⽤により、セキュリティが維持できなくなっている状態 脆弱性

Slide 7

Slide 7 text

脅威 ▌組織に損害を与える可能性の「潜在的な原因」 • 脆弱性を利⽤して、リスクを現実化させる⼿段であり、⾃然災害など も含まれる。 脅威

Slide 8

Slide 8 text

サイボウズで検出している脆弱性

Slide 9

Slide 9 text

脆弱性の種別 サイボウズでは、脆弱性の種別として CWE 識別⼦を利⽤しています。 ▌CWE(Common Weakness Enumeration) とは ⾮営利団体のMITREが中⼼となって策定している、ソフトウェアにおけるセキュリティ 上の弱点(脆弱性)の種類を識別するための共通の基準です。 ▌参考情報 https://www.ipa.go.jp/security/vuln/CWE.html

Slide 10

Slide 10 text

CWEタイプのツリー(全て/JVN iPedia) ▌CWEはツリー構造になっており、上位にある脆弱性ほど、抽象度が⾼く なります。企業ごとに取捨選択して利⽤しています。 CWE全体@NIST JVN iPedia @IPA

Slide 11

Slide 11 text

サイボウズで使⽤しているCWE識別⼦ ▌サイボウズで使⽤しているCWE識別⼦と脆弱性タイプ CWE番号 概要 CWE番号 概要 CWE-16 環境設定 CWE-264 認可・権限・アクセス制御 CWE-20 不適切な⼊⼒確認 CWE-287 不適切な認証 CWE-22 パス・トラバーサル CWE-352 クロスサイトリクエストフォージェリ(CSRF) CWE-78 OSコマンド・インジェクション CWE-362 競合状態 CWE-79 クロスサイト・スクリプティング (XSS) CWE-384 Session Fixation CWE-89 SQLインジェクション CWE-399 リソース管理の問題 CWE-93 CRLF Injection CWE-601 Open Redirect CWE-94 コードインジェクション CWE-614 ログインの不備 - クッキーのセキュア属性不備 CWE-113 HTTPヘッダ・インジェクション CWE-639 Authorization Bypass Through User- Controlled Key CWE-150 エスケープ、メタ、または制御シーケンスの不適 切な中和 CWE-918 サーバーサイドリクエストフォージェリ CWE-200 情報漏えい CWE-Other その他 CWE-255 証明書・パスワード管理 CWE- DesignError 設計上の問題

Slide 12

Slide 12 text

CWE-79 クロスサイト・スクリプティング (XSS) ▌XSS とは Webアプリケーションを通して、任意のスクリプトを利⽤者のブラウザで実施させる脆弱性 です。 1.被害者が使っているサイトAや攻撃⽤のサイト 攻撃⽤スクリプトが付いたURLを被害者にクリックさせる 2.被害者が使っているサイトA サイトA上で、スクリプトが実⾏されてしまい、情報 が抜き取られたり、ページを改ざんされたり。

Slide 13

Slide 13 text

XSS の原理 ▌HTMLタグや JavaScript などの構造を破壊するような値を⼊⼒するこ とで、スクリプトを実⾏させます。

Slide 14

Slide 14 text

XSS の例① (対策前) URL: index.php?name=AAA

さん

GETリクエストパラメーター の値をそのまま表⽰させる AAAさん URL: index.php?name=alert(1)

さん

GETリクエストパラメーター の値をそのまま表⽰させる alert(1)さん

Slide 15

Slide 15 text

XSS の例① (対策後) URL: index.php?name=AAA

さん

GETリクエストパラメーター の値をエスケープして表⽰させる AAAさん URL: index.php?name=alert(1) <script>alert(1)</script>さん

Slide 16

Slide 16 text

XSSの種類 Reflected XSS • 攻撃⽤のスクリプトが攻撃対象とは別の場所にある Stored XSS • 攻撃⽤のスクリプトが攻撃対象のDB等に保管されている DOM Based XSS • サーバーを経由せず、JSのみで表⽰するパラメータを経由して攻撃が実⾏される

Slide 17

Slide 17 text

XSSの原因と対策 原因 • HTMLのエスケープ漏れ • ⽂字コードやコンテンツ型の⾃動判別への理解不⾜ 対策 • HTML は正しくエスケープする • ⽂字コードは必ず宣⾔する • コンテンツ型が HTML と判定されないようにする

Slide 18

Slide 18 text

CWE-89 SQLインジェクション(SQLi) ▌SQL インジェクションとは Web アプリケーションを通して、任意のSQL⽂をデータベースに対して発⾏できる脆弱 性です。 1.攻撃対象のサイトA サイトAからのリクエストにSQL⽂をデー タベースに対して発⾏ 2.攻撃対象サイトAのデータベース SQL⽂の結果をサイトAに返す。 通常閲覧できないような情報が含まれる 場合がある。

Slide 19

Slide 19 text

SQL インジェクションの原理 ▌DBMSに対して発⾏する SQL⽂の構造を破壊するような値を⼊⼒する ことでDBで不正な SQL⽂を実⾏します。

Slide 20

Slide 20 text

SELECT * FROM tbl_user WHERE id =ʻ{$_GET[ʻidʼ]}ʼ ʼ OR 1=1 -- id =ʻʼ OR 1=1 --ʼ userテーブルの情報がすべて表⽰される ▌SQL ⽂の構造を破壊され WHERE 句で指定される条件が常に「真」 になり、情報が漏えいします。 診断時には AND(ʻ and 1=0) を使うことが推奨です。

Slide 21

Slide 21 text

SQLインジェクションの原因と対策 原因 • ユーザーが⼊⼒した⽂字列をエスケープしていない 対策 • 静的プレースホルダやテンプレートエンジン等、フレームワークの⽀援機構 を利⽤する • 別のシステムにデータを渡す際、ユーザーが⼊⼒した⽂字列を正しくエス ケープすること

Slide 22

Slide 22 text

CWE-200 情報漏えい ▌データの送り⽅次第では、情報が攻撃者に漏えいしてしまう場合がありま す。 • HTTPでの情報 • QueryString上の情報 • LocalStorageでの漏えい

Slide 23

Slide 23 text

秘密情報 ▌秘密情報とは外部に知られると致命的となる情報

Slide 24

Slide 24 text

HTTPで秘密情報をやり取りしちゃダメ ▌HTTPの通信には、HTTPとHTTPSがありHTTPの場合にはMiTM(通 信乗っ取り)されると情報を抜き取られてしまいます • HTTPは通信がそのままやり取りされています • HTTPSは通信が暗号化されてやり取りされています

Slide 25

Slide 25 text

QueryString に秘密情報は乗せちゃダメ ▌たとえ、HTTPS通信でやり取りしていたとしてもQueryStringの情報は 漏洩する可能性があります • Referer ヘッダからの漏えい • サーバーのログからの漏えい(管理者が閲覧可能)

Slide 26

Slide 26 text

Referer からの QueryString の漏えい ▌HTTP リクエストにはRefererというヘッダがあります。 ▌Referer は移動する前にどんなURLにアクセスしていたかの情報が記載 されます。 製品ページ ▽ アクセスしていたURL https://example.com/login?u ser=username&pass=passw ord 遷移 攻撃者のページ ▽ 送られるRefererヘッダ https://example.com/login? user=username&pass=pass word

Slide 27

Slide 27 text

CWE-352 クロスサイトリクエストフォージェリ(CSRF) ▌CSRF とは 被害者が罠リンクをクリックして意図せずに処理を実⾏させられてしまう脆弱性です。 1.掲⽰板サイト 広告のようなクリックを誘導するURL (実はサイトAの設定変更を⾏うURL) 2.被害者が使っているサイトA 例えば、⾮公開設定になっている記事を 公開設定へ本⼈が変更したことに…

Slide 28

Slide 28 text

CSRF対策⽤のトークン ▌事前にユーザーに共有してあるトークン(推測困難な⽂字列)を送信しないと処 理が⾏われないように対策します。 1.掲⽰板サイト 広告のようなクリックを誘導するURL (実はサイトAの設定変更を⾏うURL) 2.被害者が使っているサイトA トークンが無いのでエラーとしてはじかれる

Slide 29

Slide 29 text

サイボウズ製品のCSRF対策⽤のトークン ▌製品によってパラメーターが異なります トークンの値が削除されると、不正なリクエストとして処理され、実⾏されません。 ▼kintone、サイボウズ共通管理、Store ▼Garoon、Office、メールワイズ

Slide 30

Slide 30 text

セキュリティ機能 ▌HTTP では、セキュリティ機能を設定することができます • X-XSS-Protection • X-Content-Type-Options • X-Frame-Options • Content-Security-Policy • Content-Disposition: attachment; • Strict-Transport-Security 共通仕様として定められているものもあります。

Slide 31

Slide 31 text

X-XSS-Protection: 1; mode=block ▌ブラウザ側でも XSS を防ぐための保護機能 X-XSS-Protection: 1; mode=block ブラウザの設定で、デフォルトで有効になっている XSS フィルター機能に対して、ユー ザーが無効にしている場合にも、強制的に有効するための機能です。XSSと検知された 場合は、レスポンスのコンテンツ全体が「#」に置き換えられます。

Slide 32

Slide 32 text

X-Frame-Options:SAMEORIGIN ▌フレーム内のページ表⽰を同⼀オリジンにのみ許可する保護機能

Slide 33

Slide 33 text

脆弱性の⾒つけ⽅ 社内で実施している脆弱性を⾒つける⽅法を説明します 【重要】許可された環境や⾃分の所有する環境・ネットワーク以外には 攻撃しないようにしましょう︕

Slide 34

Slide 34 text

脆弱性検査の⼿法(1) 診断環境 診断対象システム Internet ブラックボックステスト 診断対象システムに対して、擬似的な攻撃を試⾏し 応答結果を分析して脆弱性を洗い出す

Slide 35

Slide 35 text

脆弱性検査の⼿法(2) ホワイトボックステスト 設計書、仕様書、コンフィグファイル、ソースコード などを直接分析して、脆弱性を洗い出す

Slide 36

Slide 36 text

診断対象(1) 診断環境 診断対象システム Internet Web アプリケーション / サイト Web アプリケーション / サイトに存在する脆弱性や、 設定不備が残っていないか把握するための試験

Slide 37

Slide 37 text

診断対象(2) ネットワークインフラ サーバーやネットワーク機器の設定に問題がないかを 把握するための試験 診断環境 診断対象システム Internet

Slide 38

Slide 38 text

ツールを利⽤する ▌検証を⾏うためのツールを利⽤して検証を実施することも出来ます lOpenVAS︓セキュリティ診断ツール。特定のサーバーで動作しているサービスの 脆弱性がないかを確認できる。 lnmap︓ポートスキャンツールの⼀つ。対象サーバーの空いているポートを探すの はもちろん、そこで動いているサービスが何かも調査できる。 lsqlmap︓SQLインジェクションを検証するためのツール。 lVuls︓サーバーに対して存在するサードパーティの脆弱性をスキャンしてくれるツー ル

Slide 39

Slide 39 text

参考書籍 ▌安全なウェブサイトの作り⽅ http://www.ipa.go.jp/security/vuln/websecurity.html ▌ウェブ健康診断仕様 http://www.ipa.go.jp/files/000017319.pdf ▌Webアプリケーション脆弱性診断ガイドライン https://github.com/ueno1000/WebAppPentestGuidelines ▌OWASP チートシート https://www.owasp.org/index.php/OWASP_Cheat_Sheet_Series ▌脆弱性診断スタートガイド(上野本) ▌安全なWebアプリケーションの作り⽅(徳丸本)

Slide 40

Slide 40 text

脆弱性評価

Slide 41

Slide 41 text

CVSSv3 ▌Common Vulnerability Scoring System version 3 ▌世界中で使われている数値化システム ▌CIAに加え5項⽬、計8項⽬を軸に評価 ▌脆弱性の影響度を0.0 ~ 10.0で評価する

Slide 42

Slide 42 text

CVSSv3の評価に⽤いる8項⽬ ▌攻撃経路(AV):ネットワーク/隣接/ローカル/物理 ▌攻撃難易度(AC):低/⾼ ▌攻撃に必要な権限(PR):なし/低/⾼ ▌被害者の操作の必要性(UI):不要/要 ▌影響の範囲(S):変更なし/変更あり ▌機密性への影響(C):なし/低/⾼ ▌完全性への影響(I):なし/低/⾼ ▌可⽤性への影響(A):なし/低/⾼

Slide 43

Slide 43 text

CVSSv3の評価例 【攻撃シナリオ】 1. 攻撃者は細⼯をしたURLを被害 者に送り付ける 2. 被害者がそのリンクを開く 【被害】 被害者が利⽤しているサイトAのパス ワードが攻撃者に漏洩する ▌攻撃経路(AV):ネットワーク ▌攻撃難易度(AC):低 ▌攻撃に必要な権限(PR):なし ▌被害者の操作の必要性(UI):要 ▌影響の範囲(S):変更なし ▌機密性への影響(C):⾼ ▌完全性への影響(I):なし ▌可⽤性への影響(A):なし CVSSv3基本値:6.5