Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

Cybozu
August 19, 2020

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

Cybozu

August 19, 2020
Tweet

More Decks by Cybozu

Other Decks in Technology

Transcript

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

    View full-size slide

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

    View full-size slide

  3. 情報セキュリティ

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  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
    設計上の問題

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  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アプリケーションの作り⽅(徳丸本)

    View full-size slide

  40. 脆弱性評価

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide