Webサーバーの「見えない侵入者」をあぶり出せ!ファイル監視(FIM)で守る安全なサイト運営
こんにちは!セキュリティの世界へようこそ。
突然ですが、皆さんの家の玄関に「知らない鍵穴」が勝手に追加されていたら、どう思いますか?ゾッとしますよね。Webサーバーの世界でも、これと全く同じことが起きています。
今回は、攻撃者がこっそり仕込む「Webシェル」という厄介な置き土産を、ファイル整合性監視(FIM: File Integrity Monitoring)を使って見つけ出す方法を解説します。難しい言葉を並べる前に、まずは「泥棒の心理」から紐解いていきましょう。
—
1. なぜ「Webシェル」は恐ろしいのか?
Webシェルとは、攻撃者がWebサーバーを自分の思い通りに操るために置く「隠しコマンド窓」のような小さなプログラムです。
攻撃者は、あなたのサイトの「お問い合わせフォーム」や「画像のアップロード機能」のちょっとした隙を突いて、サーバーの中に evil.php のようなファイルをこっそり作成します。一度このファイルが設置されると、攻撃者はブラウザからそのファイルにアクセスするだけで、サーバーの中身を覗いたり、データを盗んだり、サイトを改ざんしたりできてしまうんです。
いわば、「あなたの家の合鍵を、勝手に作られてしまった状態」です。
—
2. 泥棒を検知する「センサー」を設置しよう(FIMの考え方)
泥棒が入ってきたことに気づくには、「誰がいつ、どの窓を開けたか」を記録するセンサーが必要です。これがFIMです。
Linuxの世界では、auditd という強力な監視ツールが標準装備されています。これを使えば、「公開ディレクトリに新しいファイルが作成された瞬間にログを飛ばす」といった設定が可能です。
ステップ1:auditdでディレクトリを監視する
まずは、サーバー内の特定のディレクトリ(例:/var/www/html/uploads)を監視対象に設定しましょう。
# /etc/audit/rules.d/audit.rules に以下を追加します
# -w: 監視対象のパス
# -p wa: 書き込み(w)と属性変更(a)を監視する
# -k: ログ検索用のラベル(web-shell-watchと名付けます)
-w /var/www/html/uploads/ -p wa -k web-shell-watch
設定を反映させたら、サービスを再起動します。これで、このフォルダ内で何かが作成・変更されるたびに、システムログに記録が残るようになります。
—
3. ログを「アラート」に変える
ログを取るだけでは、泥棒が入ったことに気づけませんよね。そこで登場するのが OSSEC などのツールです。これらは「ログの中に怪しい動きがないか」を24時間監視し、何かあれば管理者にメールやチャットで通知を飛ばしてくれます。
例えば、攻撃者がよく使う system() や exec() といったコマンドを含んだPHPファイルが作成された場合、以下のようなアラートを飛ばす設定が有効です。
監視のヒント:怪しいファイルを見分ける
攻撃者は、一見無害そうな名前に化けています。以下のようなファイルが突然作成されたら要注意です。
shell.phpconfig_backup.php(中身がPHPのコードになっている).htaccess(アクセス制御を無効にするための設定ファイル)
もし自分で開発しているサイトなら、「アップロードされたファイルは絶対に実行させない」という大原則を守りましょう。ApacheやNginxの設定で、アップロード用ディレクトリからのPHP実行を禁止するのが一番の防犯対策です。
# .htaccess でのPHP実行禁止例
<Directory "/var/www/html/uploads">
# このフォルダ内ではPHPをただのテキストとして扱い、実行させない
php_flag engine off
RemoveHandler .php .phtml .php3
</Directory>
—
4. セキュリティは「完璧」を目指さない
ここで少し大事な話をします。セキュリティ対策に「これで終わり」はありません。FIMを導入しても、攻撃者はまた新しい手口を考えてきます。
だからこそ、「あれ?さっきログに記録されたファイル、何だろう?」と疑問を持つことが、最強の防御になります。
1. 定期的な棚卸し: サーバーの中に「いつ作ったか分からないファイル」がないか、月に一度は確認しましょう。
2. 最小権限の原則: Webサーバーのプログラムは、自分自身で新しいファイルを作れない権限にしておくのが理想です。
3. アラートを放置しない: 「どうせ誤検知だろう」と放置したログの中に、本物の侵入者が隠れています。
—
最後に:一歩ずつ進めば大丈夫!
「監視」と聞くと難しく感じるかもしれませんが、まずは「自分のサーバーで何が起きているかを知る」という第一歩から始めてみてください。
最初はコマンドを打つのも怖いかもしれませんが、今の操作一つひとつが、大切なユーザーのデータと、あなたの作ったWebサイトを守るための「頑丈な鍵」になっていきます。
何か分からないことがあれば、いつでもまた聞きに来てくださいね。一歩ずつ、一緒にセキュリティの階段を登っていきましょう!
コメント