こんにちは。セキュリティの最前線で泥臭いインシデント対応を続けている者です。
今日は「Webアプリケーションのログ監視とSIEM連携」という、一見すると地味で難解なテーマを扱います。「ログなんて取っておけばいいんでしょ?」と思っているそこのあなた、その油断こそが攻撃者の狙い目です。
今回は、セキュリティ初心者の方に向けて、専門用語を一切使わずに「泥棒と防犯カメラ」の例えで解説していきますね。
—
1. ログとは、あなたの家の「防犯カメラ」です
想像してみてください。あなたは大切な家(Webアプリケーション)を守る家主です。玄関には頑丈な鍵(認証機能)をかけていますよね。でも、もし泥棒が窓を割って侵入しようとしたら、あるいは合鍵を作って静かに入ってきたらどうでしょう?
鍵をかけているだけでは、「いつ、誰が、どこから侵入したか」を知ることはできません。ここで必要になるのが「防犯カメラ」、つまり「ログ」です。
セキュリティの世界でログを取る目的は、単なる記録ではありません。「攻撃者がどんな手口で扉をこじ開けようとしているか」という痕跡を残し、それをいち早く察知することにあります。
2. ログには「何を」記録すべきか?
開発現場でよくあるミスが、「エラーログだけ出せばいいや」という考え方です。しかし、本当に恐ろしい攻撃者は、エラーすら出さずに静かに侵入します。以下の項目は、最低限「カメラの画質」として確保しておきたいポイントです。
- 誰が(User ID): どのユーザーアカウントが操作したか。
- いつ(Timestamp): ミリ秒単位で正確な時刻。
- どこから(Source IP): どこの国やネットワークからのアクセスか。
- 何をしたか(Action): ログイン試行、パスワード変更、権限の昇格など。
- 結果はどうだったか(Status Code): 成功(200)したのか、拒否(403)されたのか。
実践:ログ出力のイメージ(JSON形式)
最近のログは、人間が読むのではなく「機械が解析しやすい形式」で出すのが鉄則です。
{
“timestamp”: “2023-10-27T10:00:00Z”,
“user_id”: “user_1234”,
“action”: “login_attempt”,
“source_ip”: “192.168.1.50”,
“status”: “failed”,
“message”: “パスワードが一致しませんでした” // これが大量に並ぶと、ブルートフォース攻撃の兆候です
}
—
3. SIEM(シーム)って何?:最強の「警備センター」
ログを溜めるだけでは、家主が24時間365日モニターを凝視し続ける必要があります。それは無理ですよね。そこで登場するのがSIEM(SplunkやCloudWatch Logsなど)です。
SIEMは、例えるなら「異常を検知すると自動で警報を鳴らしてくれる警備センター」です。
「5分以内に同じIPから100回ログイン失敗があったらアラートを出す」といったルールを設定しておけば、深夜だろうと休日だろうと、機械が瞬時に異常を察知して担当者のスマホに通知を飛ばしてくれます。
CloudWatch Logsでのフィルタリング例
例えば、AWS CloudWatch Logsで「不正ログインの試行」を検知するフィルターの書き方はこんな感じです。
フィルタパターン:ログイン失敗という単語が含まれるログを抽出
{ $.status = “failed” && $.action = “login_attempt” }
このフィルターに「5分間に10件以上ヒットしたら通知する」という設定(メトリクスフィルターとアラーム)を組み合わせるだけで、立派な「自動防犯システム」の完成です。
—
4. なぜこれが「最強の防御」になるのか?
多くの開発者は「ファイアウォールを立てたから安心だ」と考えがちです。しかし、ファイアウォールは「外からの攻撃」を弾くだけです。もし攻撃者が「正規のIDとパスワード」を盗んでログインしてきたら? ファイアウォールはそれを「正当なユーザー」だと勘違いして通してしまいます。
だからこそ、「中の動き」をログで監視し、「いつもと違う動き(異常)」をSIEMで検知するという二段構えが必要なんです。
最後に:一歩ずつ対策を積み重ねよう
「SIEMなんて導入する予算がない…」という場合でも、まずは「ログをJSON形式で構造化して出力する」ことから始めてください。それができていれば、将来的にどんなツールを導入しても、すぐに強力な監視体制が作れます。
セキュリティは、一度に完璧にする必要はありません。まずは「家の防犯カメラ」を正しく配置することから、一緒に一歩ずつ進んでいきましょう。
何か分からないことがあれば、いつでも質問してくださいね。現場からは以上です!

コメント