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

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

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