Slide 1

Slide 1 text

Copyright © NIFTY Corporation All Rights Reserved. セキュリティ⼊⾨ エンジニア定例 加藤 ⼤貴 森⽥ 雅也 上原 直希 2023年6⽉6⽇

Slide 2

Slide 2 text

Copyright © NIFTY Corporation All Rights Reserved. ⚠ 講義を受けるにあたって ⚠ 2 講義資料は基本的に世の中⼀般での話を記載しています 本講義はWebサービスの開発を⾏うにあたり必要となる セキュリティの基礎知識について理解していただくことが⽬的となります。 講義内容は、不正な⽬的で実⾏すると不正アクセス禁⽌法をはじめとする 法律抵触する可能性があるものも含まれます。 ⽬的は情報提供であり犯罪を助⻑するものではありませんので予めご理解ください。

Slide 3

Slide 3 text

Copyright © NIFTY Corporation All Rights Reserved. 今⽇の⽬標 3 • 最近のセキュリティインシデントを知り、 セキュリティの重要性を認識する • SQLインジェクションやCSRFといった Webアプリケーションに対する 基本的な攻撃⼿法とその対策法について理解する

Slide 4

Slide 4 text

Copyright © NIFTY Corporation All Rights Reserved. 4 ⽬次 01 セキュリティ⼊⾨ - セキュリティ3要素と脆弱性 - 情報セキュリティの10⼤脅威 - 最近起こったセキュリティ事件 02 Webアプリでの攻撃⼿法 - HTMLのソースからの機密情報漏洩 - SQLインジェクション - XSS(クロスサイトスクリプティング) - CSRF(クロスサイトリクエストフォージェリ) 03 Webアプリの開発にあたって - 脆弱性情報について - GitHub利⽤上の注意

Slide 5

Slide 5 text

Copyright © NIFTY Corporation All Rights Reserved. 5 ⽬次 01 セキュリティ⼊⾨ - セキュリティ3要素と脆弱性 - 情報セキュリティの10⼤脅威 - 最近起こったセキュリティ事件 02 Webアプリでの攻撃⼿法 - HTMLのソースからの機密情報漏洩 - SQLインジェクション - XSS(クロスサイトスクリプティング) - CSRF(クロスサイトリクエストフォージェリ) 03 Webアプリの開発にあたって - 脆弱性情報について - GitHub利⽤上の注意

Slide 6

Slide 6 text

Copyright © NIFTY Corporation All Rights Reserved. 情報セキュリティとは︖ 6 秘密情報やその情報を扱うサービスなどの 情報資産を安全に守ること

Slide 7

Slide 7 text

Copyright © NIFTY Corporation All Rights Reserved. セキュリティの3要素 7 完全性 Integrity 機密性 Confidentialit y 可⽤性 Availabilit y 情報セキュリティは、機密性、完全性、可⽤性を維持すること 以下を加えて7要素とも 真正性(authenticity) 責任追跡性(accountability) 否認防⽌(non-repudiation) 信頼性(reliability)

Slide 8

Slide 8 text

Copyright © NIFTY Corporation All Rights Reserved. 機密性 8 Confidentiality 許可された利⽤者のみが許可された範囲で利⽤できる 確保する仕組み例︓アクセス制御・施錠

Slide 9

Slide 9 text

Copyright © NIFTY Corporation All Rights Reserved. 完全性 9 Integrity 情報が完全で正確であること (破壊・改ざん・消去がされないこと) 確保する仕組み例︓ディジタル署名・防⽕防災

Slide 10

Slide 10 text

Copyright © NIFTY Corporation All Rights Reserved. 可⽤性 10 Availability 使いたいと思ったときにいつでも使える 確保する仕組み例︓冗⻑化・バックアップ

Slide 11

Slide 11 text

Copyright © NIFTY Corporation All Rights Reserved. 情報セキュリティの敵はサイバー攻撃だけではない 11 災害 操作ミス 故障 これらも機密性・完全性・可⽤性を低下させる︕

Slide 12

Slide 12 text

Copyright © NIFTY Corporation All Rights Reserved. リスクが現れる条件 12 情報資産 脅威 脆弱性 顕在化 リスク 守りたいもの 情報資産を 脅かすもの 脅威に対する 弱点

Slide 13

Slide 13 text

