Slide 1

Slide 1 text

WordPress
 セキュリティガイド
 〜運用可能なセキュリティを始めるために〜
 Yoshinori Matsumoto


Slide 2

Slide 2 text

自己紹介
 松本 悦宜(まつもと よしのり)
 神戸→Capy株式会社 / CSIRTトレーニングセンタ
 セキュリティ診断、脆弱性情報分析、サービス開発など 
 共著
 WordPressプロフェッショナル養成読本
 インターネット白書2015
 講演発表など
 WordCamp Kansai 2015, 2016 Black hat 2016 Arsenal, OWASP AppSec APAC
 IPAセキュリティキャンプ講師


Slide 3

Slide 3 text

Is WordPress Danger?
 2
 現場でこんなことありませんか 元ネタ: https://twitter.com/tome_ura/status/1414796451054383107 ※ ネタのために一部変えています

Slide 4

Slide 4 text

個人的な見解
 
 ✗ WordPress 危ないから使わない ✗
 
 CMSを変えても問題は解決しない
 
 👌 WordPress を安全に使用する
 
 できれば面倒くさくない
 運用可能なセキュリティ対策
 3


Slide 5

Slide 5 text

(参考)Drupalの事例
 4
 Drupal は危ないという考えも NG どのCMSでも脆弱性がある 脆弱性の対応は必要 (ただし楽にすることは可能?) Drupalに脆弱性、アップデート公開直後から攻撃横行 早急に更新を https://www.itmedia.co.jp/enterprise/articles/1902/28/news077.html

Slide 6

Slide 6 text

(参考)ラッキービジターの事例
 5
 改ざんされたWordPress上に置かれたファイル 
 ラッキービジター
 Windows偽ウィルス警告に設置 
 アクセスした第三者への影響 


Slide 7

Slide 7 text

• WordPressのログインを守る • 脆弱性情報を確認する • プラグインとテーマを選ぶ • WordPressの関数を使う セキュリティ対策
 管理者 開発者向け 管理者 / 編集者 / 投稿者 / 寄稿者 / 購読者 WordPressを安全に使う方法! できれば楽なやつ 全ユーザ +α 事故がおこったら

Slide 8

Slide 8 text

WordPressのログインを守る
 7


Slide 9

Slide 9 text

XML RPC wp-login.php WordPressのログインを守る
 ここのログイン機能が狙われやすい

Slide 10

Slide 10 text

ガチガチ デフォルト wp-login.php等のアクセス制限(XMLRPCも) 2要素認証、アカウントロック パスワードポリシーの確認 ユーザはどう使うかを考えながら設定する IPアドレスが固定可能か? セキュリティへの”負荷”(面倒事)をお願いできるか? 運営者への負担はどれくらい許容できるか? ログイン画面の設計例


Slide 11

Slide 11 text

パスワードポリシーについて
 10
 ● パスワードポリシーを強制することはできない (ユーザが多い環境では注意が必要) ● アカウント名も推測されている ● ?author=1でアカウントが推測 →ここを変更するのは面倒くさい 但しパスワードにアカウント名を入れないことも重要 「パスワードを強固なものにする」とは? パスワードポリシー ● 8文字以上 ● 大文字小文字記号含める ● 他のサービスで使い回さない WordPressで注意しておいたほうがいいこと

Slide 12

Slide 12 text

サイトの保護 ホワイトリスト WordPress.com の SSO を利用 JETPACKで解決?


Slide 13

Slide 13 text

WooCommerce
 12
 顧客向けのアカウント管理はWordPressの「Customer」 権限(WC独自)として作成される wp-login.php経由でもログインできるが 管理画面(wp-admin以下)にはアクセスできない • WordPressのログインフォームと同じ強度 • 通常ログインと違い「nonce」はついているが、ワンタイムではないの でブルートフォース対策には微妙 • ログイン保護系のプラグインはそのまま使える (Login LockDown, Crazybone などでは検知できた)

Slide 14

Slide 14 text

ログイン大丈夫? 1/2
 13
 レンタルサーバの場合 他サイト 他サイト My WordPress あなた FTPサーバ 共用サーバ FTPアカウント WPアカウント コンパネ アカウント サーバ 契約情報 ホスティング会社の二要素認証を有効にする それぞれパスワードを使いまわさない FTPクライアントは最新版を使う なるべくFTPは使わない コンパネ

Slide 15

Slide 15 text

ログイン大丈夫? 2/2
 14
 VPS/クラウドサービスの場合 あなた VPS WPアカウント コンパネ アカウント サーバ 契約情報 ホスティング会社の二要素認証を有効にする サーバのSSHログインは公開鍵認証 (パスワード無効)にする セキュリティグループなども設定 コンパネ WordPress SSH サーバアカウント

