Slide 1

Slide 1 text

開運研修 2024 セキュリティ

Slide 2

Slide 2 text

⽬次 ▌ 情報セキュリティの基礎 n CIA、情報資産・脆弱性・脅威 n CVE、CWE、CVSS ▌ Webの脆弱性を知る n SQLインジェクション n XSS n CSRF n アクセス制御の不備 ▌ ブラウザが提供するセキュリティ機能 ▌ 時代と共に変化するセキュリティ ▌ まとめとおまけ

Slide 3

Slide 3 text

この時間の⽬的 ▌情報セキュリティの3要素を知る ▌CVE、CWE、CVSSが何かを知る ▌具体的な脆弱性の原因や対策を知る ▌脆弱性をより正しく理解し、対策するための基礎を⾝に着けてもらう

Slide 4

Slide 4 text

情報セキュリティの基礎

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

情報資産 ▌情報セキュリティで保護すべき対象 n PC・スマートフォン n 設備 n 印刷物 n 情報 n ⼈ 情報資産

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

脅威 ▌組織に損害を与える可能性のある潜在的な原因 n 外部からの攻撃 n ⾃然災害 n ⼈的ミス ▌脅威が脆弱性をつくことでリスクが発⽣する 脅威 リスクが発⽣

Slide 9

Slide 9 text

CWE・CVE・CVSS

Slide 10

Slide 10 text

共通脆弱性タイプ⼀覧 CWE ▌CWE(Common Weakness Enumeration) n ⾮営利団体のMITREが中⼼となって策定しているソフトウェアにおけ るセキュリティ上の弱点(脆弱性)の識別番号 n 例 n CWE-89:SQLインジェクション n CWE-352:CSRF ▌参考情報 n https://www.ipa.go.jp/security/vuln/CWE.html

Slide 11

Slide 11 text

共通脆弱性識別⼦ CVE ▌CVE(Common Vulnerabilities and Exposures) n ⾮営利団体のMITREが中⼼となって採番している、 個々の脆弱性を識別する番号 n 例 n CVE-2014-6271:ShellShock(bash) n CVE-2022-22965:Spring4shell(Spring Framework) ▌参考情報 n https://www.ipa.go.jp/security/vuln/CVE.html

Slide 12

Slide 12 text

脆弱性の評価 CVSS ▌CVSS(Common Vulnerability Scoring System) n 脆弱性の深刻度を数値化するための汎⽤的な仕組み n CVSSがあれば、世の中にある様々な脆弱性の深刻度を同じものさしで⽐較 できる n v2、v3、v3.1、v4が存在している n v2、v3、v4はバージョンによって評価項⽬や評価⽅法が異なる n 参考情報: FIRST https://www.first.org/cvss/

Slide 13

Slide 13 text

脆弱性の評価 CVSSv3 ▌CVSSでは基本値、環境値、現状値の3種類の基準で脆弱性を評価 ▌基本値は、CIAに以下の5項⽬を加え、計8項⽬で脆弱性を評価 n 攻撃経路(AV):ネットワーク or 隣接 or ローカル or 物理 n 攻撃の複雑さ(AC):低 or ⾼ n 攻撃に必要な権限(PR):なし or 低 or ⾼ n 被害者の操作の有無(UI):不要 or 要 n 影響の範囲(S):変更なし or 変更あり ▌基本値は0.0-10.0の値+それぞれの評価項⽬で表現される n 例︓4.3(CVSS:3.0/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N) ▌参考情報: https://www.ipa.go.jp/security/vuln/CVSSv3.html

Slide 14

Slide 14 text

Webの脆弱性

Slide 15

Slide 15 text

CWE-89 SQLインジェクション ▌SQLインジェクションとは n Webアプリケーションを通じて任意のSQL⽂をデータベースに対して発 ⾏できる脆弱性 ▌原理 n 攻撃者によるSQL⽂の構造を破壊するような⼊⼒を、アプリケーション が適切に処理せずにSQL⽂が発⾏されることで予期しないSQL⽂が 実⾏される。

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

SQLインジェクションの原因と対策 原因 ユーザーが⼊⼒した⽂字列を適切にエスケープしていない 対策 静的プレースホルダやテンプレートエンジン等、フレームワークの⽀援機構を利 ⽤する 参照︓IPA「安全なSQLの呼び出し⽅」 https://www.ipa.go.jp/files/000017320.pdf

Slide 18

Slide 18 text

CWE-79 クロスサイトスクリプティング(XSS) ▌XSSとは n Webアプリケーションを通じて任意のスクリプトを利⽤者のブラウザで実⾏させる 脆弱性 ▌原理 n HTMLタグの構造を破壊する⼊⼒をすることでスクリプトが実⾏される ▌種類 n 蓄積型 XSS:攻撃コードがDBなどに保存されている n 反射型 XSS:攻撃コードがリクエストに含まれる n DOM-Based XSS:DOM操作時に発⽣する

