SlideShare a Scribd company logo
安全なプラグインに必要なこと
~脆弱性届出状況に見る傾向と対策~
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/

More Related Content

PDF
クロスサイトリクエストフォージェリ(CSRF)とその対策
PDF
これだけは知っておきたい「Webアクセシビリティ」のこと
PDF
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)
PDF
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
PDF
DLL読み込みの問題を読み解く
PDF
Lessons (to be) Learned from Handling OpenSSL Vulnerabilities
PDF
常時SSL化の事前確認・注意点・手順 〜WordPressとその周辺で必要なこと〜 #wctokyo
PDF
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
クロスサイトリクエストフォージェリ(CSRF)とその対策
これだけは知っておきたい「Webアクセシビリティ」のこと
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
DLL読み込みの問題を読み解く
Lessons (to be) Learned from Handling OpenSSL Vulnerabilities
常時SSL化の事前確認・注意点・手順 〜WordPressとその周辺で必要なこと〜 #wctokyo
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)

What's hot (20)

PPTX
他人事ではないWebセキュリティ
PDF
Webアクセシビリティ 海外の最新動向 2018
PDF
[デブサミ2012]趣味と実益の脆弱性発見
PDF
デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」
PDF
WordPressをこれから始める人のためのテーマ講座
PDF
次世代プラットフォームのセキュリティモデル考察(前編)
PDF
Owasp Project を使ってみた
PDF
OWASPの歩き方(How to walk_the_owasp)
PDF
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』
PDF
OWASP ASVS Project review 2.0 and 3.0
PDF
クラウドセキュリティ基礎 #seccamp
PDF
PHPカンファレンス2014セキュリティ対談資料
PPTX
CMS四天王への攻撃デモを通じて、WordPressの効果的な防御法を学ぼう
PPTX
これからのWebセキュリティ フロントエンド編 #seccamp
PPTX
安全なPHPアプリケーションの作り方2014
PPTX
Web Componentsのアクセシビリティ
PDF
セキュアなソフトウェアアーキテクチャー
PDF
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
PDF
Career - design, adaption and diversity - for EMC I&D event
PPTX
安全なWebアプリケーションの作り方2018
他人事ではないWebセキュリティ
Webアクセシビリティ 海外の最新動向 2018
[デブサミ2012]趣味と実益の脆弱性発見
デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」
WordPressをこれから始める人のためのテーマ講座
次世代プラットフォームのセキュリティモデル考察(前編)
Owasp Project を使ってみた
OWASPの歩き方(How to walk_the_owasp)
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』
OWASP ASVS Project review 2.0 and 3.0
クラウドセキュリティ基礎 #seccamp
PHPカンファレンス2014セキュリティ対談資料
CMS四天王への攻撃デモを通じて、WordPressの効果的な防御法を学ぼう
これからのWebセキュリティ フロントエンド編 #seccamp
安全なPHPアプリケーションの作り方2014
Web Componentsのアクセシビリティ
セキュアなソフトウェアアーキテクチャー
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
Career - design, adaption and diversity - for EMC I&D event
安全なWebアプリケーションの作り方2018
Ad

Viewers also liked (10)

PDF
利用者数倍増! 観光協会サイト「ツアーガイドひかり」を引き継ぎ、活性化するまでの技術とプロセス
PDF
ECサイトをWooCommerceで始めよう
PPTX
コンテンツ戦国時代をどう生き抜く?成果につながるコンテンツマーケティングの基本[SEO][オウンドメディア]
PDF
WordCamp Tokyo 2017 へようこそ
PPTX
20170916ブログを強力な武器としてビジネスにインストールすることで独立を成功させた話
PDF
WordCamp Tokyo 2017 ランチセッション「WordPress を使い始めたら 感謝を伝えよう」
PDF
なぜ人は怪しい壺を欲しくなってしまうのか WordCamp Tokyo 2017Ver
PDF
大規模案件の苦悩から生まれた
柔軟なカスタムフィールド設計
PPTX
Think Before You Submit Themes on WordPress dot Org
PDF
Create LED lightened Wapuu (LEDパネルで光るわぷーを)
利用者数倍増! 観光協会サイト「ツアーガイドひかり」を引き継ぎ、活性化するまでの技術とプロセス
ECサイトをWooCommerceで始めよう
コンテンツ戦国時代をどう生き抜く?成果につながるコンテンツマーケティングの基本[SEO][オウンドメディア]
WordCamp Tokyo 2017 へようこそ
20170916ブログを強力な武器としてビジネスにインストールすることで独立を成功させた話
WordCamp Tokyo 2017 ランチセッション「WordPress を使い始めたら 感謝を伝えよう」
なぜ人は怪しい壺を欲しくなってしまうのか WordCamp Tokyo 2017Ver
大規模案件の苦悩から生まれた
柔軟なカスタムフィールド設計
Think Before You Submit Themes on WordPress dot Org
Create LED lightened Wapuu (LEDパネルで光るわぷーを)
Ad

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

