
xmlrpc.phpを無効にしてセキュリティを向上させよう
xmlrpc.phpはWordpressを外部システムから操作するために必要な遠隔操作用のファイルです。
今はREST APIに役目を渡しましたが、有効化されたままになっている事が多いです。
xmlrpc.phpはセキュリティ上の脆弱性があるので、.htaccess等で早めに無効化やリダイレクトするべきです。
xmlrpcとは
本記事ではxmlrpc.phpとはそもそも何か、なぜxmlrpc.phpを無効にした方が良いのかについて紹介します。
xmlrpc.phpは以前まで、Wordpressシステムを他のアプリケーションから利用する際の仲介役を果たしていました。
xmlrpc.phpの位置
xmlrpc.phpは上記の様に、Wordpressのトップディレクトリ位置にあります。
どのサイトでも必ずこの位置に存在していて、場所は明白な訳です。
今は使われなくなった
xmlrpc.phpのお陰で、他のアプリからでもWordpressサイトを更新する事ができていた訳です。
今は「Wordpress REST API」が、xmlrpc.phpに代わってその役をしています。
それではまず、xmlrpcとは何なのかから解説しましょう。
XML-RPCによるWordpress遠隔操作
Wordpressと他のシステム間の通信を可能にする仕様の事を「XML-RPC」と呼びます。
外部システムからのWordpressの遠隔操作を実現する仕組みですね。
この時、外からWordpressを操作する時の窓口となるファイルが「xmlrpc.php」な訳です。
Wordpressを遠隔で操作する例
・スマホアプリなどからリモート操作する
・Microsoft Wordから直接投稿する
・ピンバックやトラックバックを有効にする
スマホアプリなどからリモート操作する
JetPackとWordpressのアプリを使って、スマホからWordpressをリモート投稿する場合ですね。
この時にxmlrpc.phpを使っています。
Microsoft Wordから直接投稿する
文書ソフトのMicrosoft Wordを使って、Wordpressへ直接投稿する事ができます。
設定の過程でもxmlrpc.phpを使っています。
Wordによる詳しい設定方法についてはまた別記事で紹介します。
ピンバックとトラックバックを使う
Wordpressのピンバックやトラックバック機能にも、xmlrpc.phpが使われていたのです。
この様に以前までxmlrpc.phpは、Wordpressを遠隔操作するために必須でした。
ですのでWordpressのバージョン3.5以降、xmlrpc.phpはデフォルトで有効になっています。
REST APIの登場
その後REST APIが導入される事になり、xmlrpc.phpファイルは遠隔操作通信に使われなくなりました。
今はxmlrpc.phpの代わりに、このREST APIを使用して様々なシステムやサービスと通信をしています。
REST APIが通信する外部システム
・Wordpressモバイルアプリ
・デスクトップPC
・外部ブログプラットフォーム
・Wordpress.com(Jetpackプラグイン用)
etc
xmlrpc.phpに比べてREST APIの方が接続できるシステムが豊富であり、柔軟性が高い特徴があります。
REST APIがxmlrpc.phpの上位互換となった訳ですが、心配事が残っています。
それはxmlrpcが、まだ有効のままになっている事です。
xmlrpc.phpの脆弱性
もともとxmlrpc.php自体にはセキュリティ上の脆弱性があります。
xmlrpc.phpが有効のままになっていると、Wordpressサイトがこのxmlrpc.phpを介して攻撃を受ける事があるのです。
具体的には以下の様な可能性があります。
ピンバックを利用したDDoS攻撃
xmlrpc.phpの代表的な機能の一つが、ピンバックとトラックバックですよね。
別のブログやサイトがコンテンツにリンクした際、サイトのコメント欄に通知を表示することができます。
※今はこれをREST APIが担当しています。
ハッカーはxmlrpc.phpが有効になっているサイトに対し、短時間で膨大な数のピンバックを送信します。
この膨大な送信攻撃によりサーバーが高負荷の状態になり、サイトが機能しなくなる危険があります。
これがいわゆるDDoS攻撃ですね。
ブルートフォースアタック
xmlrpc.phpはリクエストを行う際、認証のためにユーザー名とパスワードを送信する様になっています。
ここに実は重大なセキュリティ上の問題がある訳です。
xmlrpc.phpはリクエストごとに認証情報を送信する仕様なのです。
ログインできるまで総当たり攻撃
攻撃者はあえて多数のリクエストを送信し、それに毎回異なるユーザー名とパスワードの組み合わせを試します。
これを繰り返して最終的に正しい組み合わせに到達する事をブルートフォースアタックと呼びます。
ここが突破されるとサイト管理画面に不正ログインされてしまいますよね。
コンテンツの挿入、コードの削除、またはデータベースの破損などを引き起こされるのです。
xmlrpc.phpを攻撃されない様に
Wordpressの最新バージョンを利用しているのであれば、REST APIを使用して外部システムと通信しています。
REST APIは認証用のトークンを送信するOAuthを使用するので、ユーザー名やパスワードは送信しません。
せっかくREST APIがあるのに、xmlrpc.phpが有効のままだと攻撃されてしまうのです。
自分のサイトのxmlrpc.phpが有効かどうか
危険のリスクがあるのなら、早急に対応する必要があります。
ところがxmlrpc.phpは、削除すればよいというものでは無いのです。
xmlrpc.phpは削除しても復活する
xmlrpc.phpファイルは、実は消す事ができません。
仮にファイルを削除しても、Wordpress自体が更新されるとxmlrpc.phpファイルも復活してしまいます。
ですので消すのではなく、無効にした方が良いのです。
では自分のWordpressサイトのxmlrpc.phpが有効になっているか確認してみましょう。
チェックサイト
xmlrpc.phpが有効になっているかどうかは「WordPress XML-RPC Validation Service」で確認できます。
サイトのURLを入れると、xmlrpc.phpが有効かどうかが簡単にチェックできます。
現在、上記URLではチェックができない様ですので、直接xmlrpc.phpを開いて確認してみる必要があります。
無効化の確認
WordpressのURLの末尾にxmlrpc.phpを付けてアクセスしてみましょう。
url例:http://lpeg.info/xmlrpc.php
無効化されていない場合
もし上の画像の様な状態の場合はまだ無効されていません。
無効化されている場合
上記の画像の様に「403エラー」が出れば、」無効化がされています。
xmlrpc.phpを無効にする方法
無効になっていないとわかったら、早速無効にしましょう。
プラグインを使ったり、.htaccessで無効にしたりリダイレクトしたりできます。
プラグインを使ってxmlrpc.phpを無効にする
まずはxmlrpc.phpを無効にするプラグインから紹介しましょう。
Disable XML-RPCプラグイン
新規追加から「Disable XML-RPCプラグイン」で検索し、インストール・有効化するだけで無効化されます。
.htaccessでxmlrpc.phpを無効にする
プラグインは簡単便利ですが、このためだけにプラグインをインストールしたくないというユーザーもいますよね。
そんな時は.htaccessにコードを追記する事で簡単に無効にできます。
.htaccessファイルに次のコードを追加します。
.htaccess無効コード
<Files xmlrpc.php> Order Allow,Deny Deny from all </Files>
これによりxmlrpc.phpが無効になります。
リダイレクトを掛ける
サーバ負荷を考えて、xmlrpc.phpへのアクセスを0.0.0.0にリダイレクトさせる手もあります。
その場合は下記の行を追加します。
.htaccessリダイレクトコード
RewriteRule ^xmlrpc\.php$ "http\:\/\/0\.0\.0\.0\/" [R=301,L]
上手くいかない場合
うまく無効にできない場合は、.htaccess内に記述したコードの位置が影響している場合があります。
ポイントは、#BEGIN WordPressから#END WordPressのコメントより上に追加する事です。
#BEGIN WordPressから#END WordPressの中や下に追記すると、上手く稼働しない事があります。
nginx系のサーバーの場合
nginx系のレンタルサーバーには、.htaccessファイルが存在しません。
その場合はサーバー側での設定が必要になりますので、nginx.configに次のコードを追加しましょう。
nginx.configコード
location ~ xmlrpc.php { deny all; access_log off; log_not_found off; return 444; }
まとめ
サイトを最新の状態に保ちセキュリティを向上させたいのなら、xmlrpc.phpは無効にするべきでしょう。
しかしデフォルトでは有効の状態です。
これは、そのWordpressサイトの状況により一律無効にしておけない理由があるためです。
xmlrpc.phpを無効にできないケース
・REST API無しで、Wordpressサイトと他システム間で通信する必要がある
・テーマやプラグインの関係でWordPressバージョンを4以降に上げれない
・xmlrpc.phpにはアクセスできるがWP REST APIにはアクセスできないアプリケーションを使用している
上記のような理由でxmlrpc.phpを無効にせず、有効にしたままにする場合があります。
これはxmlrpcの脆弱性以前に、サイトの構造や環境に問題があると言えます。
サイト自体の抜本的な改善を図って、xmlrpcから離れるべきと言えるでしょう。
REST APIも完ぺきではない
REST APIを使っていれば安心の様な書き方をしたかも知れませんが、REST APIも完璧ではありません。
もちろん攻撃者からユーザ情報のハッキングがされる恐れはあります。
特殊な方法を使えば、管理者のユーザー名までは特定されてしまう場合があります。
確認方法
ブラウザのアドレスバーに、ドメインの後ろに「/wp-json/wp/v2/users」をつけて入力しましょう。
url例:https://lpeg.info/wp-json/wp/v2/users
そうすると以下の様なデータが表示されます。
このコードの中で管理者のユーザー名が表示されているのがわかります。
REST APIは認証方式が3種用意されているためよりセキュアな利用が可能ですが、それでも万全ではありません。
REST APIについてのセキュリティ対策についてもまた別記事で紹介するつもりです。