Copyright © NIFTY Corporation All Rights Reserved. 脅威 13 物理的 技術的 ⼈的 ⽕災・地震・停電 敷地への侵⼊・機器の故障 例 不正アクセス・なりすまし・DoS バグ・XSS・マルウェア・標的型攻撃 例 紛失・誤操作 内部犯・サボタージュ 例

Slide 14

Slide 14 text

Copyright © NIFTY Corporation All Rights Reserved. 脆弱性 14 物理的 技術的 ⼈的 オフィスが施錠されていない 外壁が⽊製で燃えやすい 例 PCがロックされていない セキュリティホール* (*…ソフトウェアの不具合や設計ミスによる⽋陥) 例 うっかりミス 内部犯の発⽣ 例 今⽇は主にWebにおける セキュリティホールについて お話します

Slide 15

Slide 15 text

Copyright © NIFTY Corporation All Rights Reserved. セキュリティホールを放置していると…︖ 15 攻撃者に悪⽤される危険がある 例えば… - 不正アクセスによって、ホームページを改ざんされる - 他のコンピュータを攻撃するための踏み台に利⽤される - マルウェアの発信源になる

Slide 16

Slide 16 text

Copyright © NIFTY Corporation All Rights Reserved. 情報セキュリティの10⼤脅威 16 https://www.ipa.go.jp/security/10threats/10threats2023.html 2022年において社会的に影響が⼤きかったセキュリティ上の脅威について 「10⼤脅威選考会」の審議・投票結果に基づき決定

Slide 17

Slide 17 text

Copyright © NIFTY Corporation All Rights Reserved. 17 ⽬次 01 セキュリティ⼊⾨ - セキュリティ3要素と脆弱性 - 情報セキュリティの10⼤脅威 - 最近起こったセキュリティ事件 02 Webアプリでの攻撃⼿法 - HTMLのソースからの機密情報漏洩 - SQLインジェクション - XSS(クロスサイトスクリプティング) - CSRF(クロスサイトリクエストフォージェリ) 03 Webアプリの開発にあたって - 脆弱性情報について - GitHub利⽤上の注意

Slide 18

Slide 18 text

Copyright © NIFTY Corporation All Rights Reserved. Webにおける著名な脆弱性 18 XSS クロスサイトスクリプティング CSRF クロスサイトリクエストフォージェリ SQLインジェクション HTMLソースからの 情報漏えい

Slide 19

Slide 19 text

Copyright © NIFTY Corporation All Rights Reserved. HTMLのソースからの機密情報漏えい 19 ⼀⾒、なにもなさそうでも…︖ ⾒えてないから問題ない…︖本当に…︖︖ ソースを表⽰すると実は︕

Slide 20

Slide 20 text

Copyright © NIFTY Corporation All Rights Reserved. SQLインジェクション 20 DBを利⽤するWebアプリケーションにて不正なSQLを実⾏される データベース内の情報を⾃由に改ざん・窃取できる 攻撃者 ①悪意のあるSQLを ⼊⼒欄へ⼊⼒ ② ⼊⼒されたSQL⽂が 埋め込まれた クエリを発⾏ 脆弱性のある Webアプリ データベース

Slide 21

Slide 21 text

Copyright © NIFTY Corporation All Rights Reserved. 21 例えば、ログイン時にID/PWを⼊⼒してログインする場合に このようなクエリが組み⽴てられる… ①ID/PWを ⼊⼒欄へ⼊⼒ ② ⼊⼒されたSQL⽂が 埋め込まれた クエリを発⾏ 脆弱性のある Webアプリ データベース ユーザー SELECT id FROM users WHERE id = '{id}' AND passwd = '{passwd}' SQLインジェクション

Slide 22

Slide 22 text

Copyright © NIFTY Corporation All Rights Reserved. 22 通常時 ①ID/PWを ⼊⼒欄へ⼊⼒ ② ⼊⼒されたSQL⽂が 埋め込まれた クエリを発⾏ 脆弱性のある Webアプリ データベース ユーザー id = admin passwd = pizza SELECT id FROM users WHERE id = 'admin' AND passwd = 'pizza' SQLインジェクション

Slide 23

Slide 23 text

Copyright © NIFTY Corporation All Rights Reserved. 23 脆弱性を利⽤されると… ①ID/PWを ⼊⼒欄へ⼊⼒ ② ⼊⼒されたSQL⽂が 埋め込まれた クエリを発⾏ 脆弱性のある Webアプリ データベース 攻撃者 SQLインジェクション id = admin passwd = ʼ OR ʻtʼ = ʻt SELECT id FROM users WHERE id = 'admin' AND passwd = '' OR 't' = 't'

Slide 24

Slide 24 text

Copyright © NIFTY Corporation All Rights Reserved. 実際に体験してみよう 24

Slide 25

Slide 25 text

Copyright © NIFTY Corporation All Rights Reserved. SQLインジェクションの対策 25 1.プリペアドステートメントを利⽤する 2. Webフレームワーク(ORM)を利⽤する 3. WAF(Web Application Firewall)を利⽤する $data = $db->prepare( 'SELECT id FROM users WHERE id = (:id) LIMIT 1;' ); $data->bindParam( ':id', $id, PDO::PARAM_INT ); $data->execute();

Slide 26

Slide 26 text

Copyright © NIFTY Corporation All Rights Reserved. XSS(Cross Site Scripting/クロスサイトスクリプティング) 26 XSSとは、どんな問題か︖ - ユーザのブラウザ上で攻撃者のスクリプトが実⾏される XSSとは、どんな影響があるか︖ - セッションIDの摂取 - 再認証を伴わない機能の不正使⽤ - コンテンツの改ざん など XSSとは、どんな機能で発⽣するか︖ - ユーザの⼊⼒値を出⼒するWebページ 罠サイトや罠Eメール 脆弱なサイト 混乱を避けるため、CSSとは略称されない︕

Slide 27

Slide 27 text

Copyright © NIFTY Corporation All Rights Reserved. XSSざっくりイメージ 27 xss emtg alert('Hello World') scriptタグで囲まれた所に、JavaScriptコードを埋め込める︕ (悪意のあるスクリプト) HTML xss emtg alert('Hello World') scriptタグとかも⼊⼒できてしまったら... 対策もされていなかったら.... ⼊⼒値が挿⼊できるとする スクリプト実⾏ ⼊⼒ (悪意のあるスクリプト)

Slide 28

Slide 28 text

Copyright © NIFTY Corporation All Rights Reserved. XSSの種類 28 反射型(Reflected) リクエストの⼊⼒値をレスポンスに出⼒する際に発⽣ 蓄積型(Stored) データストアに保存した⼊⼒値を出⼒する際に発⽣ DOM Based ⼊⼒値をJavaScript上で不適切に使⽤することで発⽣ 詳細は以下を参考 https://jvndb.jvn.jp/ja/cwe/CWE-79.html 検索サイト 掲⽰板サイト

Slide 29

Slide 29 text

Copyright © NIFTY Corporation All Rights Reserved. 実際に体験してみよう 29

Slide 30

Slide 30 text

Copyright © NIFTY Corporation All Rights Reserved. XSSの対策(⼀部) 30 変換前 ʻ “ < > & 変換後 ' $quot; < $gt; & Webページに出⼒する全ての要素に対して、エスケープ処理を施す <script></script> エスケープ処理 スクリプトとして解釈されなくなる︕ 詳細は以下を参考 https://www.ipa.go.jp/security/vuln/websecurity/cross-site-scripting.html 超基本

Slide 31

Slide 31 text

Copyright © NIFTY Corporation All Rights Reserved. 参考︓ Webアプリケーションフレームワーク HTML⾃動エスケープ 31 ● Flask → デフォルトで⾃動エスケープ(拡張⼦が限定 .html, .htm, .xml など) https://msiz07-flask-docs-ja.readthedocs.io/ja/latest/templating.html ● Django → デフォルトで⾃動エスケープ https://docs.djangoproject.com/ja/4.2/ref/templates/language/#automatic-html-escaping ● FastAPI(≒ starlette) → デフォルトで⾃動エスケープ ドキュメントに書いてなさそう︖ ⾒つけたら教えて〜 https://github.com/encode/starlette/blob/24c1fac62a80bb153c6548145334fc643991e35a/starlette/templating.py#L87 Pythonだけで、すみません... 😥 HTML⾃動エスケープするように 設定されているのがほとんど。 Webフレームワークを使うのは良い選択です︕ セキュリティが全て担保される訳ではありません。 各リファレンス等を⾒てください。

Slide 32

Slide 32 text

