buffer over flow 狙いのワームのログを残さない

ずいぶん前から気にはなっていたんだけど放置していた。しかし自分のサーバのログのほとんどがワーム(だって自分もほどんどアクセスしないし)なだけにこの状態はかなりチェックが難しい。急に思い立ってこのログが記録されないようにする方法を考えた。

失敗ってゆーかそりゃー無理な方法

しばらくこの方法に固執してた(恥ずかしー)

  • HTTP Status を元にアクセス制限
  • HTTP Status を元に SetEnvIf

無理っす。HTTP Status は実際のアクセスを受け取ったあとでセットされるものだけど、SetEnvIf やアクセス制限は HTTP リクエストヘッダで判断する。まだ Status はセットされてません。

Web で見つけた情報

AGOBOT のログを記録したくない - トラブル雑記帳

「CustomLog で 414 な status になったときの request を記録しないフォーマットにする」

って方法。CustomLog を変更しちゃうのが微妙に気持ち悪いけど、これは確実でなおかつ早い。上のページでの !414 ってのは通常のリクエストの中の 414 っていうパラメータにも反応しちゃうような気もするけど大丈夫でした。

他に思いついているだけで実践していない方法

  • フィルタを書く
    • これは Apache の再起動をせずにログの記録について柔軟な設定ができる。(フィルタは Apache と同時に Apache が起動してくれるし、落ちたら Apache が再起動してくれる。)この場合は 414 の status についてアクセスログを記録しないだけだから、まぁなんとか楽に書けそう。
  • WAF(Web Application Firewall)で弾く
    • mod_security というほんとの WAF でもいいし、mod_reqrite でも弾けるような気がする。Squid は使ったことないんで分からないけど、考え方は mod_rewrite + mod_proxy と同じだと思う。要するにワーム撃退用の Web サーバを本番サーバの前に置くってこと。やり方がタコだと必要なアクセスを弾いちゃう可能性があるのと、今回の目的にはやや大げさな点か。でも本番の Web サーバがより安全になるって意味では応用が効くし、考えてもいいかな。

More