Slide 19

Slide 19 text

反射型XSSの例 URL: index.php?name=AAA AAAさん

さん

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

DOM-Based XSS について ▌DOM-Based XSSを構成する「ソース」と「シンク」 n ソース︓攻撃者によってスクリプトを埋め込まれる可能性のある箇所 n location.href, location.search, window.name など n シンク︓ソースに含まれる⽂字列を⽤いることで実際にXSSの原因と なる箇所 n document.write, element.innerHTML, $.html(), eval など

Slide 22

Slide 22 text

DOM-Based XSS の例
const txt = decodeURIComponent(location.hash.substring(1)); // ソース document.getElementById(“sample”).innerHTML = txt; // シンク 以下のようなURLにアクセスするとXSSが発⽣する http://xxx/test.html#

Slide 23

Slide 23 text

DOM-Based XSSに特化した対策 ▌Trusted Types n CSPで「trusted types」を指定することでシンクに代⼊できる値の型をTrusted Types型に制限することができる。 n Trusted Types型以外がシンクを経由して代⼊されそうになるとエラーになる。 n 注意 n 対応しているブラウザが少ない n https://caniuse.com/?search=trustedtype n Trusted Typesでの定義するエスケープ処理が適切でないとDOM-based XSSは防げない n 参考情報︓ https://chromium.googlesource.com/chromium/src/+/master/ docs/trusted_types_on_webui.md

Slide 24

Slide 24 text

CWE-352 クロスサイトリクエストフォージェリ (CSRF) ▌CSRFとは n 被害者に罠リンクをクリックさせることで意図しない処理を実⾏させる 脆弱性

Slide 25

Slide 25 text

CSRF例(対策前) パスワード変更 ページへ遷移を クリック /password-reset 新しい パスワードを⼊ ⼒ /password-update pass=abc 罠リンク /password-update pass=hacked_password →攻撃者が⽤意したパスワードに更新される クリック

Slide 26

Slide 26 text

CSRF例(対策後) csrf_token=6aS8... /password-update pass=abc csrf_token=6aS8... 罠リンク クリック /password_update pass=hacked_password →攻撃者はcsrf_tokenがわからないのでパス ワードの変更ができない × パスワード変更 ページへ遷移を クリック /password-reset 新しい パスワードを⼊ ⼒

Slide 27

Slide 27 text

CSRFの原因と対策 原因 • CSRF対策チケットが発⾏・検証されていない • または X-Requested-With ヘッダが付与・検証されていない。[補⾜1] • CSRF対策チケットの強度が弱い 対策 • ⼗分強度のあるCSRF対策チケットの付与、検証を⾏う • またはX-Requested-Withヘッダの付与・検証を⾏う • 実績のあるフレームワークを使う • CookieにSameSiteの設定をする(⼀部のCSRF攻撃以外には有効)

Slide 28

Slide 28 text

[補⾜] SameSiteについて ▌リクエスト元に応じてクッキーをセットするかを指定できるCookieの属性値です。 ▌None、Lax、Strictの3つが存在する。 n None: 全てのリクエストにCookieが付与される。 n Lax: ⼀部を除いて発⾏元と宛先が同⼀サイト以外のリクエストにはCookieが付与されない。 n 同⼀サイト以外でもトップレベルナビゲーション(フォームやリンクでの遷移など)による GETリクエストではCookieが付与されます。 n Strict: 発⾏元と宛先が同⼀サイト以外のリクエストでは全てCookieが付与されない。 ▌⼀部のブラウザではSameSite属性を指定しなかった場合、Laxが指定されます。

Slide 29

Slide 29 text

[補⾜] SameSiteがCSRF対策になる理由 ▌宛先が同⼀サイトでない場合、Cookieが付与されず処理が失敗するためです。 n トップレベルナビゲーションかつGETリクエストの場合は付与されるため、 リンク遷移によるGETメソッドを⽤いたCSRF攻撃などは防げません。 ブラウザで管理されているドメイン2のCookie ・SameSite=Lax ・SessionID=ab34f5678EtZ ドメイン2へのPOSTリクエスト 1. 同⼀サイトではないのでCookieが付与されない 発⾏元:ドメイン1 宛先:ドメイン2 2. Cookieがない=SessionIDが ないので処理が失敗する => 結果的にCSRFが成⽴しない 参考: https://blog.tokumaru.org/2022/01/impact-conditions-for-no-CSRF-protection-sites.html

Slide 30

Slide 30 text

アクセス制御の不備 ▌アクセス制御の不備とは 実装や設定の不備により本来、権限のない操作(閲覧・変更・削除)が 実⾏できてしまう脆弱性 ▌悪⽤された際の被害 n 情報の漏洩や改ざん n 例:本来、管理者しか閲覧できない情報を⼀般ユーザが閲覧できてし まう

