情報科学屋さんを目指す人のメモ

方法・手順・解説を書き残すブログ。私と同じことを繰り返さずに済むように。

WordPressが攻撃の踏み台にされた時に管理画面からWordPressを全停止する方法

WordPress (80) セキュリティ (78)

WordPressの16万サイトが大規模攻撃の踏み台に、「Pingback」機能悪用 - ITmedia エンタープライズ」にあるように、WordPressがDDoS攻撃の踏み台として利用されたようです。対策を調べると、「バージョンアップ」と「ピンバック無効化(functions.php編集)」が紹介されているのですが、今回は、「とにかくWordPressがやばい状態だから、今すぐ何とかしたい」という場合に、「WordPressの管理画面からできる、WordPressの全機能を強制的に毎回クラッシュさせる方法」を紹介します。

なお、管理画面自体ももれなくクラッシュするようになるので、復旧には、サーバにログインするなどの方法で、直接ファイルを編集する必要があります。無理矢理な方法なので、万が一使うのであれば、よく理解して利用してください。また、WordPressのログインユーザーの権限によっては実行できません(テーマを編集できる権限が必要)。

また、この記事の付録に書いておいた「functions.phpがどういう経路で呼ばれているか」は、WordPressの基本的な知識として参考になると思います(ぐぐっても見当たらないので自分でたどった)。

想定される利用ケース

今回話題になっているような、「ピンバック機能が使うXML-RPCを使って踏み台にされ、外部のサーバーに迷惑をかけてしまっている場合」や、「WordPressのファイルが改ざんされ、問題のあるページが表示されるようになってしまった」のような場合で、とにかく今すぐWordPressを使えない状態にしてしまいたい・見えない状態にしてしまいたいという場合に、今回紹介する方法が使えます。

また、付録の注意書きを読んでから実行してください。

functions.phpなら管理画面から編集できる

とりあえず、サーバにログインできなくとも、WordPressの管理画面にさえログインできれば、「テーマファイル」は編集することができます

「外観なんて変更してどうするの?」と思うかもしれませんが、そのテーマファイルの中でも、functions.phpだけは特別なファイルであり、wordpressの重要な機能を担っています

functions.phpはwordpress本体を編集せずに機能拡張するための超重要ファイルであり、wordpressが動作するたびに、毎回毎回呼ばれます

つまり、例えばfunctions.phpで構文エラー(書き間違い)を起こそうものなら、functions.phpが実行できずにページは表示できなくなりますし、管理画面すら表示できなくなります。そして、xmlrpc.phpも例外ではなく、クラッシュします。

手順:管理画面からWordPressがクラッシュするように変更する

というわけで、functions.phpを構文エラーが発生するように書き換えてしまえばよいのです

まず、WordPressの管理画面にログインして、「外観>テーマ編集」を開きます

そして、右側のメニューに有る「テーマのための関数(functions.php)」を開きます

すると、中身が編集できる画面が表示されるので、そこで一番最初の行が「<?php」となっているはずなので、その次の行に「syntax error」とでも書いておきます(もっと適当でも良いのですが、あまりに適当に書きすぎると、あとでよくわからなくなる危険があるので注意)

その行を書き加えたら、「ファイルを更新」をクリックします

これで、ファイルが保存され、ちゃんと編集できていれば、もう編集結果の画面は表示されません。というのも、編集によって、管理画面すらクラッシュするようになったからです。

編集できない場合

テーマを編集できる権限を持つユーザーでない場合や、サーバの設定によっては、管理画面からテーマを編集できない場合があります。その場合、この方法は使えません。

付録1:注意

あくまで応急処置的な方法です。たしかにWordPressの機能的にはすべてろくに動かなくなりますが、踏み台の種類によっては、どうにもならないかもしれません。ですので、この対策で満足せずに、対策を進めるようにしてください。

もちろん、WordPress経由であれ、サーバそのものが乗っ取られてしまっているのであれば、いくらでもファイルを書き換えられてしまい、どうにもならない可能性が高いです。

また、あくまで停止状態になるのはWordPressであり、Webサーバそのものは動作します。なので、WordPressを必要としない静的なファイルの問い合わせなどには、ウェブサーバがそのまま答えてしまう可能性があります。

そして、WordPressの全機能が停止するわけですから、全ページが一切表示できなくなります。そのため、一度functions.phpをクラッシュするように書き換えてしまうと、戻すのは管理画面からではできないことをよく理解してから実行してください。

付録2:xmlrpc.phpからfunctions.phpが呼び出されるまで

問題となっているピンバック機能は、「xmlrpc.php」を呼び出して利用されます。

このxmlrpc.phpは、すぐ「include('./wp-load.php');」を呼び出します。そこから出発して、WordPressは、実行前の事前準備に入ります

xmlrpc.php:require_once(include('./wp-load.php');
→wp-load.php:require_once( ABSPATH . 'wp-config.php' );
→wp-config.php:require_once(ABSPATH . 'wp-settings.php');
→wp-settings.php:include( TEMPLATEPATH . '/functions.php' );
functions.php(テンプレートディレクトリ版)

この事前準備の中で、「functions.php」が登場するわけです。wp-cron.phpや数行しかないwp-rss2であっても、とりあえずwp-load.phpを最初に呼び出しています。そしてその先には、functions.phpが待ち構えています。

コメント(0)

新しいコメントを投稿