$30 off During Our Annual Pro Sale. View Details »

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 大塚 純平

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

    • 情報漏えい • クロスサイトリクエストフォージェリ(CSRF)★ハンズオン • HTTPのセキュリティ機能 ▌やられサイト (20分) ▌脆弱性の見つけ方(5分)
  3. 情報セキュリティ

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

    用が可能である特性。 Integrity 正確さ及び完全さの特性。 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-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 認可・権限・アクセス制御
  12. CWE-79 クロスサイト・スクリプティング (XSS) ▌XSS とは Webアプリケーションを通して、任意のスクリプトを利用者のブラウザで実施させる脆弱性 です。 被害者が使っているサイトA サイトA上で、スクリプトが実行されてしまい、情報 が抜き取られたり、ページを改ざんされたり。

    被害者が使っているサイトAや攻撃用のサイト クリックを誘導するURL (パラメーターにスクリプトがついている) 情報を収集するための攻撃用のサイト
  13. XSS の原理(1) ▌HTMLタグや JavaScript などの構造を破壊するような値を入力するこ とで、スクリプトを実行させます。

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

    の値をそのまま表示させる AAAさん <scrip>alert(1)</script>さん index.php?name=<script>alert(1)</script>
  15. <h1><?php echo htmlspecialchars($_GET['name’]) ?>さん</h1> index.php?name=AAA URL: GETリクエストパラメーター の値をエスケープして表示させる AAAさん &lt;script&gt;alert(1)&lt;/script&gt;さん

    XSS の例① (対策後) index.php?name=<script>alert(1)</script>
  16. XSS の原理(2) ▌出力時に value の「””」の構造が破壊されて、任意の属性が追加され る。

  17. XSS の例② (対策前) <input type=“text” value= “a” onfocus=“alert(1)“ /> index.php?id=a”

    onfocus=“alert(1) フォーカス時に、alert(1) が表示される <input type=“text” value=“<?php echo $_GET[‘id’] ?>” />
  18. XSS の例② (対策後) index.php?id=a” onfocus=“alert(1) フォーカス時に何もならない <input type=“text” value=“<?php echo

    htmlspecialchars($_GET[‘id’]) ?>” /> <input type=“text” value= "&quot; onfocus=&quot;alert(1)"/>
  19. XSSの種類 • 攻撃用のスクリプトが攻撃対象とは別の場所にある Reflected XSS • 攻撃用のスクリプトが攻撃対象のDB等に保管されている Stored XSS •

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

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

    攻撃対象サイトAのデータベース SQL文の結果をサイトAに返す。 通常閲覧できないような情報が含まれる ことも…。
  22. SQL インジェクションの原理(1) ▌DBMSに対して発行する SQL文の構造を破壊するような値を入力する ことでDBで不正な SQL文を実行します。 SELECT * FROM tbl_user

    WHERE id =‘{$_GET[‘id’]}’ id =‘{$_GET[‘id’]}’
  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) を使うことが推奨です。
  24. 原因と対策 • ユーザーが入力した文字列をエスケープしていない 原因 • 静的プレースホルダやテンプレートエンジン等、フレームワークの支援機構 を利用する • 別のシステムにデータを渡す際、ユーザーが入力した文字列を正しくエス ケープすること

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

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

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

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

  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か。
  30. CWE-352 クロスサイトリクエストフォージェリ(CSRF) ▌CSRF とは 被害者が罠リンクをクリックして意図せずに処理を実行させられてしまう脆弱性です。 ▌参考情報 https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/301.html 掲示板サイト 広告のようなクリックを誘導するURL (実はサイトAの設定変更を行うURL)

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

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

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

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

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