このサイトはさくらのVPSでWordpressを運営していますが、先日サーバーに攻撃を受けて 一時スパムメール送信をさせられていたので、対策の記録を残しておきます。
ただし、サーバー運営の知識はあんまりないので、あってるかどうかわかりません。 なんとか止めた感じです。もっと良い対策があれば教えてもらえるとうれしいです。
攻撃に気づくまでと応急処置
このサイトのサーバーは一応監視として次の2つの手段を用意していました。
- muninによるサーバー状況の閲覧
- logwatchでサーバー状況を毎日メール
毎日メール見て、あーうちのサーバー暇そうだなあーっていう確認をしてました。 たまにmunin覗いて、あまりに波風のないグラフで心も落ち着くっていうもんです。
数日前、logwatchのメールで、異常な数のメール送信をしていることに気づきます。 これはその時のメールの一部です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
--------------------- Postfix Begin ------------------------ 8961 *Fatal: General fatal 871 Miscellaneous warnings 91.310M Bytes accepted 95,744,994 18.006M Bytes sent via SMTP 18,881,024 ======== ================================================== 43136 Accepted 100.00% -------- -------------------------------------------------- 43136 Total 100.00% ======== ================================================== 46672 Connections 3480 Connections lost (inbound) 713 Connections lost (outbound) 46411 Disconnections 38461 Removed from queue 8502 Sent via SMTP 18399 Deferred 72462 Deferrals 23520 Bounced (local) 30952 Bounced (remote) 29680 Notifications sent 42999 Connection failures (outbound) 3 Timeouts (inbound) 3480 Illegal address syntax in SMTP command 451 DNS lookup errors 76 Hostname validation errors 318 PIX workaround enabled ---------------------- Postfix End ------------------------- |
とにかくpostfix関連で数字が多すぎです。いつもはlogwatchのメールで1通分しかありません。 あやしすぎる。
ああーこれはやっちまったぞ。とりあえず他所様に迷惑をかけてるのを止めねば・・・。
ひとまずmuninで状況を確認すると、ディスクアクセスやネットワークスループットが 割と頻繁に動いていることがわかりました。
普段ここはアクセスが殆ど無くグラフも平坦なので、これはおかしい。
サーバーにアクセスしてtopを見ると、smtpプロセスがたくさん。
ああ、これはイカンと思い、その時は時間がなかったので応急処置として メールサーバーのpostfixをストップさせることにしました。これで よその方に迷惑をかけることは止まるはずです。
プロセスを見るとsmtpも消え、大丈夫なようです。その時は時間がなかったので、 本格的な調査はまた後ほどということにしました。
外部メールの転送を疑い、ログのチェック
時間が出来たところで色々とチェックします。 証拠として現在のログを全部テンポラリに移動しました。
この時点では、外部からメールの転送を受け付けないようにしていたのが 設定ミスでがオンになっているのではないかと思っていました。
まずメールログを見ると、こんな感じのメール送信エラーがたくさん記録されています。
1 2 3 |
Feb 7 11:30:46 sevencredit postfix/smtp[30725]: C162166D29: to=<***@example.com>, relay=none, delay=21393 , delays=21389/3.7/0.45/0, dsn=4.4.1, status=deferred (connect to anmail.com[***.***.***.***]:25: Connection ref used) |
postfixの設定を外部受付しないようにしていたつもりなのを再度チェックし、 いろんなサイトを元に書き換えてみました。
結果は・・・・だめ。
一瞬postfixをオンにするとまたメールを送ろうとしています。 ああ、また被害が・・・。
このままじゃダメだと思い、送信メールをすべてドロップし、他に転送しないように 設定しました。
で、何回かメールの設定をチェックしてはオンにして、というのを 繰り返しましたが結果は同じです。
改めて他のログを見ます。
スパムの送信元がローカルからの接続になっていました。
1 |
Feb 7 22:00:34 sevencredit postfix/smtpd[23305]: connect from localhost[127.0.0.1] |
これはだめなはずです。外からではなく内側から送ってたのですから。 外部からメールサーバーに直接送信しようとしてたのではないことがわかりました。
内部の送信しているプログラムを探します。
送信プログラム特定
この時点ではサーバーにスクリプトが設置されているとはまだ思っておらず、 原因不明のまま調べています。
とりあえずこういう時はログを見ろと見たような気がしたのでそちらをチェック。
PHPのログを見てみます。が、PHPからメール送った的な記録がどう書いてあるのかわからない。 それっぽい記述もわからず、何のプログラムからメールを送っているかが特定できません。
次にnginxのログを見てみます。こういうのがたくさんあることに気づきました。
1 |
***.***.***.*** - - [06/Feb/2014:19:15:23 +0900] "POST /mains.php HTTP/1.1" 200 11141 "-" "-" |
あやしい。Wordpressのフォルダにあったmains.phpをのぞいてみると、普通にメールを送るプログラムでした。 さらにあやしい。
調べると、Wordpressのアーカイブにはこのソースは入っていませんでした。たぶんこれですね。
ついでにそこと同じ所にbrowndoctor, browndoctordanieljacksonっていう フォルダがあることがわかりました。こういう名前のはWordpressの公式フォルダでは ないはず。プラグインの名前ともかぶらないし。
おそらく攻撃をかけてきた人の名前でしょうか。中は一つは空、もう一つはindex.htmlが ありました。このindex.htmlはこのサーバーをスパムサーバーに登録するもののようです。
どうやったのかわかりませんが、公開しているフォルダにスクリプトが設置されていることが わかりました。なんかの設定ミスなのか、脆弱性なのか・・・。
ひとまずこれらの怪しいファイル・フォルダを隔離しました。
もうちょっとログを見ると、一番最初にmains.phpにアクセスしているのは次のログで、 この回だけGETしています。
1 2 |
96.44.189.100 - - [06/Feb/2014:19:10:04 +0900] "GET /mains.php HTTP/1.1" 200 58078 "-" "Mozilla/4.0 (compatible ; MSIE 8.0; Windows NT 5.1)" |
たぶん、最初のhtmlでスパムボットのリストに入れられ、別のサーバーからmains.phpを アクセスして存在確認し、その後メールを送る指示を送ってきてたんでしょう。
ここまでで、postfixを起動してもスパムメールは送らないようになりました。
攻撃ファイル設置方法の検証
さて、攻撃ファイルを設置した方法を考えます。
時間的にも異常な動きをしだした時期のログを見ると、次のものが気になりました。
1 |
77.247.181.165 - - [06/Feb/2014:19:06:48 +0900] "POST /wp-includes/security.php HTTP/1.0" 200 91311 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US)" |
ソースを覗くと難読化されているPHPのようです。これもwordpressには含まれていないみたいです。 多分これがスパムボットの動作に関係有るのでしょう。隔離します。
と、ここまで様々な攻撃ファイルを見つけましたが、設置方法はわかりませんでした。
今のところ、おそらくプラグインのどれかの脆弱性か、テーマの脆弱性を疲れたのではないかと 思っています。
WordPressのログ設定がほとんどしないようになっていたため、足取りがつかめません。
ログを残すように設定し、使用しているプラグインやテーマを整理して様子を見ます。