Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

開運研修2021 セキュリティ / Security 2021

開運研修2021 セキュリティ / Security 2021

Cybozu

May 28, 2021
Tweet

More Decks by Cybozu

Other Decks in Technology

Transcript

  1. Cy-CSIRT(セキュリティ室)との違い ▌サイボウズにはCSIRTもある n CSIRT:Computer Security Incident Response Team n サイボウズのCSIRTは「セキュリティ室」と呼ばれています。

    ▌セキュリティ室は会社の情報セキュリティ n PCなくした︕, あやしいメールが届いた︕ など ▌セキュリティ室とPSIRTは役割は違えど連携しています。
  2. 共通脆弱性識別⼦ CVE ▌CVE(Common Vulnerabilities and Exposures) n ⾮営利団体のMITREが中⼼となって採番している、個々の脆弱性を 識別する番号 n

    例 n CVE-2014-6271:ShellShock(bash) n CVE-2019-0708:BlueKeep(Remote Desktop services) ▌参考情報 n https://www.ipa.go.jp/security/vuln/CVE.html
  3. 脆弱性の評価 CVSSv3 ▌CVSSv3(Common Vulnerability Scoring System v3.0)とは n 脆弱性の深刻度を数値化するための世界中で使われるシステム n

    CIAに以下の5項⽬を加え、計8項⽬で脆弱性を評価 n 攻撃経路(AV):ネットワーク or 隣接 or ローカル or 物理 n 攻撃の複雑さ(AC):低 or ⾼ n 攻撃に必要な権限(PR):なし or 低 or ⾼ n 被害者が操作を必要か(UI):不要 or 要 n 影響の範囲(S):変更なし or 変更あり n 0.0 ~ 10.0 の101段階
  4. SELECT * FROM tbl_user WHERE id =ʻ{$_GET[ʻidʼ]}ʼ ʼ OR 1=1

    -- id =ʻʼ OR 1=1 --ʼ SQLインジェクション例 ▌SQL ⽂の構造を破壊され WHERE 句で指定される条件が常に「真」 になり、情報が漏えいします。 診断時には AND(ʻ and 1=0) を使うことが推奨です。
  5. DOM-Based XSS についての補⾜ ▌DOM-BasedXSSを構成する「ソース」と「シンク」 n ソース︓攻撃者によってスクリプトを埋め込まれる可能性のある箇所 n 例 n location.href,

    location.search, window.name など n シンク︓ソースに含まれる⽂字列を⽤いることで実際にXSSの原因と なる箇所 n 例 n document.write, element.innerHTML, $.html(), eval など
  6. DOM-Based XSS の例 <div id=“sample”></div> <script> const txt = decodeURIComponent(location.hash.substring(1));

    // ソース document.getElementById(“sample”).innerHTML = txt; // シンク </script>
  7. 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
  8. Trusted Types 例 // サーバー側からtrusted typesの制限を課せられている <div id=“sample”></div> <script> const

    myPolicy = trustedTypes.createPolicy(“example”, { createHTML: (unsafe) => { /* 適切にエスケープされたsafe変数を⽣成する処理 */ return safe; } }); const txt = decodeURIComponent(location.hash.substring(1)); // ソース // エラー document.getElementById(“sample”).innerHTML = txt; // Trusted Typesを経由しているためエラーにならない document.getElementById(“sample”).innerHTML = myPolicy.createHTML(txt); </script>
  9. CSRFの原因と対策 原因 • CSRF対策チケットが発⾏・検証されていない • または X-Requested-With ヘッダが付与・検証されていない。[補⾜2] • CSRF対策チケットの強度が弱い

    対策 • ⼗分強度のあるCSRF対策チケットの付与、検証を⾏う • またはX-Requested-Withヘッダの付与・検証を⾏う • 実績のあるフレームワークを使う
  10. CSRF例(対策後) パスワード変更ページ へ遷移をクリック /password-reset csrf_token=6aS8... 新しいパスワードを ⼊⼒ /password-update pass=abc csrf_token=6aS8...

    罠リンク クリック /password_update pass=hacked_password →攻撃者はcsrf_tokenがわからないのでパス ワードの変更ができない ×
  11. ブラウザが提供するセキュリティ機構 ▌Same-Origin Policy (SOP) n (スキーム, ホスト名, ポート番号)の組が異なる場合、DOMの参照や通信 の⼀部を禁⽌する。 [補⾜1]

    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
  12. Cookieの扱い ▌Cookieを発⾏時に属性を指定することで扱いを制限することができる。 [補⾜4] n Expires:絶対的な有効期限を指定 n Max-Age:相対的な有効期限を指定 n Domain:利⽤可能なホストを指定 n

    Path:利⽤可能なパスを指定 n Secure:HTTPSを利⽤しているときにのみ送信される n HttpOnly:jsなどからの呼び出し禁⽌ n SameSite:リクエストもとに応じてクッキーをセットするかを指定
  13. 補⾜② [補⾜3] 現在では多くのWebブラウザで X-XSS-Protection の廃⽌の動きがあります。 https://caniuse.com/?search=X-XSS-Protection ChromeはXSS Auditor (X-XSS-Protection が有効のときに動作するXSS検出機構)を削除

    https://www.chromestatus.com/feature/5021976655560704 Firefoxはもともと対応していない https://bugzilla.mozilla.org/show_bug.cgi?id=528661 EdgeはXSS filter を削除 https://blogs.windows.com/windows-insider/2018/07/25/announcing-windows-10- insider-preview-build-17723-and-build-18204/
  14. 脆弱性の評価 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 ⾼