最初のポストがこんな話題というのもどうかと思うけれど,攻撃を受けた話です.


 改竄攻撃を受けた

僕が管理を任されているとあるWebサーバで,ある日幾つかのページの内容が意味不明な英文に書き換えられているトラブルが起こりました. 来週の予定を書いてるページっていうのが,

Your’s is a point of view where real inlictegenle shines through. http://[URL]

っていう1文に書き換わっている…など.URLのリンク先は,少なくとも確認時点ではデッドリンクになっていました.

このコンテンツ,閲覧及び編集に対してパスワード認証をかけてはいたものの,正直簡単すぎるIDとパスワードのままにしてあったため, 最初はブルートフォース攻撃でもかけられてパスワードが割れたのかな,と思いました. そのためパスワードをもっと難しいものに変えて,やれやれ…と思った数日後,また同じように改竄されていたのを発見したので,これは,となったわけです.


 

参考

今回のトラブル対応,調査においては以下のページを参考にさせていただきました.

[phpMyAdminをハッキングしている記録と対策方法] http://colo-ri.jp/develop/2009/10/phpmyadmin.html

[phpMyAdminのsetup.phpの脆弱性を突くサイバー攻撃を確認] http://d.hatena.ne.jp/snufkinski/20100206/1265434884


 

access_logを見る

最初からそうすべきではあったものの,ここでやっとApacheのaccess_logに目を通しました. 最初の改竄があった時には,サーバに対しrootでログインしようとするアクセスが嵐のように来ていたため, サイトのパスワードが割れたのもこの流れかな,と思ったわけですが(rootのパスワードは相当複雑にしてあります)

1. 今回サイトのパスワードを複雑にした後,たった数日後に同じように改竄があった 2. ブルートフォースをかけられたにしては相応にあるべきアクセス数がない 3. rootを取られたわけではない 4. 他のコンテンツ・ファイルには改竄がない(少なくともそう見える)

のような理由から,他に穴があるか,もしくは何かが入り込んでいると考えを改めました (もっとはやくそうするべきです)

access_logを眺めていると,気になるログが散見されました.以下は例.

180.180.244.51 - - [24/Oct/2014:13:07:10 +0900] “GET /phpMyAdmin/scripts/setup.php HTTP/1.1” 200 11077 “-” “Mozilla/5.0 (compatible; MSIE 10.0; MSIE 8.0; Windows NT 6.1) Opera 7.01 [en]”
180.180.244.51 - - [24/Oct/2014:13:07:10 +0900] “POST /phpMyAdmin/scripts/setup.php HTTP/1.1” 200 18634 “http://[IP address]/phpMyAdmin/scripts/setup.php” “Mozilla/5.0 (compatible; MSIE 10.0; MSIE 8.0; Windows NT 6.1) Opera 7.01 [en]”

こんな風に,phpMyAdmin/scripts/setup.phpなるファイルに同一ホストから同時にGETとPOSTのリクエストが飛んできている. しかもこちらは200を返している. こういったログが5日間だけ調べても2000回以上ありました. 送信元はバラバラではありましたが,それぞれが少しずつIPアドレスを変えて非常に多くの回数リクエストを飛ばしてきています.

以下POST文だけですこーし抽出.

178.33.28.203 - - [24/Oct/2014:10:24:24 +0900] “POST /phpMyAdmin/scripts/setup.php HTTP/1.1” 404 306 “http://[IP address]/phpMyAdmin/scripts/setup.php” “Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.01 [en]”
162.213.25.66 - - [24/Oct/2014:10:25:53 +0900] “POST /phpMyAdmin/scripts/setup.php HTTP/1.1” 404 306 “http://[IP address]/phpMyAdmin/scripts/setup.php” “Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.01 [en]”
80.82.64.145 - - [24/Oct/2014:10:28:16 +0900] “POST /phpMyAdmin/scripts/setup.php HTTP/1.1” 404 306 “http://[IP address]/phpMyAdmin/scripts/setup.php” “Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.01 [en]”
180.180.244.51 - - [24/Oct/2014:10:28:56 +0900] “POST /phpMyAdmin/scripts/setup.php HTTP/1.1” 404 306 “http://[IP address]/phpMyAdmin/scripts/setup.php” “Mozilla/5.0 (compatible; MSIE 10.0; MSIE 8.0; Windows NT 6.1) Opera 7.01 [en]”
37.59.237.108 - - [24/Oct/2014:10:32:07 +0900] “POST /phpMyAdmin/scripts/setup.php HTTP/1.1” 404 306 “http://[IP address]/phpMyAdmin/scripts/setup.php” “Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.01 [en]”
180.180.244.51 - - [24/Oct/2014:10:36:37 +0900] “POST /phpMyAdmin/scripts/setup.php HTTP/1.1” 404 306 “http://[IP address]/phpMyAdmin/scripts/setup.php” “Mozilla/5.0 (compatible; MSIE 10.0; MSIE 8.0; Windows NT 6.1) Opera 7.01 [en]”
180.180.244.51 - - [24/Oct/2014:10:44:19 +0900] “POST /phpMyAdmin/scripts/setup.php HTTP/1.1” 404 306 “http://[IP address]/phpMyAdmin/scripts/setup.php” “Mozilla/5.0 (compatible; MSIE 10.0; MSIE 8.0; Windows NT 6.1) Opera 7.01 [en]”
178.33.28.208 - - [24/Oct/2014:10:47:37 +0900] “POST /phpMyAdmin/scripts/setup.php HTTP/1.1” 404 306 “http://[IP address]/phpMyAdmin/scripts/setup.php” “Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.01 [en]”
180.180.244.51 - - [24/Oct/2014:10:52:02 +0900] “POST /phpMyAdmin/scripts/setup.php HTTP/1.1” 404 306 “http://[IP address]/phpMyAdmin/scripts/setup.php” “Mozilla/5.0 (compatible; MSIE 10.0; MSIE 8.0; Windows NT 6.1) Opera 7.01 [en]”
178.33.28.195 - - [24/Oct/2014:10:54:10 +0900] “POST /phpMyAdmin/scripts/setup.php HTTP/1.1” 404 306 “http://[IP address]/phpMyAdmin/scripts/setup.php\r” “Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.01 [en]”
180.180.244.51 - - [24/Oct/2014:10:59:46 +0900] “POST /phpMyAdmin/scripts/setup.php HTTP/1.1” 404 306 “http://[IP address]/phpMyAdmin/scripts/setup.php” “Mozilla/5.0 (compatible; MSIE 10.0; MSIE 8.0; Windows NT 6.1) Opera 7.01 [en]”

