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

2019-11 Webアプリケーションセキュリティ/2019-11 Web application Security

2019-11 Webアプリケーションセキュリティ/2019-11 Web application Security

Cybozu
PRO

June 25, 2019
Tweet

More Decks by Cybozu

Other Decks in Technology

Transcript

  1. 開発運用研修 2019
    セキュリティ
    PSIRT 大塚 純平

    View Slide

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

    View Slide

  3. 情報セキュリティ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  11. サイボウズで採用しているCWE識別子
    ▌サイボウズで採用しているCWE識別子と脆弱性タイプ
    CWE-16 環境設定 CWE-287 不適切な認証
    CWE-20 不適切な入力確認 CWE-352 クロスサイトリクエストフォージェリ(CSRF)
    CWE-22 パス・トラバーサル CWE-362 競合状態
    CWE-78 OSコマンド・インジェクション CWE-384 Session Fixation
    CWE-79 クロスサイト・スクリプティング (XSS) CWE-399 リソース管理の問題
    CWE-89 SQLインジェクション CWE-601 Open Redirect
    CWE-93 CRLF Injection CWE-614 ログインの不備 - クッキーのセキュア属性不備
    CWE-94 コードインジェクション CWE-Other その他
    CWE-113 HTTPヘッダ・インジェクション CWE-
    DesignError
    設計上の問題
    CWE-200 情報漏えい
    CWE-264 認可・権限・アクセス制御

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  16. XSS の原理(2)
    ▌出力時に value の「””」の構造が破壊されて、任意の属性が追加され
    る。

    View Slide

  17. XSS の例② (対策前)

    index.php?id=a” onfocus=“alert(1)
    フォーカス時に、alert(1) が表示される
    ” />

    View Slide

  18. XSS の例② (対策後)
    index.php?id=a” onfocus=“alert(1)
    フォーカス時に何もならない
    ” />

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  22. SQL インジェクションの原理(1)
    ▌DBMSに対して発行する SQL文の構造を破壊するような値を入力する
    ことでDBで不正な SQL文を実行します。
    SELECT * FROM tbl_user WHERE id =‘{$_GET[‘id’]}’
    id =‘{$_GET[‘id’]}’

    View Slide

  23. SQL インジェクションの原理(2)
    ▌SQL 文の構造を破壊され WHERE 句で指定される条件が常に「真」
    になり、情報が漏えいします。
    SELECT * FROM tbl_user WHERE id =‘{$_GET[‘id’]}’
    id =‘’ OR 1=1 --’
    ’ OR 1=1 --
    userテーブルの情報がすべて表示される
    診断時には AND(‘ and 1=0) を使うことが推奨です。

    View Slide

  24. 原因と対策
    • ユーザーが入力した文字列をエスケープしていない
    原因
    • 静的プレースホルダやテンプレートエンジン等、フレームワークの支援機構
    を利用する
    • 別のシステムにデータを渡す際、ユーザーが入力した文字列を正しくエス
    ケープすること
    対策

    View Slide

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

    View Slide

  26. 秘密情報
    ▌秘密情報とは外部に知られると致命的となる情報
    共通仕様として漏洩してはいけない情報を定義しています。
    認証情報もしくは、それに類する情報を秘密情報としています。
    • アカウント
    • パスワード
    • 特定の人にしか送信しないURL情報
    • CSRFチケット

    View Slide

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

    View Slide

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

    View Slide

  29. Referer からの QueryString の漏えい
    ▌HTTP リクエストにはRefererというヘッダがあります。
    ▌Referer は移動する前にどんなURLにアクセスしていたかの情報が記載
    されます
    製品ページ
    ▽ アクセスしていたURL
    https://hogehoge.cybozu.co
    m/hoge.cgi?user=username
    &pass=password
    攻撃者のページ
    ▽ 送られるRefererヘッダ
    https://hogehoge.cybozu.co
    m/hoge.cgi?user=username
    &pass=password
    遷移
    usernameというユー
    ザーのパスワードは
    passwordか。

    View Slide

  30. CWE-352 クロスサイトリクエストフォージェリ(CSRF)
    ▌CSRF とは
    被害者が罠リンクをクリックして意図せずに処理を実行させられてしまう脆弱性です。
    ▌参考情報
    https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/301.html
    掲示板サイト
    広告のようなクリックを誘導するURL
    (実はサイトAの設定変更を行うURL)
    被害者が使っているサイトA
    例えば、非公開設定になっている記事を
    公開設定へ本人が変更したことに…

    View Slide

  31. CSRF対策用のトークン
    ▌トークンをPOSTのリクエストボディのパラメーター送信しないと処理が行わ
    れないように対策します。
    掲示板サイト
    広告のようなクリックを誘導するURL
    (実はサイトAの設定変更を行うURL)
    被害者が使っているサイトA
    非公開設定を変えるためには
    POSTでアクセス且つ、サイトAのトークンが必要
    GETだし、トークンは無いしで
    エラーとしてはじかれる

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide