phpMyAdminをハッキングしている記録と対策方法
サーバーのアクセスログを監視していて、phpMyAdminに対して攻撃(ハッキング)用のアクセスが見つかったので、公開しておきます。
config.inc.phpへのアクセス
phpMyAdminへの攻撃はセットアップ用の「setup.php」と環境設定を行う「config.inc.php」へのアクセスが特徴です。 代表的なログは以下のようなものです。
//phpmyadmin/config/config.inc.php?p=phpinfo(); //pma/config/config.inc.php?p=phpinfo(); //admin/config/config.inc.php?p=phpinfo(); //dbadmin/config/config.inc.php?p=phpinfo(); //mysql/config/config.inc.php?p=phpinfo(); //php-my-admin/config/config.inc.php?p=phpinfo(); //myadmin/config/config.inc.php?p=phpinfo(); //PHPMYADMIN/config/config.inc.php?p=phpinfo(); //phpMyAdmin/config/config.inc.php?p=phpinfo(); //p/m/a/config/config.inc.php?p=phpinfo();
GETメソッドのクエリーに「p=phpinfo()」を付加してアクセスしています。
どういったスクリプトによって攻撃が行われているか
これは検索していて見つけたのですが、公開すると危ないので伏せておきます。
具体的に攻撃を受けるバージョンは以下のように書いてあります。
- phpMyAdmin 2.11.9.5以前の2.11.xのバージョン
- phpMyAdmin 3.1.3.1以前の3.xのバージョン
攻撃の準備
事前にURLが集めてある
これは対策のしようがないんですが、攻撃側は有効そうなサイトのphpMyAdminのベースURLを集めておくようです。 これが攻撃のターゲットとしてテキストファイルに収められます。
phpMyAdmin/scripts/setup.phpにアクセス
これはsetup.phpにアクセスすることでそこにphpMyAdminが存在しているかどうかをチェックしています。 存在していればターゲットとしてロックオンされるわけです。
phpMyAdmin/scripts/setup.phpを汚染
setup.phpには即座に変数汚染用のPOSTデータが送られます。 これで第一の攻撃準備を行います。 この時点でMySQLをrootユーザーで制御するように変更されます。
config.inc.phpでphpinfo()が実行できるか確認する
さきほどの攻撃準備で、config.inc.phpに対してphpinfo()が実行できるかどうかをチェックします。
再度setup.phpを汚染
再びsetup.phpに対してPOSTデータを送り、設定をいじります。
攻撃準備完了
これで、config.inc.phpが完全にクラッキングされ、GETメソッドによるシェルコマンドの実行や任意のphp関数が簡単に実行可能になってしまいます。 よくセキュリティーホールのニュースなどで「任意のプログラムが実行可能となる」というのがまさにこのことです。
対策は?
以上のように、ターゲットとなるファイルはsetup.phpと、config.inc.phpです。 この2つを削除するなどしてアクセスさせないようにするのが有効です。
削除した上でphpMyAdminのディレクトリにはIPアドレス制限などを施して外部からのアクセスを遮断するとか、phpMyAdminのプログラムを最新版にアップデートするなどして回避するようにしてください。
2009-10-30
2 件のコメント
こんにちは。
警察庁からも同じような攻撃の報告書が出ていましたのでお知らせしておきます。
http://www.cyberpolice.go.jp/server/rd_env/
http://www.cyberpolice.go.jp/server/rd_env/pdf/20100225_WebApp.pdf
securityさん、情報ありがとうございました。 実際にpingコマンドやcatコマンドを実行した結果なども掲載してありますね。 非常に参考になりました!