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

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

yoshinori matsumoto
November 01, 2021
3k

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

yoshinori matsumoto

November 01, 2021
Tweet

Transcript

  1. WordPress

    セキュリティガイド

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

    Yoshinori Matsumoto


    View Slide

  2. 自己紹介

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

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

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

    共著

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

    インターネット白書2015

    講演発表など

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

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


    View Slide

  3. Is WordPress Danger?

    2

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

    View Slide

  4. 個人的な見解


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


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


    👌 WordPress を安全に使用する


    できれば面倒くさくない

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

    3


    View Slide

  5. (参考)Drupalの事例

    4

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

    View Slide

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

    5

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

    ラッキービジター

    Windows偽ウィルス警告に設置 

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


    View Slide

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

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

    View Slide

  8. WordPressのログインを守る

    7


    View Slide

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

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

    View Slide

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


    View Slide

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

    10

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

    View Slide

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


    View Slide

  13. WooCommerce

    12

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

    View Slide

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

    13

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

    View Slide

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

    14

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

    View Slide

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

    15

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

    View Slide

  17. (参考)Basic認証

    16

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

    View Slide

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

    17


    View Slide

  19. 更新をこまめに

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

    View Slide

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

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

    View 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 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 Slide

  23. 脆弱性情報

    22

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

    View Slide

  24. 脆弱性情報

    23

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

    View Slide

  25. サーバの設定

    24

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

    View Slide

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

    25


    View 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 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 Slide

  29. WebShell

    28

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

    View Slide

  30. プラグインの選び方

    29

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

    View Slide

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

    30

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

    View Slide

  32. WordPressの関数を使う

    31


    View Slide

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


    View 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 Slide

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

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

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


    文字連結してSQL文を書く

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


    CKEditorを置く

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

    34


    View Slide

  36. 事故はおこるさ

    35


    View Slide

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

    36


    View Slide

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

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

    View Slide

  39. 想定サイト

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

    View Slide

  40. 想定サイト

    39

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

    View Slide

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

    40

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

    View Slide

  42. たぶんこれくらい?

    41

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

    View Slide

  43. 事故対応は結構高い

    42

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

    View Slide

  44. まとめ

    43


    View Slide

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


    View Slide

  46. その他






    松本 悦宜 Yoshinori Matsumoto

    @ym405nm

    [email protected]
    45


    View Slide