先日、マルウェア感染したサイトを復旧した時の話です。マルウェア感染した複数サイトのうち1サイトだけWordpressにログインした瞬間にログインセッションが切れてしまう、ということでした。
ログインした瞬間にセッションが切れて、ダッシュボードが表示されているのにログアウトしているのと同じなのか、そこから先はすべて403になり何もできなくなっていました。wp-admin以下のファイルの読み込みも403になっており、ダッシュボードのCSSも外れていました。
ログインセッション切れはWordpressでよくある問題なので、どうせその手の原因だろうと思っていろいろ調べましたが、全く改善せず、吐きそうになりました。
最終的にマルウェアが原因だったのですが、解決するまでかなり大変だったのでメモしておきたいと思います。
WordPressでログインした直後にセッションが切れる原因
検索するとよく出てくる、Wordpressにログインした直後にセッションが切れる場合の対策というのがあります。
- ブラウザのキャッシュをクリアする
- ブラウザのクッキーをクリアする
- ブラウザの設定を確認する
- WordPressサイトのキャッシュをクリアする
- WordPressサイトのアドレスを再確認する
- WordPressのすべてのプラグインを無効化し再有効化する
よくある原因は5のWordpressサイトのアドレス設定の不一致です。
その対処方法は、設定⇒一般と進んでsiteurlとhomeurlを同じにすれば解決というものです。
今回のケースはいずれも改善しませんでした。
マルウェアが仕込まれてWordpressにログインできなくなっていた
ドキュメントルートに不審な.htaccessファイルが設置されていました。
ちなみにこの内容はマルウェア感染したサイトによく仕込まれている内容で何度も目にしたことがありましたが、今回のようなログインセッション切れの問題が起きたのは初めてです。
このファイルをリネームしたらセッション切れの問題はなくなったので、このファイルが原因なのは間違いありません。
<FilesMatch ".(py|exe|php)$">
Order allow,deny
Deny from all
</FilesMatch>
<FilesMatch "^(about.php|radio.php|index.php|content.php|lock360.php|admin.php|wp-login.php)$">
Order allow,deny
Allow from all
</FilesMatch>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
なぜ気が付かなかったか?
特定のサイトだけセッション切れの問題が起きるという話を聞いていたので、ドキュメントルートまで調査しなかった。
また、隠しファイルをlsで表示させて確認してなかったので、ドキュメントルートを見た時に勝手に.htaccessのファイルが無いと思いこんでいた。
その後、全てのサイトが同じようにセッション切れの問題が起きているという情報が来て、かつ、他のサイトにサイトを移転したら問題が解決したので、ドキュメントルートが臭いということでまじめに調べたら原因がわかりました。
まとめ
マルウェア感染自体はよくある内容で大した話ではなかったのですが、現象の出方が今までと違っていたので、明後日の方向の原因追及をして、かなり時間を取られてしまいました。
マルウェア感染したサイトの管理者が情報を小出しにするのと、内容が不正確だったので、振り回されてしまった感じもあります。自ら1次情報に当たるのが大事だと再認識した次第です。