Slide 16

Slide 16 text

(参考)ブラックリスト
 15
 Q. 過去に wp-login.php にアクセスがあったIPアドレスを ブロックしているが効果はあるのか? アクセスログ Attack IP .htaccessなど ログイン画面に広くアクセスしているIPはその都度変更されるため、 IPアドレスのブラックリストを管理するのは難しい。 また、現状海外のIPアドレス帯域に多い傾向はあるが、 今後国内IPアドレスでのスキャンも考えられるため、 国ごとのアクセス制限を過信しないように注意が必要。

Slide 17

Slide 17 text

(参考)Basic認証
 16
 Q. ログイン画面にBasic認証いれるべき? 入れてもいいけど、面倒にしてまでのメリットはないかも... (特に平文通信を行っているサイトは危険) WPの機能でカバーできるのでメリットを享受できない デメリットは解決していない https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/003.html

Slide 18

Slide 18 text

脆弱性情報を確認する
 17


Slide 19

Slide 19 text

更新をこまめに
 ダッシュボードにある更新情報は要確認 • 本体 • テーマ • プラグイン

Slide 20

Slide 20 text

脆弱性情報を確認する
 本体 テーマ プラグイン オートアップデートの対象 メジャーアップデートは管理画面から オートアップデートの対象外 管理画面から オートアップデートの対象外 管理画面から

Slide 21

Slide 21 text

オートアップデートを使う
 20
 WordPress 3.7 から導入 デフォルトで有効 マイナーアップデート(セキュリティアップデート)のみ対象 無効にすることも可能 よっぽどの理由がない限り無効にしない 5.7 5.7.3 5.8 5.8.1 2021/3 2021/9 2021/9 2021/9 オートアップデート 手動 アップデート オートアップデート 原則的にサポートは最新版であるが、 セキュリティパッチが出ることもある

Slide 22

Slide 22 text

ケーススタディ REST API の脆弱性
 21
 https://www.asahi.com/articles/ASK2B3HS6K2BULOB008.html WordPress の脆弱性対策について https://www.ipa.go.jp/security/ciadr/vul/20170206-wordpress.html 本体 影響受けるバージョン 4.7.0, 4.7.1 (4.6系もしくはそれ以下は 対象外) 修正済みのバージョン 4.7.2 オートアップデート対象

Slide 23

Slide 23 text

脆弱性情報
 22
 公的機関 JPCERT/CC 注意喚起 http://www.jpcert.or.jp/at/ JVN https://jvn.jp/ ホスティング会社 注意喚起やメール このあたりに出現する 情報には要注意!

Slide 24

Slide 24 text

脆弱性情報
 23
 むずかしい話よーわからんという方のために • 認証なし(遠隔の、第三者による〜) • 外部から(リモートから) • コード実行(RCE : Remote Code Execution) などが揃うと要注意 こちらの項目で攻撃が簡単かどうかなどを確認する またオートアップデートで対応できているかどうか

Slide 25

Slide 25 text

サーバの設定
 24
 • PHPのバージョンが古すぎないか → そもそもWordPressも動かなくなる • Webサーバ(Apache/Nginx)のバージョンが古すぎないか → yum update ! • ファイアウォール / iptables / セキュリティグループ → 使用していないサービスが起動したままになっていないか • ログローテーション • SSL化 → パスワード・個人情報を扱う場面はあったほうがいい。SEO的にも。 よくわからない、面倒くさいという人は レンタルサーバもしくはWordPress.comを利用しましょう

Slide 26

Slide 26 text

プラグインとテーマを選ぶ
 25


Slide 27

Slide 27 text

脆弱性のあるプラグイン
 Yuzo Related Posts Zero-Day Vulnerability Exploited in the Wild https://www.wordfence.com/blog/2019/04/yuzo-related-posts-zero-day-vulnerability-exploited-in-the-wild/ 脆弱性を悪用され スクリプトを埋め込まれる 閲覧者が実行すると 詐欺サイトに誘導される その後プラグインは削除される 開発者に通知はいかない!?

Slide 28

Slide 28 text

Duplicatorプラグイン
 27
 脆弱性を悪用され 任意コードが実行される アップデートにて 脆弱性対応可能 • サイト改ざん • バックドア埋め込み • ファイル削除など • フィッシングサイト化 • 偽サイトへの誘導 なんでもできる Duplicator Update Patches Remote Code Execution Flaw https://www.wordfence.com/blog/2018/09/duplicator-update-patches-remote-code-execution-flaw/

Slide 29

Slide 29 text

WebShell
 28
 WordPressの事故対応でよく見る事例 WebShellというツールをサーバ内に置かれる これをキッカケにサーバでの操作を行われる

Slide 30

