More Related Content
Similar to 安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017) (20)
More from JPCERT Coordination Center (20)
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
- 2. Copyright ©2017 JPCERT/CC All rights reserved.
本日の内容
はじめに
—JPCERT/CC の紹介
—脆弱性ハンドリングとは?
脆弱性届出状況から見えてきた
WordPressセキュリティの傾向
—プラグインのセキュリティに関して
開発者、サイト運営者に気をつけてもらいたいこと
1
- 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. Copyright ©2017 JPCERT/CC All rights reserved.
JPCERT/CCの活動
重要インフラ、重要情報インフラ事業者等の特定組織向け情報発信早期警戒情報
海外のNational-CSIRTや企業内のセキュリティ対応組織の構築・運用支援CSIRT構築支援
脆弱性情報ハンドリング
➢ 未公開の脆弱性関連情報を製品開発者へ
提供し、対応依頼
➢ 関係機関と連携し、国際的に情報公開日
を調整
➢ セキュアなコーディング手法の普及
➢ 制御システムに関する脆弱性関連情報の
適切な流通
マルウエア(不正プログラム)等の攻撃手法の分析、解析アーティファクト分析
各種業務を円滑に行うための海外関係機関との連携国際連携
インシデントの予測と捕捉インシデント予防 発生したインシデントへの対応
制御システムに関するインシデントハンドリング、情報収集・分析発信制御システムセキュリティ
日本シーサート協議会、フィッシング対策協議会の事務局運営等国内外関係者との連携
➢ マルウエアの接続先等の攻撃関連サイ
ト等の閉鎖等による被害最小化
➢ 攻撃手法の分析支援による被害可能性
の確認、拡散抑止
➢ 再発防止に向けた関係各関の情報交換
及び情報共有
インシデントハンドリング
(インシデント対応調整支援)
情報収集・分析・発信
定点観測(TSUBAME)
➢ ネットワークトラフィック情報の収集分
析
➢ セキュリティ上の脅威情報の収集、分析、
必要とする組織への提供
3
- 5. Copyright ©2017 JPCERT/CC All rights reserved.
脆弱性情報ハンドリングとは?
脆弱性情報ハンドリング
—ソフトウェア/ハードウエアシステム等における脆弱性情報
の取扱い
—未公開の脆弱性情報を製品開発者に連絡し対応を依頼し、
海外の関係機関とも連携し、一般公表を調整
日本における脆弱性情報流通の取り組み
—経済産業省告示「ソフトウエア製品等の脆弱性関連情報に
関する取扱規程」
—情報セキュリティ早期警戒パートナーシップ
4
- 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. 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. 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. 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. 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. Copyright ©2017 JPCERT/CC All rights reserved.10
“A chain is only as strong as its weakest link”
プラグインが weakest link?
この写真 は CC BY-SA のライセンスを許諾されています
- 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. 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. 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. 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. 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. 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
- 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. Copyright ©2017 JPCERT/CC All rights reserved.
まとめ: プラグイン開発者向け
脆弱性を作り込まないために
—Plugin Developer Handbook
https://developer.wordpress.org/plugins/
—既存の脆弱性事例を知っておこう
発見された脆弱性は速やかに修正しアナウンスする
—報告を受ける窓口を用意する
—ユーザに修正を伝える
20
- 24. Copyright ©2017 JPCERT/CC All rights reserved.
1. 古いバージョンのプラグイン利用
プラグイン開発者が脆弱性を修正しても、プラグイン利
用者が最新版に更新しない場合、既知の脆弱性が放置さ
れたままに…
23
引用: WordPress Plugins Screen
https://codex.wordpress.org/File:plugins.png
- 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. Copyright ©2017 JPCERT/CC All rights reserved.
2. 更新が止まっているプラグインの利用
長期間更新が止まっているプラグインの中には、開発が
終了し、メンテナンスされていないプラグインがある
—脆弱性が存在した場合、修正されない...
25
- 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. Copyright ©2017 JPCERT/CC All rights reserved.
脆弱なプラグインを使わないためには?
利用しているプラグインを最新版にする
—脆弱性が修正されたバージョンのままにしない
開発がアクティブではないプラグインには注意!
27
- 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. Copyright ©2017 JPCERT/CC All rights reserved.
まとめ
WordPress サイト(コア + プラグイン)のセキュリティ
はプラグインのセキュリティが鍵
プラグイン開発者向けのベストプラクティス
— 脆弱性をつくりこまない
— 脆弱性通知を受ける窓口の設置
— ユーザへの脆弱性修正の通知
サイト運用者向けのベストプラクティス
— 利用しているプラグインを最新版にする
— 利用しているプラグインの定期的なレビュー
— コミュニティ内での共有
29
- 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
- 33. Copyright ©2017 JPCERT/CC All rights reserved.
参考情報
脆弱性事例その2
—WordPress 用プラグイン Multi Feed Reader に SQL イ
ンジェクション
解析ツール紹介
更新されないプラグインの脆弱性
32
- 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. 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. 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. Copyright ©2017 JPCERT/CC All rights reserved.
SQLを扱うなら絶対読んでおこう
36
引用:
WORDPRESS.ORG Codex Class Reference/wpdb
https://codex.wordpress.org/Class_Reference/wpdb
- 38. Copyright ©2017 JPCERT/CC All rights reserved.
コード解析ツール RIPS
RIPS (http://rips-scanner.sourceforge.net/)
—232の「危険な関数」を定義し、データフロー解析を実行
—Webサーバ上にツールを展開する必要があり、やや煩雑
37
- 39. Copyright ©2017 JPCERT/CC All rights reserved.
コード解析ツール PHPSCAN
phpscan (https://github.com/AsaiKen/phpscan)
—PHPのコードを疑似的に実行してデータフローを解析
—Java環境があれば手軽に解析できる
38
- 40. Copyright ©2017 JPCERT/CC All rights reserved.
プロファイリング&脆弱性検出ツール WPScan
WPScan (https://wpscan.org)
—多機能なブラックボックス・テストツール
ログインパスワードへのブルートフォースアタック
使用しているプラグイン・テーマに脆弱なバージョンが含まれ
ていないかチェック etc.
39
- 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/