Save 37% off PRO during our Black Friday Sale! »

開発運用研修2020セキュリティ / Development_Operations_Training_2020_Security

A97eee01397705443a72a48ce29d3e19?s=47 Cybozu
August 19, 2020

開発運用研修2020セキュリティ / Development_Operations_Training_2020_Security

A97eee01397705443a72a48ce29d3e19?s=128

Cybozu

August 19, 2020
Tweet

Transcript

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

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

    • HTTPのセキュリティ機能 ▌やられサイト (20分) ▌脆弱性の⾒つけ⽅(5分)
  3. 情報セキュリティ

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

    認可されたエンティティが要 求したときに、アクセス及び使 ⽤が可能である特性。 JIS Q 27000
  5. 情報資産 ▌情報セキュリティで保護すべき対象となるもの。情報資産は様々であり、 組織そのものや⼈も該当します。 • 電⼦媒体(DVD・メモリスティック) • 印刷物 • 設備 •

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

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

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

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

    ▌参考情報 https://www.ipa.go.jp/security/vuln/CWE.html
  10. CWEタイプのツリー(全て/JVN iPedia) ▌CWEはツリー構造になっており、上位にある脆弱性ほど、抽象度が⾼く なります。企業ごとに取捨選択して利⽤しています。 CWE全体@NIST JVN iPedia @IPA

  11. サイボウズで使⽤している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 設計上の問題
  12. CWE-79 クロスサイト・スクリプティング (XSS) ▌XSS とは Webアプリケーションを通して、任意のスクリプトを利⽤者のブラウザで実施させる脆弱性 です。 1.被害者が使っているサイトAや攻撃⽤のサイト 攻撃⽤スクリプトが付いたURLを被害者にクリックさせる 2.被害者が使っているサイトA

    サイトA上で、スクリプトが実⾏されてしまい、情報 が抜き取られたり、ページを改ざんされたり。
  13. XSS の原理 ▌HTMLタグや JavaScript などの構造を破壊するような値を⼊⼒するこ とで、スクリプトを実⾏させます。

  14. XSS の例① (対策前) URL: index.php?name=AAA <h1><?php echo $_GET['name'] ?>さん</h1> GETリクエストパラメーター

    の値をそのまま表⽰させる AAAさん URL: index.php?name=<script>alert(1)</script> <h1><?php echo $_GET['name'] ?>さん</h1> GETリクエストパラメーター の値をそのまま表⽰させる <scrip>alert(1)</script>さん
  15. XSS の例① (対策後) URL: index.php?name=AAA <h1><?php echo htmlspecialchars($_GET['nameʼ]) ?>さん</h1> GETリクエストパラメーター

    の値をエスケープして表⽰させる AAAさん URL: index.php?name=<script>alert(1)</script> &lt;script&gt;alert(1)&lt;/script&gt;さん
  16. XSSの種類 Reflected XSS • 攻撃⽤のスクリプトが攻撃対象とは別の場所にある Stored XSS • 攻撃⽤のスクリプトが攻撃対象のDB等に保管されている DOM

    Based XSS • サーバーを経由せず、JSのみで表⽰するパラメータを経由して攻撃が実⾏される
  17. XSSの原因と対策 原因 • HTMLのエスケープ漏れ • ⽂字コードやコンテンツ型の⾃動判別への理解不⾜ 対策 • HTML は正しくエスケープする

    • ⽂字コードは必ず宣⾔する • コンテンツ型が HTML と判定されないようにする
  18. CWE-89 SQLインジェクション(SQLi) ▌SQL インジェクションとは Web アプリケーションを通して、任意のSQL⽂をデータベースに対して発⾏できる脆弱 性です。 1.攻撃対象のサイトA サイトAからのリクエストにSQL⽂をデー タベースに対して発⾏

    2.攻撃対象サイトAのデータベース SQL⽂の結果をサイトAに返す。 通常閲覧できないような情報が含まれる 場合がある。
  19. SQL インジェクションの原理 ▌DBMSに対して発⾏する SQL⽂の構造を破壊するような値を⼊⼒する ことでDBで不正な SQL⽂を実⾏します。

  20. SELECT * FROM tbl_user WHERE id =ʻ{$_GET[ʻidʼ]}ʼ ʼ OR 1=1

    -- id =ʻʼ OR 1=1 --ʼ userテーブルの情報がすべて表⽰される ▌SQL ⽂の構造を破壊され WHERE 句で指定される条件が常に「真」 になり、情報が漏えいします。 診断時には AND(ʻ and 1=0) を使うことが推奨です。
  21. SQLインジェクションの原因と対策 原因 • ユーザーが⼊⼒した⽂字列をエスケープしていない 対策 • 静的プレースホルダやテンプレートエンジン等、フレームワークの⽀援機構 を利⽤する • 別のシステムにデータを渡す際、ユーザーが⼊⼒した⽂字列を正しくエス

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

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

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

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

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

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

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

  30. セキュリティ機能 ▌HTTP では、セキュリティ機能を設定することができます • X-XSS-Protection • X-Content-Type-Options • X-Frame-Options •

    Content-Security-Policy • Content-Disposition: attachment; • Strict-Transport-Security 共通仕様として定められているものもあります。
  31. X-XSS-Protection: 1; mode=block ▌ブラウザ側でも XSS を防ぐための保護機能 X-XSS-Protection: 1; mode=block ブラウザの設定で、デフォルトで有効になっている

    XSS フィルター機能に対して、ユー ザーが無効にしている場合にも、強制的に有効するための機能です。XSSと検知された 場合は、レスポンスのコンテンツ全体が「#」に置き換えられます。
  32. X-Frame-Options:SAMEORIGIN ▌フレーム内のページ表⽰を同⼀オリジンにのみ許可する保護機能

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

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

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

  36. 診断対象(1) 診断環境 診断対象システム Internet Web アプリケーション / サイト Web アプリケーション

    / サイトに存在する脆弱性や、 設定不備が残っていないか把握するための試験
  37. 診断対象(2) ネットワークインフラ サーバーやネットワーク機器の設定に問題がないかを 把握するための試験 診断環境 診断対象システム Internet

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

  39. 参考書籍 ▌安全なウェブサイトの作り⽅ 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アプリケーションの作り⽅(徳丸本)
  40. 脆弱性評価

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

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

  43. CVSSv3の評価例 【攻撃シナリオ】 1. 攻撃者は細⼯をしたURLを被害 者に送り付ける 2. 被害者がそのリンクを開く 【被害】 被害者が利⽤しているサイトAのパス ワードが攻撃者に漏洩する

    ▌攻撃経路(AV):ネットワーク ▌攻撃難易度(AC):低 ▌攻撃に必要な権限(PR):なし ▌被害者の操作の必要性(UI):要 ▌影響の範囲(S):変更なし ▌機密性への影響(C):⾼ ▌完全性への影響(I):なし ▌可⽤性への影響(A):なし CVSSv3基本値:6.5