いわゆるガンブラーと呼ばれる攻撃はFTPアカウントなどを乗っ取って不正なファイルを配置する攻撃です。PHPのセキュリティ対策とは関係ありませんが、
ガンブラーとは?
Wikipediaでは
Gumblar
(ガンブラー) とは、 「Webサイト改ざん」 と 「Web感染型ウイルス (Webサイトを閲覧するだけで感染するウイルス)」を組み合わせて、 多数のパソコンをウイルスに感染させようとする攻撃手法 (手口) のことである[1][2]。 同攻撃に関連するマルウェアを指す意味でも多用されるが、
どの範囲のマルウェアを指すのかはメディアによって様々である。
http://
と定義されています。
ウイルスの名称というより、
直接攻撃用のファイルを配置されない場合でも、
Wikipediaの対策にも
サイトの更新頻度が低く、
ガンブラー対策
ガンブラーによる攻撃はアンチウイルスソフトでWebサーバを内部、
ガンブラー対策は通常の不正改ざんチェックの手法がほとんどそのまま利用できます。以下の条件に一致するサイトであれば比較的簡単にガンブラー対策を行えます。
- 更新頻度低い
- 個人向けのカスタマイズを行っていない
この条件に一致するサイトはかなり多いと思います。ほとんどの会社のホームページはこの条件に一致するサイトでしょう。
2つのコンテンツ改ざん
コンテンツを改ざんする手法は大き分けて2つあります。
- ファイルを直接改ざんまたは配置
- データベースのデータを改ざんまたは挿入
ファイルを直接改ざんする手法は乗っ取ったFTPアカウントなどを通じて行われます。データベースのデータを改ざんする手法は、
ファイル改ざんの検出
UNIX系のOSであればサーバ側ファイルの改ざんの検出は簡単なツールの組み合わせで行えます。Web開発者であれば誰でも使ったことがある
ファイルを直接配置するタイプの攻撃であれば、
バックアップファイルをWebサーバに配置している場合、
まず、
sshとrsyncが利用可能な環境であれば、
$ rsync -e ssh -av www.example.com:/var/www backup
同じ手順で定期的にWebサーバのバックアップファイルを取得し、
$ rsync -e ssh -av www.example.com:/var/www current $ diff -urN backup current > mod.txt
mod.
シェルスクリプトにしてcronなどで定期的にチェックすれば確実にファイルの改ざんを検出できるようになります。
rsyncの代わりにsshfsやnfsなどを利用し、
データベースの改ざんの検出
最近のWebサイトはSQLデータベースを利用した動的なサイトが主流でしょう。SQLデータベースのデータ改ざんをチェックする方法が一番確実です。データベースをアクセスログの記録やセッション管理に利用していないなら、
PostgreSQLの場合、
log_statement = 'mod'
を追加します。変更関連クエリが記録されるようになります。
MySQLの場合、
SQL文のログファイルをgrepコマンド使ってチェックすれば改ざんを検出できます。
$ grep -i "INSERT¥|UPDATE¥|DELETE" logfile > mod.txt
mod.
予め知っておくべきことは、
コンテンツの改ざん検出
データベースの改ざん検出を利用できないサイトも多いかと思います。CMSを利用したサイトではアクセスログやエラーログ、
このような場合にSQL文のINSERT、
このような場合はwgetコマンドを利用してコンテンツ改ざんをチェックするとよいでしょう。手順はファイルベースの比較とほとんど変わりません。
まず現在のコンテンツの状態のバックアップを取得します。
$ wget -r -e robots=off --cookies=off --header='Cookie: PHPSESSID=xxx' http://example.com $ mv example.com example.com-bakcup
ログインが必要なサイトではCoookieヘッダで既にブラウザなどで取得したセッションIDを設定します。必要なければ省略して構いません。
ローカルのファイルシステムにコピーが出来上がるので、
$ wget -r -e robots=off --cookies=off --header='Cookie: PHPSESSID=xxx' http://example.com $ diff -urN example.com-bakcup example.com > mod.txt
コンテンツを比較する方法は手軽ですが、
まとめ
しっかしとしたサイトではサイトの改ざんチェックのみでなく、
コンテンツ改ざんのチェックには、
広く使われているサイトでは簡単なシェルスクリプトでチェックできるので、