Slide 31

Slide 31 text

アクセス制御の不備の例 ▌パラメータの変更により本来閲覧権限がないものが閲覧できてしまう Aさん(userID=1) Aさんのみがアクセスできるページ 攻撃者(userID=2) [通常のリクエスト] GET/personal_page?userID=1 攻撃者がuserIDをAさんのものに変更 [改ざんしたリクエスト] GET /personal_page?userID=1 =>Aさんのページにアクセスできる

Slide 32

Slide 32 text

アクセス制御の不備の原因と対策 原因 • ロジックの考慮漏れや実装の不備 • 必要以上の権限が付与されている • サーバやソフトウェアの設定が間違っている 対策 • 権限の範囲を⾒直し、ロジックや実装に漏れがないかを確認する • 権限は必要最低限のものだけを付与する • 適切な設定をする

Slide 33

Slide 33 text

[補⾜] ソフトウェアとアクセス権限 ▌ソフトウェアでは様々なアクセス権限が実装されている ▌機能に対してそれぞれの権限で何ができて、何ができてはいけないかを把 握する ▌基本的には、必要最低限のものだけを付与 それぞれで何ができるか 何ができてはいけないかを考える 管理者権限 各機能ごとの権限 ユーザごとの権限 その他の権限 ソフトウェアに含まれる様々な権限

Slide 34

Slide 34 text

ブラウザが提供するセキュリティ機構

Slide 35

Slide 35 text

ブラウザが提供するセキュリティ機構について ▌Same-Origin Policy (SOP) n (スキーム, ホスト名, ポート番号)の組が異なる場合、DOMの参照や通信 の⼀部を禁⽌する。 [補⾜2] n (スキーム, ホスト名, ポート番号)の組のことをOriginと呼ぶ。 n Originが同⼀の時、Same-Origin、 異なる時Cross-Originと呼ぶ。 ▌Content Security Policy(CSP) n サーバーサイドWebアプリケーションが課した制約に違反する挙動をWebブ ラウザが検出する n 指定されたjavascript以外読み込まないなど。 n 詳細: https://developer.mozilla.org/ja/docs/Web/HTTP/CSP

Slide 36

Slide 36 text

セキュリティ機能 ▌ブラウザのセキュリティ機能として、以下を指定することができます n X-Content-Type-Options n 指定したMIMEタイプに従う n X-Frame-Options n 他のページのフレーム内での表⽰を制御する n クリックジャッキング対策 n Content-Disposition: attachment; n 内容が添付ファイルかインラインのデータとして扱うかを制御する n Strict-Transport-Security n HTTPSを強制する

Slide 37

Slide 37 text

Cookieの扱い ▌Cookieの発⾏時に属性を指定することで扱いを制限できる。[補⾜3] n Expires:絶対的な有効期限を指定 n Max-Age:相対的な有効期限を指定 n Domain:利⽤可能なホストを指定 n Path:利⽤可能なパスを指定 n Secure:HTTPSを利⽤しているときにのみ送信される n HttpOnly:jsなどからの呼び出し禁⽌ n SameSite:リクエスト元に応じてCookieをセットするかを指定 n もっと詳しく知りたい︓ https://developer.mozilla.org/ja/docs/Web/HTTP/Cookies

Slide 38

Slide 38 text

時代と共に変化するセキュリティ

Slide 39

Slide 39 text

OWASP Top 10(2021年) ▌セキュリティは時代と共に変化します。 それを象徴するものにOWASP Top 10があります。 ▌OWASPが提供するWebアプリケーションセキュリティに関する最も重⼤ な10リスクを⽰したドキュメント n ⽇本語: https://owasp.org/Top10/ja/ ▌実際のデータを元にランキング形式で掲載 ▌2021年が最新版

Slide 40

Slide 40 text

2021年版のOWASP Top10 順位 項⽬ 1位 アクセス制御の不備 2位 暗号化の失敗 3位 インジェクション 4位 安全が確認されていない不安な設計 5位 セキュリティの設計ミス 6位 脆弱で古くなったコンポーネント 7位 識別と認証の失敗 8位 ソフトウェアとデータの整合性の不具合 9位 セキュリティログとモニタリングの失敗 10位 サーバーサイドリクエストフォージェリ(SSRF) ※⻘が講義で扱ったもの、緑が新しい項⽬

Slide 41

Slide 41 text

