目次
1. なぜクエリ言語が必要なのか?
SOCアナリストは「大量のログ」から攻撃の痕跡を見つけ出す仕事です。
そのために必須となるのが ログ検索・分析用のクエリ言語。
- SIEM(Splunk, Microsoft Sentinel, QRadarなど)
- クラウド(AWS, Azure, GCP)
- データベースやログストレージ
どれも クエリを書けるかどうかで調査スピードが大きく変わる のです。
2. Splunk SPL(Search Processing Language)
Splunkは多くのSOCで使われている代表的なSIEMです。
SPL(Search Processing Language)を使って、ログから柔軟に抽出・可視化が可能です。
サンプルクエリ
失敗ログインイベントの検出
index=auth sourcetype=linux_secure "Failed password"
| stats count by user, src_ip
| where count > 5
👉 ユーザーごとに失敗ログイン回数をカウントし、5回以上の失敗を抽出。ブルートフォース攻撃を検知可能。
特定IPからのアクセス数確認
index=web sourcetype=apache_access src_ip="203.0.113.50"
| stats count by uri_path
👉 攻撃者IPがどのURLを狙っているかを分析。
3. KQL(Kusto Query Language / Microsoft Sentinel, Defender)
Microsoft SentinelやMicrosoft 365 Defenderで利用されるのがKQLです。クラウドSOCでは必須スキル。
サンプルクエリ
異常なサインイン(Impossible Travel検出)
SigninLogs
| extend Location = strcat(Tostring(LocationDetails["city"]), ", ", tostring(LocationDetails["countryOrRegion"]))
| summarize Count = count(), FirstSeen=min(TimeGenerated), LastSeen=max(TimeGenerated)
by UserPrincipalName, Location
| order by UserPrincipalName asc
👉 同一ユーザーが短時間で異なる国からログインしている場合を検出。
添付ファイル付きメールの検出
EmailEvents
| where AttachmentCount > 0
| project Timestamp, Subject, SenderFromAddress, RecipientEmailAddress, AttachmentCount
👉 フィッシングメールの初動調査に有効。
4. SQL(Database / 汎用ログ基盤)
SOCでは直接DB検索することもあります。SQLの基礎を押さえると他のクエリ言語にも応用が効きます。
サンプルクエリ
1時間以内に同一ユーザーで10回以上ログイン失敗
SELECT username, COUNT(*) AS fail_count
FROM login_logs
WHERE status = 'FAIL'
AND timestamp > NOW() - INTERVAL '1 hour'
GROUP BY username
HAVING COUNT(*) > 10;
外部通信先の異常IP確認
SELECT src_ip, dst_ip, COUNT(*) AS cnt
FROM netflow_logs
GROUP BY src_ip, dst_ip
ORDER BY cnt DESC;
5. 学習方法
- Splunk:無料の「Splunk Free」で演習可能
- KQL:Azure無料枠+Microsoft Learnのハンズオンが便利
- SQL:ローカルのDB(MySQL, PostgreSQL)やクラウド環境で練習可能
- Blue Team Labs Online / TryHackMe:SOC演習でクエリ練習ができる
6. まとめ
- Splunk SPL:オンプレSOCや大企業SOCでよく使われる
- KQL:クラウドSOC、Microsoft 365環境の調査に必須
- SQL:どんな環境でも基礎力として役立つ
👉 クエリは「日々の練習」で強くなります。最初はテンプレートを真似て、徐々に自分のユースケースに合わせてカスタマイズしていくのが上達のコツです。
コメント