(このログはトラブル対応後にとったもののため,リクエストに対して404を返しています) リクエストの大体がアメリカ,もしくはタイのサーバから来ているようです.

そして,サイトのコンテンツが改竄された時刻で調べると,これらのアクセスログの1つがぴたりと当てはまります.


phpMyAdminの脆弱性

このphpMyAdmin,MySQLのためのツールですが,脆弱性が指摘されているようです. といっても報告は2009年.

[phpMyAdmin の setup.php における任意の PHP コードを挿入される脆弱性] http://jvndb.jvn.jp/ja/contents/2009/JVNDB-2009-001443.html

phpMyAdmin 2.11.9.5以前,3.1.3.1以前のバージョンが対象らしい. 当環境を見ると…2.11.10? これを見ると対象には入っていないように見えるものの,攻撃に晒されていることはログが証明しています. 古いのにも間違いは無いし.

これを利用した攻撃は,いわゆるSQLインジェクション. 上述したPOSTリクエストによってサーバ内のsetup.phpが汚染され,こいつはconfig/config.inc.phpなるファイルを書き出します. 通常config.inc.phpはセットアップ時に経由するファイル. config.inc.phpには外部が任意のコードを実行できるインジェクションコードが埋め込まれており, これらsetup.phpとconfig.inc.phpがそろえば外部からの操作が可能になるという話だそうです.


 

対策

1. phpMyAdminを最新バージョンへアップデートする 2. phpMyAdminに対してアクセスを制限する(IPアドレス,認証(.htaccessなど)) 3. setup.phpを削除/パーミッションの変更 4. configディレクトリを削除/パーミッションの変更

今回は3と4を実行. アップデートが最善だとは分かっているものの, 他のコンテンツ閲覧にどれだけ影響が出るか判らないのでフットワークが軽い方法を選択. setup.phpを削除し,config.inc.phpのパーミッションを644から600へ.

access_logを再びみると,

37.59.237.109 - - [24/Oct/2014:13:08:43 +0900] “POST /phpMyAdmin/scripts/setup.php HTTP/1.1” 404 306 “http://[IP address]/phpMyAdmin/scripts/setup.php” “Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.01 [en]”

応答が200から404に変わっています.


 

POSTリクエストの中身を見る

ここからは趣味です. POSTリクエストのボディ部分には何が書かれているのか? 興味本位で調べてみます.

サーバ機はCentOS 5.11(これも古い)なので,パケットキャプチャにはtcpdumpを使用

 /usr/sbin/tcpdump -w ~/tcpdump.cap -s 0

一旦ふさいだ穴をもう一回開いて,tcpdumpを回しながらaccess_logを眺めているとものの数分で獲物がかかりました. こちらのどのポートを指してくるか判らないので,全てのパケットをキャプチャしているため時間がかかりすぎるとファイルサイズが大きくなりすぎる. さらに,今回はボディ部分が目当てのため,キャプチャをパケット先頭だけされても困るので”-s 0”を指定して全てキャプチャしてもらいます.

たった数分でも1MB弱になりました. これをWiresharkで読んでみる.

post

末尾に,URLがあります.これをダウンロードしてこいということなんでしょうね. 十分気をつけた環境の上でダウンロードしてみます.

php

これをそっくり使うと攻撃側に転じることができるようになるかと思われますのでみなまで載せませんが, ファイアウォールを無効にした後,外部からさらにアプリケーションファイルをダウンロードしてきて実行する趣旨のSQL文が書いてありました. さすがにこのアプリケーションファイルは怖いので触りません.

とはいえ,このSQL文中のシステム文はcmd.exeですね. 今回キャプチャしてみたパケットはWindowsを対象にしたものだった,ということでしょうか.


 

access_logを見ると5日間で2000件以上のリクエストがあったものの,実際に改竄を受けた回数は30回程度です. 今回の僕らのような良い鴨を見つけ次第,今回紹介した攻撃を自動的に行うようになっているんでしょうね.

にしても,これで外からの攻撃は防げたものの,既にサーバ内に巣食っているかどうかはまだ判らないな… 一回引っ越ししてクリーンな状況から始めたいかもしれない.