マニュアル
製品サイト マイページ

セキュリティ / 高速化

既知の脆弱性・セキュリティ修正・改ざん・怪しいファイルを毎日見張り、二段階認証などで入口をふさぎ、画像をWebPにして表示を速くする

乗っ取りの入口でいちばん多いのは「更新していないプラグイン」です

「Sorabun > セキュリティ / 高速化」は、WordPressが乗っ取られる入口を見張り、ふさぐ画面です(Pro)。あわせて、画像を軽くして記事の表示を速くする設定もここにあります。

WordPressの乗っ取りは、ほとんどが 開発元がすでに直している弱点 を突かれて起こります。修正版が出たあと、更新していないサイトが狙われる、という形です。ところが WordPress の「更新があります」は、ただの機能追加もセキュリティ修正も同じ表示なので、急ぐべき更新が埋もれてしまいます。

この画面は、次のことを 毎日自動で 調べ、急ぐものが見つかったら知らせます。

  • 入っているプラグイン・テーマ・本体に 既知の脆弱性 が無いか
  • 更新があるプラグインに セキュリティ修正 が含まれていないか
  • WordPress本体とプラグインのファイルが 書き換えられていない か、怪しいファイル が置かれていないか

お客様が別途契約する有料サービスやAPIキーは要りません。問い合わせ先は WordPress.org と、Sorabun のライセンスサーバー(既知の脆弱性の照合)です。

1. 既知の脆弱性

入っているプラグイン・テーマ・本体を、公開されている 脆弱性の一覧(Wordfence Intelligence)と照合します。一覧は Sorabun のライセンスサーバーで毎日取り込んでいます。

表示意味
深刻度緊急・重大・中・低(CVSS の点数から)
対応「◯◯ 以上に更新」修正版が出ています。その版まで更新すれば直ります
対応「修正版なし」まだ直っていません。更新では直せないので、使っていなければ停止・削除を検討してください
  • 照合のために送るのは プラグイン・テーマの名前(slug)だけ です。入っている版やサイトの中身は送りません。版の比較はお客様のサイトの中で行います
  • 「緊急」「重大」のもの、「修正版なし」のものは、見つかった日に通知します
  • ライセンスの認証が必要です
出典

脆弱性の情報は Wordfence Intelligence のものです(個人・商用とも無料で、利用条件のもとで配布が認められています)。画面の下に、出典と、表示している記録の著作権表示・ライセンス(Wordfence/Defiant、CVE の MITRE など)を出しています。Wordfence の API キーは Sorabun のサーバーだけが持ち、お客様のサイトから Wordfence へは問い合わせません。

2. セキュリティ修正を含む更新

更新があるプラグインについて、いま入っている版から最新版までの変更履歴 を WordPress.org から読み、セキュリティの修正が書かれていないかを確かめます。結果は急ぐ順に並びます。

判定意味
急いで更新変更履歴に「脆弱性」「XSS」「SQLインジェクション」「CVE-」など、セキュリティの修正がはっきり書かれています。できるだけ早く更新してください
安全性の修正らしきもの「入力の無害化(sanitize)」「権限の確認」など、安全性に関わりそうな修正が書かれています
変更内容を確認できない変更履歴が無い・読めない(テーマ、WordPress.org 以外で配られているプラグインなど)
機能の更新変更履歴にセキュリティの修正は見当たりませんでした

WordPress本体の 同じ系列の小さな更新(6.8.1 → 6.8.2 など)は、ほぼセキュリティと不具合の修正なので「急いで更新」と出します。

「急いで更新」があるあいだは、管理画面のどの画面にも赤い知らせが出ます。更新すれば消えます。

「急いで更新」が無くても、更新はこまめに

開発元が変更履歴に書かないセキュリティ修正は拾えません。「急いで更新」は 少なくともこれは急いで という目安です。ほかの更新も、こまめに当ててください。

セキュリティ修正だけを自動で当てる

「4. 侵入の入口をふさぐ」の 「セキュリティ修正を含む更新だけ、自動で当てる」 をオンにすると、「急いで更新」のものと、既知の脆弱性で修正版が出ているプラグインだけを、WordPress の自動更新(1日2回)で当てます。

WordPress の自動更新は「全部当てる」か「当てない」かの二択ですが、この設定なら 急ぐものだけ を当てられます。ほかのプラグインの自動更新の設定は変えません。当てたものは画面に記録します。

3. 改ざんと怪しいファイル

WordPress本体

WordPress本体のファイル(wp-admin と wp-includes)を、WordPress.org が公開している 正しいファイルの一覧(チェックサム) と突き合わせます。見つけるのは次の3つです。

  • 書き換わっているファイル … 本体のファイルに、不正なコードが足されている
  • 見当たらないファイル … 本体のファイルが消されている
  • 本体のフォルダにある、見覚えのないPHP … 乗っ取りのあとに置かれる「裏口」によく使われる形です

wp-content(テーマ・プラグイン・画像)は、正当な更新で中身が変わるので突き合わせません。

心当たりが無いのに違いが見つかったときは、「ダッシュボード > 更新」の 「バージョン x.x.x を再インストール」 で本体を入れ直すと、公式のファイルに戻ります(記事や設定は消えません)。見覚えのないPHPは入れ直しでは消えないので、サーバーのファイル管理で中身を確かめて削除してください。

開発版では確かめられません

ベータ版などの開発版の WordPress には公式の一覧が無いので、「確かめられません」と出ます。改ざんが見つかったという意味ではありません。

プラグインと怪しいファイル

「ファイルを調べる」 で、次の2つを調べます(毎日自動でも調べます)。

  1. 照合(確実): WordPress.org で配られているプラグインは、版ごとの正しいファイルの一覧が公開されています。入っているファイルと突き合わせ、書き換わったファイル と、元の配布物に無いPHP を見つけます
  2. 手口の検査(目安): テーマ・アップロードフォルダ・有料や自作のプラグインなど、照合できないファイルは、乗っ取りで置かれるファイルによくある書き方(暗号のように隠したコードの実行、外から送られた値の実行、アップロードフォルダのPHP、画像のふりをしたPHP など)を探します

公式のファイルと一致したものは手口の検査をしないので、正規のプラグインを「怪しい」と言うことはほとんどありません。

見つかったものは 「AIに説明してもらう」 で、そのコードが何をしているか・不正らしいか・どうすればよいかを、AIが平易な言葉で説明します。AIに送るのは、見つかった行の前後25行だけです。

度合い意味
高いまず間違いなく不正な書き方です(見つかった日に通知します)
目安不正でよく見る書き方ですが、正規のコードでも使われます。中身を確かめてください
専門企業の検査の代わりではありません

手口の検査は、専門企業が持っている大量の見本(シグネチャ)ほどの網羅はありません。「見つからなかった=安全」とは限らないので、乗っ取りが疑われるときは専門の業者に相談してください。

4. 侵入の入口をふさぐ

どれも 既定はオフ です。サイトによっては必要な機能を止めるので、説明を読んでからオンにしてください。

設定何を防ぐか気をつけること
セキュリティ修正の自動更新急いで当てるべき更新を、人の手を待たずに当てます更新で表示が崩れることがまれにあります。当てたものは画面に記録します
二段階認証を管理者に必須にするパスワードが漏れても、スマホが無ければログインできないようにしますオンにすると、未設定の管理者は設定するまでほかの画面を開けません。先に自分の設定を済ませてください
漏洩したパスワード他のサイトから漏れて出回っているパスワードを使わせません。パスワードを決めるときに断り、ログインしたときに漏れていれば変更をすすめます確かめには Have I Been Pwned を使います。パスワードそのものは送らず、暗号化した値の先頭5文字だけを送って手元で照合します
ログインの総当たり同じ接続元から5回続けて失敗したら、15分ログインできなくします。パスワードを機械で試し続ける攻撃を止めます会社などで同じ回線から大勢がログインする場合、誰かの打ち間違いが続くと全員がしばらく入れなくなることがあります
ユーザー名の漏れ「?author=1」でログインIDが分かる仕組みと、REST API・サイトマップのユーザー一覧を、ログインしていない人には出しません著者ページ(/author/名前/)はそのまま表示されます
XML-RPC一度に大量のパスワードを試す攻撃に使われる、古い連携の仕組みを止めますWordPressのスマホアプリ・Jetpack・一部の外部投稿ツールが動かなくなります
アップロードフォルダのPHP画像のふりをしたPHPを置いて開かせる攻撃に備え、アップロードフォルダでPHPを動かしません.htaccess が効くサーバー(Apache・LiteSpeed)で効きます。nginx のサーバーでは、画面に出る1行をサーバーの設定に足してもらってください

ログインを締め出したときは、日時と接続元(末尾を伏せたもの)、試されたユーザー名が画面に残ります。締め出しの判定には、偽ることのできない接続元の情報だけを使います。

ファイアウォール

WordPress の中で、明らかな攻撃のアクセス を止めます。

  • SQLインジェクション(データベースを盗み見る)・サーバーのファイルを覗く・コマンドの実行・PHPの埋め込み・クロスサイトスクリプティング
  • .env・wp-config.php.bak・.git/ のような、設定ファイルや隠しファイルの探索
  • 存在しないページの連発(5分のうちに30回): 脆弱なプラグインを探すロボットを30分締め出します
動かし方内容
使わない既定です
記録だけ止めずに記録します。まずはここで数日様子を見て、正規のアクセスが混ざっていないか確かめてください
止める当てはまったアクセスに「403」を返します

正規の利用者を締め出さないよう、次のようにしています。

  • 記事を書ける人(ログイン中の編集者・管理者)のアクセスは調べません(本文に HTML やコードを書くのは正常なので)
  • パスワードの欄は調べません
  • 存在しないページの連発でも、Google・Bing などの検索エンジンは、逆引きで本物か確かめてから除外 します(名乗りは偽れるので信じません)
  • 「許可する接続元」に書いた IP・範囲は止めません。会社の固定 IP などを書いておくと安心です
できないこと

サーバーが直接返すファイル(実在する画像や、WordPress を通らないファイル)へのアクセスや、大量アクセス(DDoS)は防げません。必要なら Cloudflare などのサービスを併用してください。

国別ブロック(ログイン画面)

「ログインを許す国」 に国の2文字の記号(日本は JP、アメリカは US)をカンマで区切って書くと、ログイン画面と XML-RPC を、その国からしか開けなくなります。管理者のログインが海外から試されることは多いので、日本からしか使わないサイトなら JP だけにしておくと、総当たりのほとんどを入口で断れます。

  • 国が分からなかったとき(問い合わせの失敗など)は通します
  • いまの接続元の国が入っていないと保存しません(保存した瞬間に自分が締め出されないように)
  • 出張先などから入るときは、「許可する接続元」に IP を足すか、国を足してください
  • 国の判定には DB-IP の一覧(IP Geolocation by DB-IP、CC BY 4.0)を使い、毎月更新しています。Cloudflare を通っているサイトでは、Cloudflare の判定を使います

Cloudflare を使っているサイト

Cloudflare を通っているサイトでは、アクセスはすべて Cloudflare の IP から届きます。そのままでは全員が同じ人に見えて、ログインの締め出しで全員が入れなくなるため、アクセスが本当に Cloudflare から来たときだけ、Cloudflare が付ける訪問者の IP を使います(ほかから来た同じ名前の情報は偽れるので信じません)。

二段階認証の設定(各自のプロフィール画面)

二段階認証は、ユーザーごとに 「ユーザー > プロフィール」の「二段階認証」 で設定します。

  1. 「設定する」 を押すと、QRコードが出ます
  2. スマホの認証アプリ(Google Authenticator・Microsoft Authenticator・1Password など)で読み取ります
  3. アプリに出た6桁を入れて 「確かめる」 を押すと有効になり、予備コードが10個 出ます。スマホを失くしたときに1回ずつ使えるので、印刷するかパスワード管理アプリに保存してください

以後のログインでは、パスワードのあとに6桁を聞かれます。6桁は5回まで間違えられ、それを超えるとパスワードからやり直しです。同じ6桁は2度使えません。

  • QRコードは画面の中で作ります(秘密鍵を外部のサービスに送りません)。秘密鍵は暗号化して保存し、予備コードは元に戻せない形で保存します
  • スマホも予備コードも失くした人は、ほかの管理者がその人のプロフィール画面で 「このユーザーの二段階認証を解除する」 を押すと、パスワードだけで入れるようになります
  • XML-RPC は、二段階認証の人はアプリケーションパスワードでしか入れません

パスキー(指紋・顔・PIN でログイン)

