スポンサーリンク

ロリポップ!のWordPressのセキュリティ対策をしてみたら冷や汗をかいたという話

記事毎に異なるJavaScriptを実行させる必要があったのですが、デフォルトのままだと、記事内のJavaScriptは無効となります。(と書いたのですが、権限を変更すれば大丈夫みたいな記事を見つけました。でも結局WAFが有効だとダメなのでしょうね。)プラグインを利用すればよいということが分かりましたが、不安定なること嫌うため、あまりプラグインを使っていません。もう少し調べてみると、カスタムフィールドを使えば比較的簡単に実現できることを知りました。それはとてもシンプルな仕組みで、カスタムフィールドにJavaScriptのコードを入れておき、single.phpで読み込むというものでした。

ローカル環境でテストを行い問題がなかったため、リモート環境で試すことにしたのですが、カスタムフィールドに<script>タグがあると保存されません。そこで、ローカルとリモートで何が違うのかを調べたところ、このブログを置いているロリポップ!に問題(問題ではないのですが)があることが分かりました。

結果として、ロリポップ!の標準機能であるWAF1(Web Application Firewall)が原因でした。

さっそくWAFをオフにして試してみると、<script>タグが受け付けられ問題が解消しました。

WAFの設定は、ユーザ専用ページのWEBツール > WAF設定です。

ロリポップのWordPressに問題発生

WAFをオフにして2週間ほどたった頃、ロリポップから一通にメールが届きました。

現在、ロリポップ!において、第三者からの大規模攻撃により WordPress を
ご利用中のお客様のサイトが改ざんされる被害が発生しております。

公式サイトにもアナウンスが掲載されました。

2013/08/28
【重要】WordPressをご利用のお客様へ

http://lolipop.jp/info/news/4148/

このメールを受け取る以前から、ロリポップのWordPressで不正アクセスや改ざんが発生していることは、ちらほらと耳にしていました。また、WAFをオフにしていたことが気がかりでしたので、何か対策をすることにしました。

セキュリティ対策

ロリポップ上のWordPressをWAFで防御する方法 - HASHコンサルティングオフィシャルブログ

http://blog.hash-c.co.jp/2012/12/how-to-protect-your-wordpress-on-lolipop.html

  • 閲覧用のドメインはHTTPとして、独自ドメインかロリポップ!の用意したサブドメインで運用する。このドメインはWAFで防御する
  • 管理用のドメインは共有SSLとして、BASIC認証で保護し、WAFの設定は外す

なるほどと思い、上記サイトを参考に設定してみました。

サブドメインを利用している方は、最後までお読みください。
  1. WordPress HTTPS (SSL) をインストール。

  2. プラグインの有効化と設定。

     SSL Host: https://・・・.jp/(ロリポップの指定URL)
     Port: 443
     Force SSL Administration: 有効
     Force SSL Exclusively: 有効
    
  3. Save Changeをクリック

・・・管理画面にアクセスできなくなりました。

WordPressのプラグインを全て無効にする

閲覧はできるが管理画面だけ開けない。嫌な感じがしつつ、プラグインを外してみることにしました。

ftpで、wp-content/plugins/wordpress-httpsを削除

再度アクセスしてみると、このようなメッセージとともに管理画面にアクセスできるようになりました。

そこで、WordPress HTTPS (SSL)を再インストールしましたが、どこかに設定情報が残っているらしく、再び管理画面にアアクセスできない状態になりました。やはり、プラグインに問題があるようです。

そこで、本家サイトでプラグインを無効にする方法を調べました。

http://wpdocs.sourceforge.jp/FAQ/%E3%83%88%E3%83%A9%E3%83%96%E3%83%AB%E3%82%B7%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0

16 管理パネルにアクセスできないときに全プラグインを停止するには?

  1. FTP クライアントまたはホスト(レンタルサーバ)のコントロールパネルから、
    1. wp-contents ディレクトリ(フォルダ)へ移動する
    2. “plugins” ディレクトリを “plugins.hold” にリネーム(名前を変更)する
    3. 新たに “plugins” というディレクトリを作成する(中身は空)
  2. WordPress の管理パネルにログイン
  3. FTP クライアントまたはホスト(レンタルサーバ)のコントロールパネルから、
    1. 上記 1-3 で作成した空の “plugins” ディレクトリを削除する
    2. “plugins.hold” ディレクトリを “plugins” に戻す

上記手順に従い作業を終わらせ、ページを更新するとプラグインが全て無効になっている状態で、管理画面へのアクセスが可能となりました。

次に、必要なプラグインを有効にして、WordPress HTTPSを削除しました。

原因はこのブログがサブドメインにあるのを忘れていたこと

アクセスできないときに、ブラウザのアドレスバーを見ていると、WordPress HTTPSの機能で、blog.matomerge.com/wp-admin/にアクセスすると、設定したSSL Hostのhttps://・・・.jp/にリダイレクトしていることが分かりました。というか、そういうプラグインですよね。

サブドメインから独自ドメインにリダイレクトされるため、管理画面にアクセスできなくなっていました。そりゃそうですね、凡ミスです・・・

そこで、再々度WordPress HTTPSをインストールして、HOST設定をサブドメインのルートである`https://・・・.jp/***/にしてみたところ、問題なく動作するようになりました。

Basic認証

  1. ロリポップの管理画面で、アクセス制限を設定します。

    もし、.htacceessがすでに存在する場合は、上書きされるかもしれませんので、バックアップしておくことをおすすめします。

    • 認証フォームタイトル: Basic認証時に表示されます。
    • ユーザ1: 任意
    • パスワード: 任意(8文字以内)
  2. ルートの.htaccessを編集します。

    以下の内容を追加します。blog.matomaerge.comは環境に合わせて変更してください。

     SetEnvIf Host "^blog.matomaerge.com$" allow_host
     order deny,allow
     deny from all
     allow from env=allow_host
    
     satisfy any
    
  3. WAFの設定変更

    当初の目的であるWAFを閲覧用と管理用で切り替えます。

    これでWordPressの管理画面へアクセスするときは、認証がかかります。

    httpsでアクセスしていることが確認できました。そして、WAFが無効になっているので、カスタムフィールドに<script>タグを追加することも可能になりました。

    手順のみのざっくりとした内容でしたので、最初に紹介したサイトで詳細をご確認ください。

おわりに

不慣れなことはしないほうがいいですね。再インストールという悪夢がよぎりました。といっても、セキュリティ対策は問題が起こってからでは遅いですから、いい勉強になりました。

  1. http://lolipop.jp/waf/