こないだトヨタのホームページ改ざんのニュースもあり、アタックが増えたのか、それとも脆弱なコンテンツが増えたのかどちらなんでしょうかね。
もしかするとどっちもかもしれませぬ。
rootを持っているサーバーだったらなんとでもなりますが、レンタルサーバーの普及とともにrootは持ってないホームページ管理者が増えてます、rootがないと”対策”は難しいけど察知するのは早ければ早い方がいい!ってことで、改ざんに備えるスクリプトを考えてみました。
ホームページスペースだけを借りている人は使えません、そういう人はなんか別の方法を考えよう。
とりあえずCronが使えないとダメです。
たけけんの環境はさくらのレンタルサーバーのスタンダードです。
まずは下地作りからですが、さくらのレンタルサーバーは/home/アカウント名/wwwフォルダがドキュメントルートになります、別に作ってる人はwwwの下にもフォルダ名をつけよう。
ハッシュ値が入ったデータを2個作っときます。
見たら分かりますが、書き換えればアカウント配下の全部のチェックをすることも可能です。
find www/hoge -type f -exec md5 {} \; | awk '{printf("%s",$4)}' > ch0.dat find www/hoge -type f -exec md5 {} \; | awk '{printf("%s",$4)}' > ch1.dat
中身はこんな感じ。
$ cat ch0.dat 1adf3bac99c016f80215aa226c48295d6e0bcf9f07953c75f042aa7f2d6a9be9d19
ドキュメントルート配下のファイルすべてのハッシュ値が%sとストリングで入ってます。
ほいでもってch1.datだけに最新のハッシュ値を入れて比較して、変わっていればアラートを送るというスクリプトです。
#!/bin/sh find www/hoge -type f -exec md5 {} \; | awk '{printf("%s",$4)}' > ch1.dat CHECKA=`cat ch0.dat` CHECKB=`cat ch1.dat` if [ "${CHECKA}" != "${CHECKB}" ]; then echo 'tigau'; echo "henkouari" | mail -s "henkouari" test@example.com; exit 1; fi
echo ‘tigau’;はデバッグ用のもので実際の動作には意味ないです。
動作テストはindex.phpに1行追加して確認しました。
Cronは何時間か置きに回しておけばいいんでないかなと、ちなみにさくらのレンタルサーバーはFreeBSDなので、このシェルスクリプトもFreeBSDで動くような感じになっているはずです。
Linuxではテストしてないので、動かないかもしれない。
htmlcheck.shなんて名前を付けてみて、chmod 755 htmlchech.ch
こんな感じで5時間置きに実行する登録しとく。
あくまでファイルに変更があった時の察知なので、改ざんを防ぐものではないです。
対策の一環としてこういうこともあるんだなという事が伝われば幸いです。
ちなみにですがワードプレスで記事の更新をしてもデータベースが更新されるだけなので、この検知は動作しません。
あとターミナルで実行した場合とCronからの実行は環境変数とか変わってきたりするので、その辺も注意してね。
てな感じで、これからもよろしく~。