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