WordPressがハッキングされて右往左往した時にやったこと色々を初心者向けに解説
2015/04/06
一年前くらいにやられて、半年ほど沈静化していたのがこの3月位からまた酷いことになっていまして。色々試してみて、そろそろ沈静化したかなという感じになってきたので、その手順を。
ハッキングされましたっていうのは信用にも関わるし、恥ずかしい事だったりするのであんまり情報が表に出てこないのですが、そんな事言っていても被害が拡がるだけなので共有しておきたいと思います。
読者層としては、プロというより、え?ハッキングされてる???なにそれどうすればいいの?という人で、SSHでサーバにログイン位は出来るけど…という人を想定しています。僕はさくらのVPSを使っています。(逆に、プロな人は是非助言を頂きたく…)
ハッキングに気付いたのは何故か
さくらのVPSのabuse担当からメールが来ていました。
ご契約者:吉田 丈治 様
サービス:xxx.xxx.xxx.xxx平素は弊社サービスをご利用いただき、誠にありがとうございます。
さくらインターネットabuse対策チームでございます。ご利用中のサーバのIPアドレス(xxx.xxx.xxx.xxx)におきましてブラック
リストに登録されていることを確認しましたので、ご連絡を差し上げました。
なるほど。ブラックリストですか。僕のブログ…。って思いますよね。
ブラックリストて何ですかと。
ブラックリスト登録を確認しましょう
そもそも、そんな事知らない人ですからね、どこで確認するんだと。
ここです。
aguse.jp: ウェブ調査
hostしているドメイン入れてみましょう。
IPの場合はこちらを。
IPブラックリスト検索 IP Blacklist Search - IP Utilities
あとこことか
そして、何が起きているかを把握する
WordPressの場合は、Malwareが埋め込まれていたり、それによってSpamメール送信の踏み台になっている事が多そうです。僕の場合は両方ですね。
Spamメールの踏み台を解除しましょう
postfixの設定が適当だと、踏み台になってしまって、すさまじい量のメールが送信されてしまったりします。そうすると、そのサイトでhostしているドメインが、spam判定されてしまって、自分のメールが届かなくなったりしますね。僕の場合は @geeorgey.comがspam判定されるという訳です。これこまりますね。
ということで、まずは何をするかというと、postfix止めます。
# service postfix stop
はい。メール止まりました。
これをやると、サイトの問い合わせフォームからのメールも止まりますので気を付けてくださいね。できれば止めている間はメンテナンス中とかにしておきましょう。クレームに繋がります。
どんだけメール送ってたかを把握しましょう
# mailq
送信メールのキューが何件溜まってるかが見えます。僕が見たのは数万件溜まってましたね。死にたい。
重要なメールは無いので、僕はこのメールキューを全削除しました
# postsuper -d ALL
全部消えます。が、あっという間にメールキューが増えます。何故ってスクリプトが埋め込まれていて、15秒ごとくらいにがんがんメールが増えていくからですね。なので消しても本当の所は意味が無いです。
外部にメールが飛ばないように設定してみる
僕の場合は、自分のメアドだけにメールが届けばよかったので、それ以外に向けての送信を遮断します。正直な所、postfixの設定の意味がわかりにくすぎてものすごく時間を喰いました。
リレーの設定をしましょう。参照はこちら
Postfix でメールリレーの設定 (SMTP クライアント + SMTP Auth)
/etc/postfix/main.cf
にtransportテーブルの設定を読み込ませるために以下を追記
main.cf
[code]transport_maps = hash:/etc/postfix/transport[/code]
そいで、transportテーブルを作ります
# vim /etc/postfix/transport
この中にリレーして良いドメインを設定します。
[code]geeorgey.com smtp:
* discard:discard[/code]
こうやると、@geeorgey.com以外のメールはdiscard(破棄)されるようになります。
メールログを見てみましょう
# less +F /var/log/maillog
Apr 5 04:28:57 ************** postfix/discard[30281]: 5A68E342F22: to=<**********@yahoo.com>, relay=none, delay=0.05, delays=0.05/0/0/0, dsn=2.0.0, status=sent (discard)
ということで破棄されていることがわかると思います。
ここまで来て、外部にメールが出て行かなくなりました。spam的な動きが止まりましたのでブラックリストを解除しましょう。
ここでアウトと言われたサイトに全部行ってスクリプト削除しましたよ!みたいなことを書けば、割りと早めに解除してくれます。ふぅ、良かった。
いやいや、全然良くないです。メールは外に出て行かなくなりましたが、そもそもメールを生み出しているスクリプトは削除されてないからです。
こいつらを探しましょう。
clamscan便利
clamscanはフリーのウイルススキャンソフトです。こいつを使ってみましょう。
基本的にここにでている手順でOKです。
[code]yum -y install clamd #←インストール
vi /etc/clamd.conf ← clamd設定ファイル編集
[/code]
User clamav → #User clamav
[code]# /etc/rc.d/init.d/clamd start ← clamd起動
Starting Clam AntiVirus Daemon: [ OK ]
# chkconfig clamd on ← clamd自動起動設定[/code]
あとは、そこに書いてある設定をしておきましょう。
ウイルス定義を最新に
# freshclam
怪しいファイルを探しましょう
# clamscan --infected --recursive /var/www/html/
僕の場合は /var/www/html/ 以下にファイルが入ってますので、その中身を探します。
結果的に言うと、そこだけじゃなかったので、全ファイルやってみても良いと思います
# clamscan --infected --recursive /
怪しいファイルが出てきますので、そいつらを隔離しましょう。
以下、例
/var/www/html/geeorgey.com/wp-content/plugins/w3-total-cache/lib/Minify/Solar/code.php: Php.Malware.Mailbot-1 FOUND
/var/www/html/geeorgey.com/wp-content/plugins/jetpack/views/global.php: Php.Malware.Mailbot-1 FOUND
/var/www/html/geeorgey.com/wp-includes/js/tinymce/plugins/header.php: Php.Malware.Mailbot-1 FOUND
はい、出てきますね。
とりあえず隔離です。
# mkdir ~/malware/ ←隔離用のフォルダを作ります
# mv /var/www/html/geeorgey.com/wp-content/plugins/w3-total-cache/lib/Minify/Solar/code.php ~/malware/
# mv /var/www/html/geeorgey.com/wp-content/plugins/jetpack/views/global.php ~/malware/
# mv /var/www/html/geeorgey.com/wp-includes/js/tinymce/plugins/header.php ~/malware/
これで隔離されました。削除しない理由は後述。
これらのファイルでspamメールが生み出されている
アクセスファイルを見てみましょう。
# vim /var/log/nginx/*access.log | grep -v backend
* の部分は、みなさんのつかっているドメインが入ると思います。複数のサイトを一つのサーバでhostしていると、その分だけログファイルが作成されていると思いますのでその中から適当に見てみましょう。
僕の場合だと、geeorgey.comに怪しいファイルが設置されていたので
#vim /var/log/nginx/geeorgey.com.access.log
ってやって見てみます。
で、さっき見つけてしまったcode.php、global.php、header.phpを探してみます
vim上で /code.php ってやれば探せると思います。
恐ろしいことにですね、一度こいつらが設定されると、数十秒ごとに色んなIPからアクセスが来ますよ。
ファイルへのアクセスをトリガーにして、spamメールを沢山作り出しているのでしょう。
例えば、先ほどみたいにメールキューを全削除しても、数十秒で15件とか増えます。これはなんでだろうなって思うとですね、アクセスがあるんですよ。それがトリガーですね。
ということで、これらのファイルを隔離すると、とりあえずはメールキューが増えなくなります。が、それも半日位で、対策不足だったと気付くことになるでしょう。
そもそも、そのファイルを設置したのは誰なのか
これ大事ですね。このファイル、作られてるんですよ、別のスクリプトによって。それで、そいつを突き止めないとダメですね。
さっき、ファイルを削除せずに隔離したのには意味があります。
いつ、スクリプトファイルが作られたのかを把握する為です。
あんまり前だと、アクセスログがローテーションされてなくなってる可能性がありますので、隔離後にまたclamscanをしてみて、新しくファイルが作成された時に確認してみるとやりやすいかもしれません。
で、ファイルの作成日時を見てみましょう
# ll ~/malware/
ってやると
-rw-r--r-- 1 nginx nginx 64333 4月 1 02:40 2015 header.php
はい、4月1日の02:40ですね。
その瞬間に何が起きたのかをアクセスログで確認してみましょう。アクセスログは
/var/log/nginx/
の中に(僕の場合は)入っています
#ll /var/log/nginx/
-rw-r----- 1 nginx adm 40856 4月 1 04:28 2015 geeorgey.com.access.log-20150401.gz
oh...圧縮された後でしたね。てことで、こいつを展開してみましょう。
# cp /var/log/nginx/geeorgey.com.access.log-20150401.gz ~/malware/
# gunzip geeorgey.com.access.log-20150401.gz
展開されましたので、02:40のアクセスログを探します
# grep "02:40" ~/malware/geeorgey.com.access.log-20150401
核心に迫りますよ。
/root/malware/150415/geeorgey.com.access.log-20150401:***.***.***.***, ***.***.***.*** - - [01/Apr/2015:02:40:18 +0900] "POST /wp-includes/js/tinymce/plugins/header.php HTTP/1.0" 200 742 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.7.6)"
ありますね。
直前にこんなのありますね。こいつがclamscanに出てこない
/root/malware/150415/geeorgey.com.access.log-20150401:***.***.***.*** - - [04/Apr/2015:02:40:08 +0900] "POST /wp-includes/js/tinymce/plugins/header.php HTTP/1.1" 200 551 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.7.6)" "***.***.***.***"
こいつによって作られてますね。てことで、こいつをまた隔離です。
# mv /var/www/html/geeorgey.com/wp-includes/js/tinymce/plugins/header.php ~/malware/
こんな感じで、clamscanで新しいファイルができたらその時はチャンスです。そのファイルを作り出したファイルを抹殺しましょう。
敵はここだけじゃないという話
最初ね、cronで作られていると思ってね。そっちばっかり調べてたんです。案の定いるんですけどね、上記の通りそれだけじゃないという話。
で、僕はnginxで動かしているのでそいつがファイルを作り出しています。
# crontab -l -u nginx
nginxのcron調べましょう。
ファイルはここかな
#vim /var/spool/cron/nginx
あるんですよ、そこに。設定が。
/tmp/Ijflaie ←ランダムなファイル名
とか
/var/tmp/IwxKqh ←ランダムなファイル名
とか。
tmpの中にスクリプトファイルが置いてあって、そいつをcronでガンガン動かしている。
こいつについてはファイルの削除とcrontabの設定を消去して保存しておきましょう。
で、そのtmpフォルダなんですけど、そいつをsecureにしろよっていうのが、英語だと結構出てくるんですね。
tmpフォルダをセキュアに
http://kb.hyve.com/wiki/How%20to%20Secure%20tmp%20folder%20to%20stop%20upload%20flood%20hacks
これ、やっちゃいました。やってる内容については、tmp用の空ファイルを1Gb作成して、tmpにマウントする。その際にexeが実行されないようにしておけば良いよっていう事。
かつて、tmpフォルダの所有者をrootにしたらMySQLが立ち上がらなくなったりするので(まぁそりゃそうなんだけど)、やったらどうなるかなと思っていたのですが、問題ないと思う(詳しい人おしえてください)
clamscan以外にも、簡易的なスクリプト抽出方法を解説しているサイト
簡易的なスクリプト抽出
http://blog.rimuhosting.com/2012/11/01/finding-exploits-and-trojan-php-hacks-on-a-website/
ここに書いてあるのは一通りやってみても良いと思う。
それでもWordpressがおかしいってことがある
これはspamメールというより、malware埋め込まれ系の対策。
それっていうのは、新しいファイルを上書きすれば直る。
でもそれって、どっかのファイルがやられているってことでしょう?
そいつを探しましょう。
まずは、新しいファイルをダウンロードしておきましょう
# mkdir ~/wp/
# cd wp
# wget WordPressの最新版ファイル.tar.gz
# tar vzxf wrodpress.*.*.*.tar.gz
あとはdiff取る
参照:ディレクトリ内のファイルを比較する方法(サブディレクトリ含む)
# diff -r ~/wp/wordpress/ /var/www/html/geeorgey.com/
という感じ。
これで、変なところがわかると思います。わかったら、そいつを隔離しておいて、さっきの手順でおかしな奴らをあぶり出すという訳ですね。僕の場合は include/wp-navi.phpみたいなファイルがやられてましたね。
WordPressをクリアにするには?
出来る限りファイルを最新にしましょう。
新しいフォルダを作って、Wordpressのファイルをダウンロードしてきます。
加えて、つかっているプラグインのファイルも持ってきましょう。
テーマファイルも、まっさらなものをダウンロードできるならダウンロードしてきましょう。
問題はuploadsフォルダ内です。jpgやらgifファイルだけだったら、それ以外のファイルを探して駆除しましょう。ここは、変なのが混じっていると本当に見つけ出すのが面倒だと思います。でも、ここまでやっておけば、clamscanもuploadsフィルダ内だけを重点的にチェックすれば良いのでかなり対象がしぼれると思います。
mailqやら、clamscanやらは、定期的にやっておかしいファイルが無いか探してみましょう。
以上。本当に長い戦いでした…終わりは無いんだろうけどね。
他にもこんなことやっとけというのがあれば教えて下さい!!