Slide 30 text

プラグインの選び方
 29
 修正やメンテナンスがよく行われているものを選ぶ 長期間放置されているものは要注意 脆弱性の攻撃方法が広まっている可能性もあり プラグインやテーマのページで このような表記が出ると要注意

Slide 31

Slide 31 text

(参考)バックアップ
 30
 バックアップは大事 WordPressの標準的なログ環境だけでは、 有事のときに被害状況を把握することが難しい (原因を特定したうえで) 平常時に戻してしまう方が早いこともある ・ソースファイル ・DB (Dumpファイル) のバックアップがあれば なんとかなる プラグインを活用するのもOK 脆弱性とライセンスには気をつけて

Slide 32

Slide 32 text

WordPressの関数を使う
 31


Slide 33

Slide 33 text

SQLインジェクション XSS(クロス・サイト・スクリプティング) データベースへの攻撃 データベースへの漏えいや書き換えなど 第三者による JavaScript の実行 サイト訪問者への不正サイトへの誘導や、 マルウェアダウンロードなど WordPressの関数を使う


Slide 34

Slide 34 text

WordPressが提供する関数を用いる $wpdb->prepare プレースホルダーを使ったクエリの保護 wp_kses esc_html / esc_attr 第三者によるJavaScriptの実行防止 How to Prevent File Upload Vulnerabilities https://www.wordfence.com/learn/how-to-prevent-file-upload-vulnerabilities/ current_user_can('upload_files') 現在のユーザが権限をもつか。 例ではアップロード権限をもつかどうか wp_check_filetype ファイルタイプをチェックする MINEタイプを含めてチェックする必要がある

Slide 35

Slide 35 text

事故現場でよくみられるパターン
 ファイルアップロードを自前につくる
 →アップロードの認証をミスる
 
 文字連結してSQL文を書く
 →パラメータの処理に不具合があって脆弱性を作り込む可能性 が
 
 CKEditorを置く
 →置き方によっては注意が必要
 34


Slide 36

Slide 36 text

事故はおこるさ
 35


Slide 37

Slide 37 text

あんまり考えたくないけど
 36


Slide 38

Slide 38 text

WordPressサイトが事故るといくらかかる?
 WordPressサイトを構築するといくらかかる? 見積り勉強会で価格を出してみた https://toyao.net/wp/wordbench20140114/

Slide 39

Slide 39 text

想定サイト
 WordPressサイトを構築するといくらかかる? 見積り勉強会で価格を出してみた https://toyao.net/wp/wordbench20140114/

Slide 40

Slide 40 text

想定サイト
 39
 WordPressサイトを構築するといくらかかる? 見積り勉強会で価格を出してみた https://toyao.net/wp/wordbench20140114/ 488,355円

Slide 41

Slide 41 text

このサイトが事故ったら?
 40
 とホスティング会社から連絡を受けた そのためサイトは停止中 サイト自身のビジネスインパクトは低いため 停止自体に大きな影響はないが、原因や被害状況を確認後、 安全を確認したうえで、なるべく早めに再開させたい Q.セキュリティベンダの調査費用はいくらいでしょう 「神戸みなと歯科」のサイトにアクセスすると 不正なサイトにリダイレクトされる 想定事案

Slide 42

Slide 42 text

たぶんこれくらい?
 41
 分類 内容 価格 初期調査 ・アクセスサーバログ調査 ・ファイルスキャン  (不正なファイルがないか) ・個人情報漏洩リスク判定 \250,000 セキュリティ診断 ・セキュリティ診断 (ツール診断、本診断および再診断) \150,000 オプション ・オンサイト報告 \50,000 期間:1週間程度(診断を除く) 納品物:調査報告書 作り直すのと かわらん><

Slide 43

Slide 43 text

事故対応は結構高い
 42
 ドメインとかと同じで最後まで管理することを目的とする (リアルな話だと)保守サービスをケチらない 管理できていないウェブサイトは閉鎖の検討を https://www.ipa.go.jp/security/ciadr/vul/20140619-oldcms.html • お客様、関連企業、監督官庁への説明 • WAFなどのセキュリティ製品との新規契約 • 弁護士費用 • 再構築費用、業者再選定 検討項目 実施項目が...

Slide 44

Slide 44 text

まとめ
 43


Slide 45

Slide 45 text

• WordPressのログインを守る • 脆弱性情報を確認する • プラグインとテーマを選ぶ • WordPressの関数を使う • セキュリティわぷーほしくない?(誰か! WordPressを安全に使う方法! できれば楽なやつ Good Luck ✈


Slide 46

Slide 46 text

その他
 
 
 
 
 
 松本 悦宜 Yoshinori Matsumoto
 @ym405nm
 matsumoto@capy.me
 45