https://www.meetup.com/ja-JP/Kansai-WordPress-Meetup/events/281036210/
WordPress セキュリティガイド 〜運用可能なセキュリティを始めるために〜 Yoshinori Matsumoto
View Slide
自己紹介 松本 悦宜(まつもと よしのり) 神戸→Capy株式会社 / CSIRTトレーニングセンタ セキュリティ診断、脆弱性情報分析、サービス開発など 共著 WordPressプロフェッショナル養成読本 インターネット白書2015 講演発表など WordCamp Kansai 2015, 2016Black hat 2016 Arsenal, OWASP AppSec APAC IPAセキュリティキャンプ講師
Is WordPress Danger? 2 現場でこんなことありませんか元ネタ: https://twitter.com/tome_ura/status/1414796451054383107※ ネタのために一部変えています
個人的な見解 ✗ WordPress 危ないから使わない ✗ CMSを変えても問題は解決しない 👌 WordPress を安全に使用する できれば面倒くさくない 運用可能なセキュリティ対策 3
(参考)Drupalの事例 4 Drupal は危ないという考えも NGどのCMSでも脆弱性がある脆弱性の対応は必要(ただし楽にすることは可能?)Drupalに脆弱性、アップデート公開直後から攻撃横行 早急に更新をhttps://www.itmedia.co.jp/enterprise/articles/1902/28/news077.html
(参考)ラッキービジターの事例 5 改ざんされたWordPress上に置かれたファイル ラッキービジター Windows偽ウィルス警告に設置 アクセスした第三者への影響
• WordPressのログインを守る• 脆弱性情報を確認する• プラグインとテーマを選ぶ• WordPressの関数を使うセキュリティ対策 管理者開発者向け管理者 / 編集者 / 投稿者 / 寄稿者 / 購読者WordPressを安全に使う方法! できれば楽なやつ全ユーザ+α 事故がおこったら
WordPressのログインを守る 7
XML RPCwp-login.phpWordPressのログインを守る ここのログイン機能が狙われやすい
ガチガチデフォルトwp-login.php等のアクセス制限(XMLRPCも)2要素認証、アカウントロックパスワードポリシーの確認ユーザはどう使うかを考えながら設定するIPアドレスが固定可能か?セキュリティへの”負荷”(面倒事)をお願いできるか?運営者への負担はどれくらい許容できるか?ログイン画面の設計例
パスワードポリシーについて 10 ● パスワードポリシーを強制することはできない(ユーザが多い環境では注意が必要)● アカウント名も推測されている● ?author=1でアカウントが推測→ここを変更するのは面倒くさい但しパスワードにアカウント名を入れないことも重要「パスワードを強固なものにする」とは?パスワードポリシー● 8文字以上● 大文字小文字記号含める● 他のサービスで使い回さないWordPressで注意しておいたほうがいいこと
サイトの保護 ホワイトリストWordPress.com の SSO を利用JETPACKで解決?
WooCommerce 12 顧客向けのアカウント管理はWordPressの「Customer」権限(WC独自)として作成されるwp-login.php経由でもログインできるが管理画面(wp-admin以下)にはアクセスできない• WordPressのログインフォームと同じ強度• 通常ログインと違い「nonce」はついているが、ワンタイムではないのでブルートフォース対策には微妙• ログイン保護系のプラグインはそのまま使える(Login LockDown, Crazybone などでは検知できた)
ログイン大丈夫? 1/2 13 レンタルサーバの場合他サイト 他サイトMyWordPressあなたFTPサーバ共用サーバFTPアカウントWPアカウントコンパネアカウントサーバ契約情報ホスティング会社の二要素認証を有効にするそれぞれパスワードを使いまわさないFTPクライアントは最新版を使うなるべくFTPは使わないコンパネ
ログイン大丈夫? 2/2 14 VPS/クラウドサービスの場合あなたVPSWPアカウントコンパネアカウントサーバ契約情報ホスティング会社の二要素認証を有効にするサーバのSSHログインは公開鍵認証(パスワード無効)にするセキュリティグループなども設定コンパネWordPressSSHサーバアカウント
(参考)ブラックリスト 15 Q. 過去に wp-login.php にアクセスがあったIPアドレスをブロックしているが効果はあるのか?アクセスログAttack IP.htaccessなどログイン画面に広くアクセスしているIPはその都度変更されるため、IPアドレスのブラックリストを管理するのは難しい。また、現状海外のIPアドレス帯域に多い傾向はあるが、今後国内IPアドレスでのスキャンも考えられるため、国ごとのアクセス制限を過信しないように注意が必要。
(参考)Basic認証 16 Q. ログイン画面にBasic認証いれるべき?入れてもいいけど、面倒にしてまでのメリットはないかも...(特に平文通信を行っているサイトは危険)WPの機能でカバーできるのでメリットを享受できないデメリットは解決していないhttps://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/003.html
脆弱性情報を確認する 17
更新をこまめに ダッシュボードにある更新情報は要確認• 本体• テーマ• プラグイン
脆弱性情報を確認する 本体テーマプラグインオートアップデートの対象メジャーアップデートは管理画面からオートアップデートの対象外管理画面からオートアップデートの対象外管理画面から
オートアップデートを使う 20 WordPress 3.7 から導入デフォルトで有効マイナーアップデート(セキュリティアップデート)のみ対象無効にすることも可能よっぽどの理由がない限り無効にしない5.7 5.7.35.8 5.8.12021/3 2021/92021/9 2021/9オートアップデート手動アップデートオートアップデート原則的にサポートは最新版であるが、セキュリティパッチが出ることもある
ケーススタディ REST API の脆弱性 21 https://www.asahi.com/articles/ASK2B3HS6K2BULOB008.htmlWordPress の脆弱性対策についてhttps://www.ipa.go.jp/security/ciadr/vul/20170206-wordpress.html本体影響受けるバージョン4.7.0, 4.7.1(4.6系もしくはそれ以下は対象外)修正済みのバージョン4.7.2オートアップデート対象
脆弱性情報 22 公的機関JPCERT/CC 注意喚起http://www.jpcert.or.jp/at/JVNhttps://jvn.jp/ホスティング会社注意喚起やメールこのあたりに出現する情報には要注意!
脆弱性情報 23 むずかしい話よーわからんという方のために• 認証なし(遠隔の、第三者による〜)• 外部から(リモートから)• コード実行(RCE : Remote Code Execution)などが揃うと要注意こちらの項目で攻撃が簡単かどうかなどを確認するまたオートアップデートで対応できているかどうか
サーバの設定 24 • PHPのバージョンが古すぎないか→ そもそもWordPressも動かなくなる• Webサーバ(Apache/Nginx)のバージョンが古すぎないか→ yum update !• ファイアウォール / iptables / セキュリティグループ→ 使用していないサービスが起動したままになっていないか• ログローテーション• SSL化→ パスワード・個人情報を扱う場面はあったほうがいい。SEO的にも。よくわからない、面倒くさいという人はレンタルサーバもしくはWordPress.comを利用しましょう
プラグインとテーマを選ぶ 25
脆弱性のあるプラグイン Yuzo Related Posts Zero-Day Vulnerability Exploited in the Wildhttps://www.wordfence.com/blog/2019/04/yuzo-related-posts-zero-day-vulnerability-exploited-in-the-wild/脆弱性を悪用されスクリプトを埋め込まれる閲覧者が実行すると詐欺サイトに誘導されるその後プラグインは削除される開発者に通知はいかない!?
Duplicatorプラグイン 27 脆弱性を悪用され任意コードが実行されるアップデートにて脆弱性対応可能• サイト改ざん• バックドア埋め込み• ファイル削除など• フィッシングサイト化• 偽サイトへの誘導なんでもできるDuplicator Update Patches Remote Code Execution Flawhttps://www.wordfence.com/blog/2018/09/duplicator-update-patches-remote-code-execution-flaw/
WebShell 28 WordPressの事故対応でよく見る事例WebShellというツールをサーバ内に置かれるこれをキッカケにサーバでの操作を行われる
プラグインの選び方 29 修正やメンテナンスがよく行われているものを選ぶ長期間放置されているものは要注意脆弱性の攻撃方法が広まっている可能性もありプラグインやテーマのページでこのような表記が出ると要注意
(参考)バックアップ 30 バックアップは大事WordPressの標準的なログ環境だけでは、有事のときに被害状況を把握することが難しい(原因を特定したうえで)平常時に戻してしまう方が早いこともある・ソースファイル・DB (Dumpファイル)のバックアップがあればなんとかなるプラグインを活用するのもOK脆弱性とライセンスには気をつけて
WordPressの関数を使う 31
SQLインジェクションXSS(クロス・サイト・スクリプティング)データベースへの攻撃データベースへの漏えいや書き換えなど第三者による JavaScript の実行サイト訪問者への不正サイトへの誘導や、マルウェアダウンロードなどWordPressの関数を使う
WordPressが提供する関数を用いる$wpdb->prepare プレースホルダーを使ったクエリの保護wp_ksesesc_html / esc_attr第三者によるJavaScriptの実行防止How to Prevent File Upload Vulnerabilitieshttps://www.wordfence.com/learn/how-to-prevent-file-upload-vulnerabilities/current_user_can('upload_files')現在のユーザが権限をもつか。例ではアップロード権限をもつかどうかwp_check_filetypeファイルタイプをチェックするMINEタイプを含めてチェックする必要がある
事故現場でよくみられるパターン ファイルアップロードを自前につくる →アップロードの認証をミスる 文字連結してSQL文を書く →パラメータの処理に不具合があって脆弱性を作り込む可能性が CKEditorを置く →置き方によっては注意が必要 34
事故はおこるさ 35
あんまり考えたくないけど 36
WordPressサイトが事故るといくらかかる? WordPressサイトを構築するといくらかかる? 見積り勉強会で価格を出してみたhttps://toyao.net/wp/wordbench20140114/
想定サイト WordPressサイトを構築するといくらかかる? 見積り勉強会で価格を出してみたhttps://toyao.net/wp/wordbench20140114/
想定サイト 39 WordPressサイトを構築するといくらかかる? 見積り勉強会で価格を出してみたhttps://toyao.net/wp/wordbench20140114/488,355円
このサイトが事故ったら? 40 とホスティング会社から連絡を受けたそのためサイトは停止中サイト自身のビジネスインパクトは低いため停止自体に大きな影響はないが、原因や被害状況を確認後、安全を確認したうえで、なるべく早めに再開させたいQ.セキュリティベンダの調査費用はいくらいでしょう「神戸みなと歯科」のサイトにアクセスすると不正なサイトにリダイレクトされる想定事案
たぶんこれくらい? 41 分類 内容 価格初期調査・アクセスサーバログ調査・ファイルスキャン (不正なファイルがないか)・個人情報漏洩リスク判定\250,000セキュリティ診断・セキュリティ診断(ツール診断、本診断および再診断)\150,000オプション ・オンサイト報告 \50,000期間:1週間程度(診断を除く)納品物:調査報告書作り直すのとかわらん><
事故対応は結構高い 42 ドメインとかと同じで最後まで管理することを目的とする(リアルな話だと)保守サービスをケチらない管理できていないウェブサイトは閉鎖の検討をhttps://www.ipa.go.jp/security/ciadr/vul/20140619-oldcms.html• お客様、関連企業、監督官庁への説明• WAFなどのセキュリティ製品との新規契約• 弁護士費用• 再構築費用、業者再選定検討項目実施項目が...
まとめ 43
• WordPressのログインを守る• 脆弱性情報を確認する• プラグインとテーマを選ぶ• WordPressの関数を使う• セキュリティわぷーほしくない?(誰か!WordPressを安全に使う方法! できれば楽なやつGood Luck ✈
その他 松本 悦宜 Yoshinori Matsumoto @ym405nm [email protected] 45