PPTX
Webサイトをめぐるセキュリティ状況と効果的な防御方法(WordPress編)
PPTX
デバッガでWordPress本体やプラグインの脆弱性を追いかけてみよう
ODP
ライブコーディングとデモで理解するWebセキュリティの基礎
PDF
2017年のセキュリティ 傾向と対策講座
PPTX
WordPressとリスク管理 at 第42回 WordBench大阪
PDF
PHPでセキュリティを真面目に考える
PDF
WordBench YAMAGUCHI at Ube
PDF
Webアプリケーションのセキュリティ
PDF
実務に役立つツールとサービスのお話
 
PPTX
Wasbook読書会4章1,2節
PPTX
若手エンジニアのためのセキュリティ講座
PDF
ノンプログラマーのためのWordPressプラグイン作成超入門 | Mignon Style
PDF
ソースで学ぶ脆弱性診断 - SmartTechGeeks #2
PDF
web屋が教えるWordPressのセキュリティー対策
PDF
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
PPTX
第9回勉強会 Webセキュリティー
PPTX
Security Learning Vol2 話題の脆弱性をコードで紐解く!
PDF
Word benchfukuoka
PDF
ノンプログラマーのためのWordPressプラグイン開発超入門v1.0
PDF
WordPress を使いこなそう
Webサイトをめぐるセキュリティ状況と効果的な防御方法(WordPress編)
デバッガでWordPress本体やプラグインの脆弱性を追いかけてみよう
ライブコーディングとデモで理解するWebセキュリティの基礎
2017年のセキュリティ 傾向と対策講座
WordPressとリスク管理 at 第42回 WordBench大阪
PHPでセキュリティを真面目に考える
WordBench YAMAGUCHI at Ube
Webアプリケーションのセキュリティ
実務に役立つツールとサービスのお話
 
Wasbook読書会4章1,2節
若手エンジニアのためのセキュリティ講座
ノンプログラマーのためのWordPressプラグイン作成超入門 | Mignon Style
ソースで学ぶ脆弱性診断 - SmartTechGeeks #2
web屋が教えるWordPressのセキュリティー対策
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
第9回勉強会 Webセキュリティー
Security Learning Vol2 話題の脆弱性をコードで紐解く!
Word benchfukuoka
ノンプログラマーのためのWordPressプラグイン開発超入門v1.0
WordPress を使いこなそう

More from JPCERT Coordination Center (20)

PDF
いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
PDF
脆弱性情報はこうしてやってくる
PPTX
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性
PDF
Case Studies and Lessons Learned from SSL/TLS Certificate Verification Vulner...
PDF
ソフトウェアセキュリティ保証成熟度モデル
PDF
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
PDF
Android Secure Coding
PDF
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
PDF
Apache Axis2におけるXML署名検証不備
PDF
Apache Tomcat における クロスサイトリクエストフォージェリ (CSRF) 保護メカニズム回避の脆弱性
PDF
Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性
PDF
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
PDF
Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)
PDF
JBoss Application Server におけるディレクトリトラバーサルの脆弱性
PDF
MySQL Connector/J における SQL インジェクションの脆弱性
PDF
Blojsom におけるクロスサイトスクリプティングの脆弱性
PDF
Apache Struts2 における任意の Java メソッド実行の脆弱性
PDF
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
PDF
Javaセキュアコーディングセミナー東京第2回演習の解説
PDF
Javaセキュアコーディングセミナー東京第4回演習の解説
いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
脆弱性情報はこうしてやってくる
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性
Case Studies and Lessons Learned from SSL/TLS Certificate Verification Vulner...
ソフトウェアセキュリティ保証成熟度モデル
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
Android Secure Coding
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
Apache Axis2におけるXML署名検証不備
Apache Tomcat における クロスサイトリクエストフォージェリ (CSRF) 保護メカニズム回避の脆弱性
Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)
JBoss Application Server におけるディレクトリトラバーサルの脆弱性
MySQL Connector/J における SQL インジェクションの脆弱性
Blojsom におけるクロスサイトスクリプティングの脆弱性
Apache Struts2 における任意の Java メソッド実行の脆弱性
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
Javaセキュアコーディングセミナー東京第2回演習の解説
Javaセキュアコーディングセミナー東京第4回演習の解説

安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (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 のライセンスを許諾されています
  • 12. Copyright ©2017 JPCERT/CC All rights reserved. プラグイン開発者の方へ… 11
  • 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
  • 19. Copyright ©2017 JPCERT/CC All rights reserved.18 プラグイン開発者も もっと解析ツール活用し ていいんじゃないの? てなわけでちょっと検索してみると 例えばこんなのありましたよ。
  • 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
  • 22. Copyright ©2017 JPCERT/CC All rights reserved. サイト運営者の方へ… 21
  • 23. Copyright ©2017 JPCERT/CC All rights reserved. プラグイン利用に関する運営者側の問題 1. 古いバージョンのプラグインの利用 2. 更新が止まっているプラグインの利用 22
  • 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
  • 32. Copyright ©2017 JPCERT/CC All rights reserved.31 ご静聴ありがとうございました
  • 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/