Upgrade to Pro — share decks privately, control downloads, hide ads and more …

WordPress セキュリティガイド #wpmeetupkyoto / WP Security Guide

yoshinori matsumoto
November 01, 2021
3.2k

WordPress セキュリティガイド #wpmeetupkyoto / WP Security Guide

yoshinori matsumoto

November 01, 2021
Tweet

Transcript

  1. WordPress

    セキュリティガイド

    〜運用可能なセキュリティを始めるために〜

    Yoshinori Matsumoto


    View full-size slide

  2. 自己紹介

    松本 悦宜(まつもと よしのり)

    神戸→Capy株式会社 / CSIRTトレーニングセンタ

    セキュリティ診断、脆弱性情報分析、サービス開発など

    共著

    WordPressプロフェッショナル養成読本

    インターネット白書2015

    講演発表など

    WordCamp Kansai 2015, 2016
    Black hat 2016 Arsenal, OWASP AppSec APAC

    IPAセキュリティキャンプ講師


    View full-size slide

  3. Is WordPress Danger?

    2

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

    View full-size slide

  4. 個人的な見解


    ✗ WordPress 危ないから使わない ✗


    CMSを変えても問題は解決しない


    👌 WordPress を安全に使用する


    できれば面倒くさくない

    運用可能なセキュリティ対策

    3


    View full-size slide

  5. (参考)Drupalの事例

    4

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

    View full-size slide

  6. (参考)ラッキービジターの事例

    5

    改ざんされたWordPress上に置かれたファイル 

    ラッキービジター

    Windows偽ウィルス警告に設置 

    アクセスした第三者への影響 


    View full-size slide

  7. • WordPressのログインを守る
    • 脆弱性情報を確認する
    • プラグインとテーマを選ぶ
    • WordPressの関数を使う
    セキュリティ対策

    管理者
    開発者向け
    管理者 / 編集者 / 投稿者 / 寄稿者 / 購読者
    WordPressを安全に使う方法! できれば楽なやつ
    全ユーザ
    +α 事故がおこったら

    View full-size slide

  8. WordPressのログインを守る

    7


    View full-size slide

  9. XML RPC
    wp-login.php
    WordPressのログインを守る

    ここのログイン機能が狙われやすい

    View full-size slide

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


    View full-size slide

  11. パスワードポリシーについて

    10

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

    View full-size slide

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


    View full-size slide

  13. WooCommerce

    12

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

    View full-size slide

  14. ログイン大丈夫? 1/2

    13

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

    View full-size slide

  15. ログイン大丈夫? 2/2

    14

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

    View full-size slide

  16. (参考)ブラックリスト

    15

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

    View full-size slide

  17. (参考)Basic認証

    16

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

    View full-size slide

  18. 脆弱性情報を確認する

    17


    View full-size slide

  19. 更新をこまめに

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

    View full-size slide

  20. 脆弱性情報を確認する

    本体
    テーマ
    プラグイン
    オートアップデートの対象
    メジャーアップデートは管理画面から
    オートアップデートの対象外
    管理画面から
    オートアップデートの対象外
    管理画面から

    View full-size slide

  21. オートアップデートを使う

    20

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

    View full-size slide

  22. ケーススタディ 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
    オートアップデート対象

    View full-size slide

  23. 脆弱性情報

    22

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

    View full-size slide

  24. 脆弱性情報

    23

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

    View full-size slide

  25. サーバの設定

    24

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

    View full-size slide

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

    25


    View full-size slide

  27. 脆弱性のあるプラグイン

    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/
    脆弱性を悪用され
    スクリプトを埋め込まれる
    閲覧者が実行すると
    詐欺サイトに誘導される
    その後プラグインは削除される
    開発者に通知はいかない!?

    View full-size slide

  28. Duplicatorプラグイン

    27

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

    View full-size slide

  29. WebShell

    28

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

    View full-size slide

  30. プラグインの選び方

    29

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

    View full-size slide

  31. (参考)バックアップ

    30

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

    View full-size slide

  32. WordPressの関数を使う

    31


    View full-size slide

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


    View full-size slide

  34. 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タイプを含めてチェックする必要がある

    View full-size slide

  35. 事故現場でよくみられるパターン

    ファイルアップロードを自前につくる

    →アップロードの認証をミスる


    文字連結してSQL文を書く

    →パラメータの処理に不具合があって脆弱性を作り込む可能性
    が


    CKEditorを置く

    →置き方によっては注意が必要

    34


    View full-size slide

  36. 事故はおこるさ

    35


    View full-size slide

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

    36


    View full-size slide

  38. WordPressサイトが事故るといくらかかる?

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

    View full-size slide

  39. 想定サイト

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

    View full-size slide

  40. 想定サイト

    39

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

    View full-size slide

  41. このサイトが事故ったら?

    40

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

    View full-size slide

  42. たぶんこれくらい?

    41

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

    View full-size slide

  43. 事故対応は結構高い

    42

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

    View full-size slide

  44. まとめ

    43


    View full-size slide

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


    View full-size slide

  46. その他






    松本 悦宜 Yoshinori Matsumoto

    @ym405nm

    [email protected]
    45


    View full-size slide