スパムメール大量送信事件その1

収束してきたので、自戒のためにも書いておきます。

あるクライアントさんのサーバーからUndeliveredのリターンメールが5000通ほどドドドドドっと受信。
内容を見ると、EC-CUBEの自動配信系等でも管理画面のメルマガで送ったようなものではなく、いかにもスパム!といった感じの内容でした。

タイトルは「Revenue Agency」。
本文は・・・
After the calculation of your fiscal year we have determined that you are eligible to receive 386$ tax refund. http://cra-arg.com/.t/

※あえてURLはそのままにしてありますが、URLを踏みにいく場合は自己責任でお願いします。

この原因調査と対策にド深夜に翻弄しました。

※ 以降、今回対象となったサーバーのドメインをclient-sample.co.jpとして差し替えて記載します

1. 発生源を突き止める

鬼のように届くリターンメールから、送られようとしていたメールのヘッダーをチェックします。

Return-Path: <apache@client-sample.co.jp>
Received: by client-sample.co.jp(Postfix, from userid 48)
id 89DE76004AF; Thu, 19 Mar 2015 22:58:00 +0900 (JST)
To: 6476833916@sms.rogers.com
Subject: Revenue Agency
X-PHP-Originating-Script: 48:sender.php
Message-Id: <20150319135800.89DE76004AF@client-sample.co.jp>
Date: Thu, 19 Mar 2015 22:58:00 +0900 (JST)
From: apache@client-sample.co.jp (Apache)

X-PHP-Originating-Scriptから、apacheが実行しているsender.phpが送っていることがわかります。

2. これ以上スパム送信に加担しないためにデーモンを止める

これ以上キューを増やさないためにまずhttpdを一旦停止し、
メールがこれ以上送信されないようにpostfixも停止します。

#service httpd stop
#service postfix stop

3. 犯人たちの息の根を止める

sender.phpをgrepかけて場所をチェック。

# find / -name sender.php
~/wp-content/plugins/sender.php

WordPressのプラグインディレクトリにありました。
このディレクトリの中身を確認して、lsの結果を保存しておきます。

#ls -al ~/wp-content/plugins/ >> wp-content-plugins-dir-ls.txt

WordPressをご利用の方で、ある程度触ったことがある方なら分かるかと思いますが、このディレクトリにはWordPressで利用するプラグインが入っています。通常は、プラグイン名を冠したファイル名もしくはディレクトリ名がこのディレクトリのファイル一覧として並びます。そして、WordPress上では停止しているプラグインは動きはしませんがここに存在し続けています。

チェックしてみると、このプラグインディレクトリには、公式からインストールしたであろうもの以外に、以下のようなファイルがありました。

-rw-r–r– 1 apache apache 106964 1月 27 17:07 2015 1so.php
-rw-rw-r– 1 clientsample apache 33366 1月 22 17:28 2015 hello.php
-rw-r–r– 1 apache apache 1627 3月 19 22:02 2015 sender.html
-rw-r–r– 1 apache apache 569 3月 19 22:02 2015 sender.php
-rw-r–r– 1 apache apache 106964 3月 13 15:43 2015 urls.php

私がこのサイトのWordPressを管理していたわけではないので、正常なプラグインかどうかが判断尽きません。が、少なくとも、sender.phpは主犯ですし、sender.htmlのタイムスタンプも考えると同じ類だと思われるので、この2つは何よりも先にmvします。

#mv ~/wp-content/plugins/sender.php /root/hack_backup/
#mv ~/wp-content/plugins/sender.html /root/hack_backup/

4. 共犯の息の根を止める

残りのファイル達ですが、
urls.phpと1so.phpは同じもののようで、ざっくり説明するとPHPのmail関数を利用してメールを送るというスクリプトでした。ロシア語っぽいものがチラチラみえるソースです。

さすがに該当サイトのWordPress管理にノータッチの私でもプラグインの挙動としてはおかしいのは理解できるので、この2つもmvします。

#mv ~/wp-content/plugins/1so.php /root/hack_backup/
#mv ~/wp-content/plugins/urls.php /root/hack_backup/

残るhello.phpですが、本来であれば、
WordPressインストール時にはすでに一緒にインストールされているHelloDollyというプラグインで、何するプラグインなのかも皆よく分からないままプラグイン停止して放置するアレです。
私も同じ認識でいたんですけど…アップデートなんかがあったとしても最初から存在しているプラグインのわりに日付が他のファイル群に比べ新しすぎる感がありました。
一応中身をチェックします。

ドンピシャです。書き換えられていました。
hello.phpはプラグインではなく…

hello.phpへアクセスした時
hello.phpへアクセスした時

※hello.phpを自分のサーバーに持ってきてアクセスしてみた結果です

画像のように、アクセスして実行するタイプのスクリプトに書き換わっていました。
表示されているものをソースコードを参照しながら上から順に説明します。

  • アクセスしている人のリモートホスト:$_SERVER[‘REMOTE_HOST’]を表示
  • apacheの情報:$_SERVER[‘SERVER_SIGNATURE’]を表示
    画像では出ていませんが、apacheのconfで出す出さないを制御できます。
    テストで置いたサーバーは出さない設定でした。
  • OS情報:uname -aの実行結果
  • ユーザー情報:idの実行結果で、apacheのuidなど。

ここまでが固定表示。そして、次が怖い。

  • コマンドの入力テキストボックスと実行ボタン
  • cdするためのパスを入力するテキストボックスとcd実行ボタン
    デフォルトでは、hello.phpがあるディレクトリのパスが出ています。
  • ファイルアップロード

これだけで何でもできてしまいます。

このファイルも移動確定です。

#mv ~/wp-content/plugins/hello.php /root/hack_backup/

5. デーモンを起動する

すでにキューには何もなく、送信しきっちゃったようですし、
ここまでやってからhttpdとpostfixをスタートします。

大量受信開始からおよそ10分くらいでした。

#service httpd start
#service postfix start

スパムはとまり、原因となるファイルもmvしてひとまずは平和を取り戻しました。

 

直接的な原因は排除したので、
次はいかにしてHelloDollyを書き換えたか等の原因を探ります。


投稿日

カテゴリー:

投稿者: