ログの海に溺れるな:SIEM相関分析が「ただの騒音」で終わるアーキテクトの慢心
多くのエンジニアが「CloudTrailをSIEMに流し込みました」と胸を張る。しかし、それは単なるストレージの肥大化であり、セキュリティではない。攻撃者はすでに、その「ログの海」に身を隠す術を知っているからだ。
今日は、AESやRSAといった数学的基盤の話は一度脇に置き、その暗号が守るべき「通信と操作のコンテキスト」をどう監視し、いかにして相関分析で攻撃者の意図を炙り出すか、その泥臭い現場のロジックについて話そう。
1. 静的な閾値監視は「死」を意味する
多くの組織がやっている「特定IPからの大量リクエストを検知」といったルールは、もはや無意味だ。プロの攻撃者は、CloudFrontやTor出口ノード、あるいは侵害済みのISP踏み台を使い、極めて低速かつ分散的なアクセス(Low-and-Slow)を行う。
真のSIEM相関分析とは、「認証基盤の振る舞い」と「ネットワークのメタデータ」の間に存在する論理的な不整合を突くことにある。
相関分析の解像度を上げるためのクエリ戦略
例えば、CloudTrailの AssumeRole イベントと、VPC Flow Logsの異常な通信先を組み合わせる。
-- 概念的な相関分析クエリ (例: Athena/SIEM向け)
-- 特定のIAMロールがAssumeされた直後、通常は通信しない外部IPへのSSH(22)通信が発生しているか
SELECT
trail.userIdentity.arn AS assumed_role,
flow.srcAddr,
flow.dstAddr,
flow.dstPort
FROM CloudTrail AS trail
JOIN VPCFlowLogs AS flow
ON trail.sourceIpAddress = flow.srcAddr
WHERE trail.eventName = 'AssumeRole'
AND flow.dstPort = 22
AND flow.dstAddr NOT IN (SELECT trusted_ip FROM vpc_whitelist) -- 事前定義された許可リスト外
-- ここで重要なのは「時間窓(Time Window)」の設定。
-- AssumeRole後、60秒以内の通信に絞り込むことで、ノイズを劇的に減らす。
2. 暗号化通信の裏側:TLS復号のジレンマと「見えない通信」
エンドポイントセキュリティの現場では、TLS 1.3が普及し、パケットキャプチャによる中身の確認が困難になっている。しかし、攻撃者はRSAの鍵交換の脆弱性など待っていない。彼らは「正規の暗号化されたトンネル」の中に、C2(Command & Control)通信を隠す。
ここで我々が監査すべきは、暗号そのものではなく「暗号化ハンドシェイクのメタデータ」だ。
- JA3フィンガープリントの活用: 通信の暗号化方式(暗号スイート)の組み合わせは、使用するライブラリやツールによって固有のパターンを持つ。
curlとPython requests、そして悪意あるマルウェアの通信は、たとえ暗号化されていても、JA3ハッシュ値で見分けることが可能だ。 - ガードレイルの設計: プロンプトインジェクション等によるLLMの悪用が懸念される今、アプリケーションの出口で「出力のベクトル」を監視し、機密情報の漏洩を遮断するプロキシを置くことは必須の防衛策だ。
3. 次世代の脅威:耐量子暗号(PQC)を見据えたアーキテクチャ
今、AES-256やRSA-4096で安泰だと思っているなら、それは大きな誤解だ。将来的な「Harvest Now, Decrypt Later(今盗んで、量子コンピュータが完成したら解読する)」攻撃に対しては、現時点でのログ管理すら脆弱性となり得る。
現在のセキュリティアーキテクトが取るべきスタンスはこうだ:
1. 暗号アジリティの確保: アルゴリズムをハードコードせず、設定ファイルやKMS経由で切り替え可能な設計にする。
2. ログの完全性保護: SIEMに送るログそのものに電子署名を施し、攻撃者が「ログを改ざんすることで自分の痕跡を消す」という古典的かつ最も効果的な手口を無効化する。
4. 現場のエンジニアへ:ログ設計の心得
最後に、SIEMをただの「ログの墓場」にしないための3つの鉄則を授ける。
- 「成功したログ」を減らせ: 失敗(403 Forbidden, 401 Unauthorized)のログにこそ、攻撃者の試行錯誤が詰まっている。成功ログはサンプリングし、失敗ログは全量保管して即座にアラートを飛ばせ。
- コンテキストを付与せよ: 単なるIPアドレスではなく、そのIPがどのリソースに紐づいているか、誰の所有物かをログ投入時にメタデータとして付与しておく。調査の初動時間を数時間短縮できる。
- ガードレイルをコード化せよ:
# AWS WAFでのガードレイル例 (特定パスへのアクセスを厳格化)
- Action: Block
MatchPattern:
UriPath: "/admin/config"
Condition:
- SourceIp: !Ref InternalNetworkRange # 内部ネットワーク以外は全て拒否
セキュリティとは、完璧な製品を買うことではなく、「何が正常か」を誰よりも深く理解し、そのわずかな逸脱をノイズの中から見つけ出す執念のことだ。
君たちのログ管理が、単なるデータの蓄積から、攻撃者を追い詰める「追跡装置」へと進化することを期待している。疑問があれば、いつでも深いレイヤの話をしよう。
コメント