OWASP Top10から⾒る時代と共に変化するセキュリティ 2017年版 順 項⽬ 1位 インジェクション 2位 認証の不備 3位 機微な情報の露出 4位 XML外部エンティティ参照(XXE) 5位 アクセス制御の不備 6位 不適切なセキュリティ設定 7位 クロスサイトスクリプティング(XSS) 8位 安全ではないデシリアライゼーション 9位 既知の脆弱性のあるコンポーネントの使⽤ 10位 不⼗分なロギングとモニタリング 2021年版 順位 項⽬ 1位 アクセス制御の不備 2位 暗号化の失敗 3位 インジェクション 4位 安全が確認されていない不安な設計 5位 セキュリティの設計ミス 6位 脆弱で古くなったコンポーネント 7位 識別と認証の失敗 8位 ソフトウェアとデータの整合性の不具合 9位 セキュリティログとモニタリングの失敗 10位 サーバーサイドリクエストフォージェリ(SSRF) 順位の変動や 新しいものが 追加 アプリロジックや開発⾃体に関するものが多くランキング

Slide 42

Slide 42 text

まとめ ▌情報セキュリティはCIA(機密性・完全性・可⽤性)を維持すること。 ▌脆弱性を作り込まない基本的な対策は、ユーザーの⼊⼒は信⽤せず、 実績のあるフレームワーク等の機構を⽤いて適切にエスケープやサニタイ ズを⾏う。 ▌ブラウザの機能で⼀部の脆弱性の脅威は緩和されるが、過信せずにクラ イアントサイド/サーバーサイドのWebアプリケーション側で対策を⾏う。 ▌時代ともにセキュリティは変わるので常に新しい情報を確認すること

Slide 43

Slide 43 text

もっと勉強したい⼈のためのWeb資料 ▌安全なウェブサイトの作り⽅ http://www.ipa.go.jp/security/vuln/websecurity.html ▌Webアプリケーション脆弱性診断ガイドライン 第1.2版 https://github.com/WebAppPentestGuidelines/WebAppPe ntestGuidelines/tree/master/WebAppPentestGuidelines ▌OWASP チートシート https://www.owasp.org/index.php/OWASP_Cheat_Sheet _Series

Slide 44

Slide 44 text

もっと勉強したい⼈のための本 ▌徳丸浩『体系的に学ぶ 安全なWebアプリケーションの作り⽅ 第2版 脆 弱性が⽣まれる原理と対策の実践』 SBクリエイティブ ▌⽶内貴志『Webブラウザセキュリティ Webアプリケーションの安全性を⽀ える仕組みを整理する』 ラムダノート ▌上野宣『Webセキュリティ担当者のための脆弱性診断スタートガイド 第 ⼆版 上野宣が教える情報漏えいを防ぐ技術』 翔泳社 ▌平野昌⼠『フロントエンド開発のためのセキュリティ⼊⾨ 知らなかったでは 済まされない脆弱性対策の必須知識』 翔泳社

Slide 45

Slide 45 text

補⾜

Slide 46

Slide 46 text

補⾜① [補⾜1] 通常SOPではformタグのリクエストは制限されません。 しかし、リクエストにX-Requested-Withヘッダの付与することを条件にするとformタグでのリクエストの送出はできな くなり、fetch等のAPIを使う必要があります。さらに、プリフライトリクエストが必要になるため、SOPの制限を受けます。 つまり攻撃者がX-Requested-Withヘッダを付与する罠リンクを攻撃対象のサイトのSame-Originに配置しなけれ ばならないため、SOPが適切に機能するブラウザではCSRFの対策になります。 [補⾜2] リクエストには、「シンプルリクエスト」「プリフライトリクエスト」があります。 SOPで禁⽌されるのはプリフライトリクエストが必要になるリクエストの場合です。 https://developer.mozilla.org/ja/docs/Web/HTTP/CORS#simple_requests

Slide 47

Slide 47 text

補⾜② [補⾜3] 多くのセキュリティ機構はOriginをベースに設定されていますが、Cookieが提案された当初はOriginの考えが定着し ておらず、現在となってはCookieはやや特殊なセキュリティ境界を持っています。SameSite属性はOriginに近い考 えを適⽤できますが、若⼲異なります。 詳細︓ https://tools.ietf.org/html/rfc6265 https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-07 https://web.dev/same-site-same-origin/

Slide 48

Slide 48 text

脆弱性の評価 CVSSv3 例 ▌ 脆弱性︓攻撃者が⽤意した罠リンクをクリックすると意図せずパスワードが変 更されるCSRF。 n 攻撃経路(AV):ネットワーク or 隣接 or ローカル or 物理 n 攻撃の複雑さ(AC):低 or ⾼ n 攻撃に必要な権限(PR):なし or 低 or ⾼ n 被害者が操作を必要か(UI):不要 or 要 n 影響の範囲(S):変更なし or 変更あり n 機密性の侵害(C):なし or 低 or ⾼ n 完全性の侵害(I):なし or 低 or ⾼ n 可⽤性の侵害(A):なし or 低 or ⾼