WEB サイト改ざん検知を手軽に行う応用編

WEB サイト改ざん検知を手軽に行う応用編

PHP プログラミングで手軽に改ざん検知!

PHPプログラミング

Gumblar による日本国内の WEB サイト改ざん被害が急増する中、当社で復旧のお手伝いをさせて頂いたほとんどのお客様は「改ざん予防の不備」が根本の問題です。そして過去に復旧・予防をお手伝いしたサイトで再発するケースはありません。つまり侵入経路をきちんと把握し、対策を立てていれば、WEB サイト改ざん被害に遭うことはまずありませんが…

しかし、ヒューマンエラーと言いましょうか、WEB サイトを管理そして運用するのは人間であり、ミスから牙城が崩れてしまう恐れも。ガチガチの対策を行っていると思える大手企業のサイトでも改ざん事故のニュースがあるくらいですから、予防だけの対策だけではなく、改ざん検知も含めた PDCA の対策が求められています。

なお、ニュースサイトだけではなく、改ざんサイト情報を収集して公開しているサイトもあるなど、専門家ではない一般人でも WEB サイト改ざん事故の認知度は常識となりつつあります。また事故を経験したサイトであれば、そのサイトを閲覧しているお客様側は一度失敗したのだからこれからは大丈夫と期待されているでしょう。

そして万が一、改ざん事故が再発したときに、お客様の指摘で改ざんを把握したのでは無責任な会社と思われてしまう風潮もあります。当たり前のように管理体制が問われており、企業としての信用を落としてしまいます。すなわち運営側で改ざん検知 → 速やかな復旧と予防といった管理体制が問われています。

そこで前回の「 PHPプログラミングでサイト改ざんを手軽にチェックする方法 」に続き(まずはこちらを読んでください)、改ざん検知のための応用のプログラミングを紹介します。PHP を使えばほとんどの改ざん検知が可能ですので、ぜひぜひ研究して役立ててください。

改ざん検知の定義について

PHP プログラムでは、例として既存に設置してある「.htaccess」ファイルの改ざん検知を行います。それではどのような状態だと改ざんとなるのでしょうか。

「.htaccess」ファイルは日常的に書き換えることはなく、デザイナーさんに作ってもらったサイトであれば、リニューアルする時くらいしか書き換えることはありません。そこでファイルに変更があった場合は異常ですので検知します。なお「.js」ファイルといったその他の改ざん対象となるファイルも同じく、リニューアル時くらいしか書き換えません。こちらも変更を把握することで改ざんを検知します。

変更を検知する方法としては MD5 を比較します。 MD5 はファイルの改ざんをチェックするための仕組みです。そして PHP で簡単に把握できます。事前に該当ファイルの MD5 を調べておき、比較することで変更を検知します。

なお、厳密には変更を検知することになりますが、変更を検知さえできればソースを確認し改ざんをチェックできますし、仮にソースが読めなくてもスタッフ間で変更したかどうか確認すれば改ざんと判断できます。

ちなみにですが、前回「改ざん検知のチェックとして、トップページのソース確認はとても有効です」と紹介しました。 WEB サイト改ざん事故の多くはトップページに改ざんが入るという統計的な根拠があります。ソース確認であればサッとできますのでプログラミングについては省略しますが、念のため、改ざん検知の定義についてふれておきます。

トップページや常に更新するページでは変更が多く、上記のような MD5 の比較は手間が多くなり現実的ではありません(変更しない過去記事での MD5 比較は有効です)。

ただし Gumblar による改ざんは「 iframe 」や「 JavaScript 」の記述が挿入されるので、これらの文字数をカウントする PHP プログラムを作り、増えることがないかチェックするのでも良いでしょう。これらの記述も日常的に書き換えることはなく、デザイン変更時しか記述しません。改ざん検知サービスの中には「 iframe 」と「 JavaScript 」の記述のみをチェックしている商品もありますし、実際に改ざん内容も「 iframe 」や「 JavaScript 」に限定されています。

なお、今後の改ざん動向がどうなるか不明ですので、一度設置したら終わりではなく、改ざん事故の変化とともに検知する条件を見直し、最適にプログラミングしてください。

PHP プログラミング

「.htaccess」ファイルや「.js」ファイルは、WEB サイトのリニューアルくらいでしか変更することがありません。そのため、MD5 を使い変更を検知すれば、手軽に改ざんを検知できます。関数は md5_file()です。

この関数で該当ファイルの MD5 を取得しておき、if 文でこの値が変化していないか比較します。もし変わった場合はソースを確認したり、スタッフ間で変更したかどうか確認し改ざんを確認してください。

まずは下記 PHP ファイルを作成し、該当ファイルの MD5 を取得しておきます。



<?php
echo md5_file('/home/orangess/www/.htaccess');
?>



例としてさくらインターネットさんは'/home/hoge/www/.htaccess'となり、お使いのレンタルサーバーに合わせてください。またさくらインターネットさんではドメイン直下の「.htaccess」という意味のパスになり、hoge は契約のアカウント名に変更してください。

このファイルを実行すると MD5 が取得できします。仮に上記ファイルをドメインの直下に「md5.php」で保存したなら、www.ドメイン名/md5.php と url を入力します。

md5

MD5 が表示されたらコピペしてください。ここでは「d41d8cd98f00b204e9800998ecf8427e」です。この値はそのファイルを変更しない限り変わりませんので比較の原本として使います。

次に改ざん検知用の下記 PHP ファイルを作成し、定期的に実行します。



<?php
if (md5_file('/home/orangess/www/.htaccess') == 'd41d8cd98f00b204e9800998ecf8427e') {
echo "OK";
} else {
echo "NG";
}
?>



このファイルを実行すると、ドメインの直下の「.htaccess」ファイルに変更がないか MD5 を比較します。変更がない場合は「 OK 」が表示され、変更があると「 NG 」を表示ます。仮に上記ファイルをドメインの直下に「md5if.php」で保存したなら、www.ドメイン名/md5if.php と url を入力します。

md5

なお、検証方法としては「.htaccess」ファイルを書き換えて、FTP でアップします。ファイルを変更したので「 NG 」と表示されます。ちなみに「.htaccess」ファイルは設定ファイルです。うかつなを変更するとサーバが正常に動作しなくなりますので、お使いのレンタルサーバで解説している事例などをコピペして FTP でアップしてください。検証後は元のファイルをアップし直します。