Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)

2,369 views

Published on

2017年9月16日, WordCamp Tokyo 2017 での講演資料です.

Published in: Internet
  • Be the first to comment

  • Be the first to like this

安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)

  1. 1. 安全なプラグインに必要なこと ~脆弱性届出状況に見る傾向と対策~ 2017年9月16日@WordCamp Tokyo 2017 JPCERTコーディネーションセンター 情報流通対策グループ 堅木 雅宣 戸田 洋三
  2. 2. Copyright ©2017 JPCERT/CC All rights reserved. 本日の内容 はじめに —JPCERT/CC の紹介 —脆弱性ハンドリングとは? 脆弱性届出状況から見えてきた WordPressセキュリティの傾向 —プラグインのセキュリティに関して 開発者、サイト運営者に気をつけてもらいたいこと 1
  3. 3. Copyright ©2017 JPCERT/CC All rights reserved. JPCERT/CCとは 一般社団法人 JPCERTコーディネーションセンター Japan Computer Emergency Response Team Coordination Center ジェーピーサート コーディネーションセンター 日本国内のインターネット利用者やセキュリティ管理担当者、ソフトウエア製品開発者等 (主に、情報セキュリティ担当者)がサービス対象 コンピュータセキュリティインシデントへの対応、国内外にセンサをおいたインターネッ ト定点観測、ソフトウエアや情報システム・制御システム機器等の脆弱性への対応などを 通じ、セキュリティ向上を推進 インシデント対応をはじめとする、国際連携が必要なオペレーションや情報連携に関する、 我が国の窓口となるCSIRT(窓口CSIRT) CSIRT: Computer Security Incident Response Team ※各国に同様の窓口となるCSIRTが存在する(米国のUS-CERT、CERT/CC、中国のCNCERT, 韓国のKrCERT/CC、等) 経済産業省からの委託事業として、サイバー攻撃等国際連携対応調整事業を実施 2
  4. 4. Copyright ©2017 JPCERT/CC All rights reserved. JPCERT/CCの活動 重要インフラ、重要情報インフラ事業者等の特定組織向け情報発信早期警戒情報 海外のNational-CSIRTや企業内のセキュリティ対応組織の構築・運用支援CSIRT構築支援 脆弱性情報ハンドリング ➢ 未公開の脆弱性関連情報を製品開発者へ 提供し、対応依頼 ➢ 関係機関と連携し、国際的に情報公開日 を調整 ➢ セキュアなコーディング手法の普及 ➢ 制御システムに関する脆弱性関連情報の 適切な流通 マルウエア(不正プログラム)等の攻撃手法の分析、解析アーティファクト分析 各種業務を円滑に行うための海外関係機関との連携国際連携 インシデントの予測と捕捉インシデント予防 発生したインシデントへの対応 制御システムに関するインシデントハンドリング、情報収集・分析発信制御システムセキュリティ 日本シーサート協議会、フィッシング対策協議会の事務局運営等国内外関係者との連携 ➢ マルウエアの接続先等の攻撃関連サイ ト等の閉鎖等による被害最小化 ➢ 攻撃手法の分析支援による被害可能性 の確認、拡散抑止 ➢ 再発防止に向けた関係各関の情報交換 及び情報共有 インシデントハンドリング (インシデント対応調整支援) 情報収集・分析・発信 定点観測(TSUBAME) ➢ ネットワークトラフィック情報の収集分 析 ➢ セキュリティ上の脅威情報の収集、分析、 必要とする組織への提供 3
  5. 5. Copyright ©2017 JPCERT/CC All rights reserved. 脆弱性情報ハンドリングとは? 脆弱性情報ハンドリング —ソフトウェア/ハードウエアシステム等における脆弱性情報 の取扱い —未公開の脆弱性情報を製品開発者に連絡し対応を依頼し、 海外の関係機関とも連携し、一般公表を調整 日本における脆弱性情報流通の取り組み —経済産業省告示「ソフトウエア製品等の脆弱性関連情報に 関する取扱規程」 —情報セキュリティ早期警戒パートナーシップ 4
  6. 6. Copyright ©2017 JPCERT/CC All rights reserved. 脆弱性情報ハンドリングとは? 5 https://www.jpcert.or.jp/vh/index.html 脆弱性情報の届出 ベンダ・発見者との調整 一般公表 WordPress プラグイン “XXX” のクロスサイトスクリプティン グの脆弱性を発見した! プラグイン “XXX” の開発者 JVN公表 http://jvn.jp/ JVN (Japan Vulnerability Notes)
  7. 7. Copyright ©2017 JPCERT/CC All rights reserved. WordPress関連のJVN公表数の遷移 6 0 2 4 6 8 10 12 14 16 18 20 2011 2012 2013 2014 2015 2016 2017 wordpress plugin プラグインの脆弱性が増加
  8. 8. Copyright ©2017 JPCERT/CC All rights reserved. WordPress関連のJVN公表数の遷移 7 0 2 4 6 8 10 12 14 16 18 20 2011 2012 2013 2014 2015 2016 2017 wordpress plugin NextGEN Gallery(1,000,000+ active installs) に PHP ファイルインクルージョンの脆弱性 サーバ上で任意のコード実行の可能性 プラグインの脆弱性が増加
  9. 9. Copyright ©2017 JPCERT/CC All rights reserved. WordPress関連のJVN公表数の遷移 8 700,000+ 200,000+ 400,000+ 広く使われているプラグインも… 0 2 4 6 8 10 12 14 16 18 20 2011 2012 2013 2014 2015 2016 2017 wordpress plugin プラグインの脆弱性が増加
  10. 10. Copyright ©2017 JPCERT/CC All rights reserved. WordPress本体のセキュリティ対策は進んでいる WordPressのREST APIに起因する脆弱性(2017年2月) — 多数のウェブサイトが改ざんの被害に — 参考情報 JPCERT/CC WordPress の脆弱性に関する注意喚起 https://www.jpcert.or.jp/at/2017/at170006.html HackerOneにてバグバウンティプログラムの開始(2017年5月) 9 引用: WordPress Now on HackerOne https://wordpress.org/news/2017/05/wordpress-now-on-hackerone/
  11. 11. Copyright ©2017 JPCERT/CC All rights reserved.10 “A chain is only as strong as its weakest link” プラグインが weakest link? この写真 は CC BY-SA のライセンスを許諾されています
  12. 12. Copyright ©2017 JPCERT/CC All rights reserved. プラグイン開発者の方へ… 11
  13. 13. Copyright ©2017 JPCERT/CC All rights reserved. 「Simple Custom CSS and JS」(1) 反射型 XSS バージョン 3.4 で修正 https://wordpress.org/plugins/custom-css-js/ includes/admin-screens.php にて HTTP リクエストで渡された値をそ のままページ出力に使っている 12 WordPress 用プラグイン Simple Custom CSS and JS におけるクロスサイ トスクリプティングの脆弱性 https://jvn.jp/jp/JVN31459091/ 2017年7月24日公表
  14. 14. Copyright ©2017 JPCERT/CC All rights reserved. 「Simple Custom CSS and JS」(2) 13 L569: function custom_code_options_meta_box_callback( $post ) { …….. L576: if ( isset( $_GET['language'] ) ) { L577: $options['language'] = $_GET['language’]; L578: } …….. L624: <input type="hidden" name="custom_code_language“ value="<?php echo $options['language']; ?>" /> includes/admin-screens.php (3.2)
  15. 15. Copyright ©2017 JPCERT/CC All rights reserved. 「Simple Custom CSS and JS」(3) 14 L569: function custom_code_options_meta_box_callback( $post ) { …….. L575: if ( isset( $_GET['language'] ) ) { L576: $options['language'] = $this->get_language(); L577: } …….. L623: <input type="hidden" name="custom_code_language“ value="<?php echo $options['language']; ?>" /> includes/admin-screens.php (3.4)
  16. 16. Copyright ©2017 JPCERT/CC All rights reserved. 「Simple Custom CSS and JS」(4) 15 L1075: function get_language( $post_id = false ) { …….. L1079: } else { L1080: $language = isset( $_GET[‘language’] ) ? esc_attr(strtolower($_GET[‘language’])) : ‘css’; L1081: } …….. includes/admin-screens.php (3.4)
  17. 17. Copyright ©2017 JPCERT/CC All rights reserved. Securing Output 16 Plugin Handbook よく読みましょう. 引用: WORDPRESS.ORG Plugin Handbook https://developer.wordpress.org/plugins/security /securing-output/
  18. 18. Copyright ©2017 JPCERT/CC All rights reserved. ツールで脆弱性探索してるヒトたちもいます 17 BestWebSoft 製のプラグ イン50件で使われている メニュー表示機能にクロ スサイトスクリプティン グの脆弱性 静的解析ツールを提供する セキュリティベンダが同じ 脆弱性を独立に発見・公表 案件調整中にこんなこともありました… JVN 複数の BestWebSoft 製 WordPress 用プラグインにおける クロスサイトスクリプティングの脆弱性 https://jvn.jp/jp/JVN24834813/ 引用: SECLISTS.ORG http://seclists.org/fulldisclosure/2017/Apr/67
  19. 19. Copyright ©2017 JPCERT/CC All rights reserved.18 プラグイン開発者も もっと解析ツール活用し ていいんじゃないの? てなわけでちょっと検索してみると 例えばこんなのありましたよ。
  20. 20. Copyright ©2017 JPCERT/CC All rights reserved. 解析ツールの例 RIPS (http://rips-scanner.sourceforge.net/) PHPSCAN (https://github.com/AsaiKen/phpscan) — このツールからいくつも PHP 関連の届出につながっている WPScan (https://wpscan.org) php-code-scanner (https://github.com/hissy/php-code-scanner) — WordBench 東京3月勉強会「危険なWordPressプラグインの作 り方」で紹介 …….. 19
  21. 21. Copyright ©2017 JPCERT/CC All rights reserved. まとめ: プラグイン開発者向け 脆弱性を作り込まないために —Plugin Developer Handbook https://developer.wordpress.org/plugins/ —既存の脆弱性事例を知っておこう 発見された脆弱性は速やかに修正しアナウンスする —報告を受ける窓口を用意する —ユーザに修正を伝える 20
  22. 22. Copyright ©2017 JPCERT/CC All rights reserved. サイト運営者の方へ… 21
  23. 23. Copyright ©2017 JPCERT/CC All rights reserved. プラグイン利用に関する運営者側の問題 1. 古いバージョンのプラグインの利用 2. 更新が止まっているプラグインの利用 22
  24. 24. Copyright ©2017 JPCERT/CC All rights reserved. 1. 古いバージョンのプラグイン利用 プラグイン開発者が脆弱性を修正しても、プラグイン利 用者が最新版に更新しない場合、既知の脆弱性が放置さ れたままに… 23 引用: WordPress Plugins Screen https://codex.wordpress.org/File:plugins.png
  25. 25. Copyright ©2017 JPCERT/CC All rights reserved. 1. 古いバージョンのプラグイン利用 24 WordPress 用プラグイン Simple Custom CSS and JS におけるクロスサイ トスクリプティングの脆弱性 https://jvn.jp/jp/JVN31459091/ 2017年7月24日公表 XSSの脆弱性なし 2017年9月12日時点引用:Simple Custom CSS and JS — WordPress Plugins https://wordpress.org/plugins/custom-css-js/advanced/ XSSの脆弱性あり version 3.4で修正
  26. 26. Copyright ©2017 JPCERT/CC All rights reserved. 2. 更新が止まっているプラグインの利用 長期間更新が止まっているプラグインの中には、開発が 終了し、メンテナンスされていないプラグインがある —脆弱性が存在した場合、修正されない... 25
  27. 27. Copyright ©2017 JPCERT/CC All rights reserved. 2. 更新が止まっているプラグインの利用 昨年度の脆弱性報告を受けたWordPress プラグインの 最終更新日を調べてみました —半分程度は2年以上更新されていないプラグイン 26 引用:Simple Custom CSS and JS — WordPress Plugins https://wordpress.org/plugins/custom-css-js/ ここの値を調べた ページ例
  28. 28. Copyright ©2017 JPCERT/CC All rights reserved. 脆弱なプラグインを使わないためには? 利用しているプラグインを最新版にする —脆弱性が修正されたバージョンのままにしない 開発がアクティブではないプラグインには注意! 27
  29. 29. Copyright ©2017 JPCERT/CC All rights reserved. ブラックリストは役に立つ? 28 WordPress ホスティングサービスにおいて、何らかの問 題のあるプラグイン(やテーマ?)に関するブラックリス トを作っている例がある ブラックリストを作っている理由については、セキュリ ティ上の理由だけではない(サービス側で提供している機能と の衝突なども挙げられている: wpengine) GoDaddy – Blacklisted plugins https://www.godaddy.com/help/blacklisted-plugins-8964 WPengine – Disallowed plugins https://wpengine.com/support/disallowed-plugins/ • ブラックリスト入りの条件は? • メンテナンスコスト
  30. 30. Copyright ©2017 JPCERT/CC All rights reserved. まとめ WordPress サイト(コア + プラグイン)のセキュリティ はプラグインのセキュリティが鍵 プラグイン開発者向けのベストプラクティス — 脆弱性をつくりこまない — 脆弱性通知を受ける窓口の設置 — ユーザへの脆弱性修正の通知 サイト運用者向けのベストプラクティス — 利用しているプラグインを最新版にする — 利用しているプラグインの定期的なレビュー — コミュニティ内での共有 29
  31. 31. Copyright ©2017 JPCERT/CC All rights reserved.30 お問合せ、インシデント対応のご依頼は JPCERTコーディネーションセンター — Email:pr@jpcert.or.jp — Tel:03-3518-4600 — https://www.jpcert.or.jp/ インシデント報告 — Email:info@jpcert.or.jp — https://www.jpcert.or.jp/form/ 脆弱性情報に関するご相談 — Email: vultures@jpcert.or.jp
  32. 32. Copyright ©2017 JPCERT/CC All rights reserved.31 ご静聴ありがとうございました
  33. 33. Copyright ©2017 JPCERT/CC All rights reserved. 参考情報 脆弱性事例その2 —WordPress 用プラグイン Multi Feed Reader に SQL イ ンジェクション 解析ツール紹介 更新されないプラグインの脆弱性 32
  34. 34. Copyright ©2017 JPCERT/CC All rights reserved. 「Multi Feed Reader」(1) ログイン可能なユーザによる SQL インジェクション バージョン 2.2.4 で修正 https://wordpress.org/plugins/multi-feed-reader/ shortcode として入力された文字列をそのまま SQL 文の組み立てに 使っていた 33 WordPress 用プラグイン Multi Feed Reader に SQL インジェクション https://jvn.jp/jp/JVN98617234/ 2017年6月6日
  35. 35. Copyright ©2017 JPCERT/CC All rights reserved. 「Multi Feed Reader」(2) 34 L143: public static function find_one_by_property( $property, $value ) { …….. L150: $row = $wpdb->get_row( L151: ‘SELECT * FROM ‘ . self::table_name() . ‘ WHERE ‘ . $property . ‘ = ¥’’ . $value . ‘¥’ LIMIT 0,1 L152: ); lib/models/base.php (2.2.3)
  36. 36. Copyright ©2017 JPCERT/CC All rights reserved. 「Multi Feed Reader」(3) 35 L143: public static function find_one_by_property( $property, $value ) { …….. L150: $row = $wpdb->get_row( L151: ‘SELECT * FROM ‘ . self::table_name() . ‘ WHERE ‘ . $property . ‘ = ¥’’ . esc_sql( $value ) . ‘¥’ LIMIT 0,1 L152: ); lib/models/base.php (2.2.4) $wpdb->prepare() 使うと もっといいよね。
  37. 37. Copyright ©2017 JPCERT/CC All rights reserved. SQLを扱うなら絶対読んでおこう 36 引用: WORDPRESS.ORG Codex Class Reference/wpdb https://codex.wordpress.org/Class_Reference/wpdb
  38. 38. Copyright ©2017 JPCERT/CC All rights reserved. コード解析ツール RIPS RIPS (http://rips-scanner.sourceforge.net/) —232の「危険な関数」を定義し、データフロー解析を実行 —Webサーバ上にツールを展開する必要があり、やや煩雑 37
  39. 39. Copyright ©2017 JPCERT/CC All rights reserved. コード解析ツール PHPSCAN phpscan (https://github.com/AsaiKen/phpscan) —PHPのコードを疑似的に実行してデータフローを解析 —Java環境があれば手軽に解析できる 38
  40. 40. Copyright ©2017 JPCERT/CC All rights reserved. プロファイリング&脆弱性検出ツール WPScan WPScan (https://wpscan.org) —多機能なブラックボックス・テストツール ログインパスワードへのブルートフォースアタック 使用しているプラグイン・テーマに脆弱なバージョンが含まれ ていないかチェック etc. 39
  41. 41. Copyright ©2017 JPCERT/CC All rights reserved. 更新されないプラグインの脆弱性 “22 Abandoned WordPress Plugins with Vulnerabilities” — 2年以上更新されていないプラグインは 17,383 個(※脆弱性があるプラグイン ではありません) — 18個の脆弱なプラグインを発見 1000以上のアクティブインストール数 のプラグインを含む — 4個のプラグインは脆弱性を修正してい たが、ユーザが気づけない形で修正 同じバージョンのまま修正されたなど 40 引用: Wordfence 22 Abandoned WordPress Plugins with Vulnerabilities https://www.wordfence.com/blog/2017/05/22-abandoned- wordpress-plugins-vulnerabilities/

×