Copyright © NIFTY Corporation All Rights Reserved. XSSの対策(⼀部) 32 URLの出⼒は [http://]や [https://] で始まるURLのみを許可 ... 要素の内容を動的に⽣成しない 詳細は以下を参考 https://www.ipa.go.jp/security/vuln/websecurity/cross-site-scripting.html HTML(aタグ) 「javascript: (スクリプト)」とするとaタグを クリックした際にJavaScriptを実⾏させることができる︕ 上⼿く悪⽤されて任意のスクリプトを埋め込まれる可能性が⽣じるのを防ぐ

Slide 33

Slide 33 text

Copyright © NIFTY Corporation All Rights Reserved. XSSの対策(⼀部) 33 詳細は以下を参考 https://www.ipa.go.jp/security/vuln/websecurity/cross-site-scripting.html https://developer.mozilla.org/ja/docs/Web/HTTP/Cookies CookieにHttpOnly、Secure属性を付ける など ⼊⼒値の内容チェック 数字のみの⼊⼒フォーム(例えば、電話番号、郵便番号 など) 012345678 数字以外が存在したら受け⼊れない︕ HttpOnly ・・・ JavaScriptからCookieの値にアクセスするのを防ぐ Secure ・・・ HTTPS通信でのみ送信される

Slide 34

Slide 34 text

Copyright © NIFTY Corporation All Rights Reserved. コラム︓⼊⼒値について 34 「0」か「1」しか⼊⼒されない︖ JavaScriptなどで⼊⼒値をチェックしている場合でも、JSの無効化/書き換えがされるかも︕ サーバに送信された値を、サーバ側でちゃんとチェックが必要 ラジオボタン形式の⼊⼒フォーム 「会員 = 1」「会員でない = 0」 いえ、開発ツールやプロキシツールでGETやPOSTの値は簡単に書き換えられます︕

Slide 35

Slide 35 text

Copyright © NIFTY Corporation All Rights Reserved. CSRF(Cross Site Request Forgeries/クロスサイトリクエストフォージェリ) 35 CSRFとは、どんな問題か︖ - 他サイトからのリクエストが実⾏される CSRFとは、どんな影響があるか︖ (ログイン済みの場合) - 利⽤者のみが利⽤可能なサービスの悪⽤ - ユーザが意図していない操作が実⾏ CSRFとは、どんな機能で発⽣するか︖ - ⼊⼒データを使って処理するすべての機能 画像引⽤︓ 「IPA - 安全なウェブサイトの作り⽅ - 1.6 CSRF (クロスサイト・リクエスト・フォージェリ)」 https://www.ipa.go.jp/security/vuln/websecurity/csrf.html

Slide 36

Slide 36 text

Copyright © NIFTY Corporation All Rights Reserved. CSRFざっくりイメージ 36 ログイン セッションID 以降、⼀定期間はセッションIDを送ることでログイン状態を保つ (※ サーバ側は、セッションIDでユーザを特定できる︕) パスワードを 変更しました︕ 勝⼿にリクエストを 送るように仕向ける パスワード変更リクエスト (with セッションID)

Slide 37

Slide 37 text

Copyright © NIFTY Corporation All Rights Reserved. 実際に体験してみよう 37

Slide 38

Slide 38 text

Copyright © NIFTY Corporation All Rights Reserved. CSRFの対策(⼀部) 38 前のページで秘密情報を挿⼊し、実⾏ページでその値が正しいことを確認する 前のページ + hiddenパラメー タ POST hiddenパラメータで送られ たトークンを検証する ⼊⼒データ + hiddenパラメータ ⼊⼒フォーム 検証が通れば実⾏︕ 処理 詳細は以下を参照 https://www.ipa.go.jp/security/vuln/websecurity/csrf.html hiddenパラメータには 独⾃に⽣成された予測困難な値を使う (Webフレームワークでは⼤体これ) ⼊⼒ 確認 実⾏ hiddenを 仕込む hiddenを ⼀緒に送る

Slide 39

Slide 39 text

Copyright © NIFTY Corporation All Rights Reserved. CSRFの対策(⼀部) 39 reCAPTCHAを使う Refererが正しいリンク元か確認する Refererが空の場合は、処理を実⾏しないようでないと意味がない。 しかし、Refererを送信しないユーザに不都合が起こってしまう。 詳細は以下を参照 https://www.ipa.go.jp/security/vuln/websecurity/csrf.html https://aaaa https://bbbb https://aaaa Referer ・・・直前にいたURL ブラウザが勝⼿につけてくれる

Slide 40

Slide 40 text

Copyright © NIFTY Corporation All Rights Reserved. 40 ⽬次 01 セキュリティ⼊⾨ - セキュリティ3要素と脆弱性 - 情報セキュリティの10⼤脅威 - 最近起こったセキュリティ事件 02 Webアプリでの攻撃⼿法 - HTMLのソースからの機密情報漏洩 - SQLインジェクション - XSS(クロスサイトスクリプティング) - CSRF(クロスサイトリクエストフォージェリ) 03 Webアプリの開発にあたって - 脆弱性情報について - GitHub利⽤上の注意

Slide 41

Slide 41 text

Copyright © NIFTY Corporation All Rights Reserved. 脆弱性情報 41 脆弱性情報を⾒る上で、知っておきたい3つの⽤語 ・CVSS(Common Vulnerability Scoring System) ・共通脆弱性評価システム ・脆弱性の深刻度を評価する指標 ・CWE(Common Weakness Enumeration) ・共通脆弱性タイプ⼀覧 ・ソフトウェアにおけるセキュリティ上の脆弱性の種類を識別するための共通の基準 ・CVE(Common Vulnerabilities and Exposures) ・共通脆弱性識別⼦ ・1999年に運⽤を開始したサイバーセキュリティの脆弱性に関する共通名の辞書

Slide 42

Slide 42 text

Copyright © NIFTY Corporation All Rights Reserved. CVSS 42 「脆弱性の深刻度」情報 ベンダ⾮依存の1つの基準で定量的な⽐較が可能 3つの基準で脆弱性を評価する。(各10点満点) 7.3 6.7 4.4 基本評価値 現状評価値 環境評価値 どれぐらい ヤバイ 脆弱性か 攻撃くる可 能性ある︖ どこで このソフト 使ってる︖

Slide 43

Slide 43 text

Copyright © NIFTY Corporation All Rights Reserved. CVSS 43 「脆弱性の深刻度」情報 ベンダ⾮依存の1つの基準で定量的な⽐較が可能 3つの基準で脆弱性を評価する。(各10点満点) 7.3 基本評価値 どれぐらい ヤバイ 脆弱性か JVNで公開される数値はコレ︕

Slide 44

Slide 44 text

Copyright © NIFTY Corporation All Rights Reserved. GitHubでのソース流出と対策 44 GitHubでのソース流出等のセキュリティ事件は近年よく起こります。 ただ、そのほとんどが⼈為的なミスによるものです︕ GitHubソースコードの流出事件 https://www.itmedia.co.jp/news/articles/2101/29/news107. html GitHubでの個⼈情報漏洩 https://www.itmedia.co.jp/business/articles/2210/07/news1 74.html ・個⼈アクセストークンの保管に注意する ・セキュアな情報の公開に気をつける いくつかの社内ルールはNotionでまとめられています︕

Slide 45

Slide 45 text

Copyright © NIFTY Corporation All Rights Reserved. まとめ 45 開発する上で共通して守ってほしいセキュリティについてお話ししました。 ➢ 脆弱性が残っていると重⼤な情報漏えいにつながることがあります。 既知の脆弱性を理解し、対策をしましょう。 ➢ Webアプリケーションの代表的な攻撃⼿法を説明しました。 世の中のWebフレームワークでは対策が取られている部分が多いですが 完璧ではないです。知識として知っておき必要な対策を取れるようにしましょう。 ➢ 脆弱性情報の紹介、GitHub利⽤上の注意もしました。 今後、様々なツールを使うことになると思います。 脆弱性情報を注視して、利⽤ルールを守って使いましょう。

Slide 46

Slide 46 text

Copyright © NIFTY Corporation All Rights Reserved. (参考)もっとWebセキュリティを勉強したい 46 書籍 ● “体系的に学ぶ 安全なWebアプリケーションの作り⽅ 第2版” - 徳丸 浩 著 Web資料 ● IPA - 安全なウェブサイトの作り⽅ https://www.ipa.go.jp/security/vuln/websecurity.html ワークショップ ● AWS Security Workshops https://awssecworkshops.com/

Slide 47

Slide 47 text

Copyright © NIFTY Corporation All Rights Reserved.