プロフィール画面の 「パスキー」 で 「パスキーを追加」 を押すと、いま使っている端末(スマホ・パソコン)の指紋・顔・PIN でログインできるようになります。以後、ログイン画面の 「パスキーでログイン」 を押すだけで、パスワードを入れずにログインできます。

  • サイトには鍵の片割れ(公開鍵)しか置かないので、サイトから漏れても使えません
  • 登録したサイトの名前でしか反応しないので、偽サイトに誘導されても鍵は使われません(フィッシングに強い)
  • 端末を持っていることと指紋・PIN を同時に確かめるので、パスキーでログインしたときは二段階認証の6桁は聞きません
  • 1人10個まで登録できます。端末を替えたら、古いものは一覧から削除してください
  • パスキーは https のサイトで使えます(ブラウザの決まり)

ログインURLの変更・画像認証・ログインの通知

SiteGuard WP Plugin と同じ守りです。「4. 侵入の入口をふさぐ」の表にあります。

設定何を防ぐか気をつけること
ログインURLの変更ログイン画面を https://あなたのサイト/好きな名前 に移します。wp-login.php と、ログインしていないときの /wp-admin/・/login・/admin は「見つかりません」になるので、wp-login.php を狙う機械の総当たりが試しようもなくなります名前は半角の英小文字・数字・-・_ で6文字以上。新しい URL は、変えた人にメールでも送ります。ブックマークしてください。 パスワード付き記事の合言葉・フォームの送信(admin-post.php)・Ajax はそのまま動きます。マルチサイトでは使えません
画像認証ログイン・パスワードの再設定・ユーザー登録で、画像の4文字を入力させます。任意で、ログインしていない人のコメントにも出せます画像はこのサーバーで作るので、外部のサービスは使いません(PHP の GD が要ります)。見間違えやすい 0・O・1・I・L は使いません。小文字・全角で打っても通ります
ログインの通知記事を書ける人(投稿者以上)が、いつもと違う端末(ブラウザか接続元)からログインしたら、本人にメールで知らせます毎回は送りません。オンにした直後の最初のログインは、その端末を覚えるだけです。端末は1人10台まで覚えます
自分が締め出されたときは

サーバーのファイル管理で wp-config.php に define( 'SORABUN_SECURITY_OFF', true ); の1行を足すと、この欄の設定(二段階認証・ログインの締め出し・ログインURLの変更・画像認証など)がすべて止まります。見張りと通知は続きます。入れるようになったら、その1行を消してください。ログインURLを忘れただけなら、define( 'SORABUN_LOGIN_URL_OFF', true ); でログインURLの変更だけを止められます(wp-login.php で入れます)。

5. 画像を軽くして表示を速くする

記事の表示を遅くしているものの大半は画像です。JPEG・PNG を WebP にすると、見た目をほとんど変えずに、大きさが数分の一になります。

「WebPで配る」 をオンにすると、記事の画像を、WebPの複製があればそちらで表示します。

  • 元の画像は書き換えません。 横に WebP の複製(photo.jpg なら photo.jpg.webp)を作り、表示のときにだけ差し替えます
  • オフにすれば、その場で元の画像の配信に戻ります
  • 新しくアップロードした画像は、その場で複製を作ります
  • 前からある画像は 「前からある画像をまとめて軽くする」 で複製を作ります。15枚ずつ進み、進み具合と軽くなった量が画面に出ます
  • WebPにするとかえって大きくなる画像(よく圧縮されたPNGなど)は、複製を作らず元の画像のまま配ります
  • 差し替えるのはこのサイトのアップロードフォルダの画像だけです。外部サイトの画像はそのままです
  • 複製が要らなくなったら 「WebPの複製を消す」 で消せます。元の画像は残ります
AIが作る画像は、はじめから軽く保存しています

アイキャッチや図解など、Sorabun が AI で作る画像は、WebP・最大幅1600px で保存しています。「設定 > 生成の既定値」の 「AIが作った画像を軽くして保存する」 で切り替えられます。動画用のスライドは、動画編集ソフトで読めるよう PNG のままです。

サーバーの画像処理(GD / Imagick)が WebP に対応していないと、複製は作れません。そのときは画面に案内が出るので、サーバー会社に WebP 対応をご確認ください。