0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Microsoft Sentinel にサンプルログ・攻撃シナリオを投入する OSS「Sentinel LogSeeder」を試す

0
Last updated at Posted at 2026-05-08

1. はじめに

Microsoft Sentinel の検証や PoC、分析ルール(Analytics Rule)のチューニング、ハンズオン研修などをやっていると、必ず突き当たるのが 「リアルなサンプルログがない」 という悩みがあります。

  • 顧客環境のログを使うのは NG..
  • 自分でログを書いて流し込むのは大変..
  • 攻撃シナリオを再現したい場合、複数テーブルにまたがる相関ログが必要..
  • ASIM や CommonSecurityLog、AWS、Okta などテーブルごとにスキーマが違って面倒..

こうした課題を解消するために作ったのが、本稿で紹介する Sentinel LogSeeder です。GitHub Copilot のエージェントモードと組み合わせて、自然言語で「CrowdStrike のサンプルログを入れて」「ブルートフォース → ラテラルムーブメントの攻撃シナリオを流して」とお願いするだけで、Log Analytics ワークスペースに整合性のあるサンプルログを投入できます。

本稿は、個人の見解に基づいた内容であり、所属する会社の公式見解ではありません。また、いかなる保証を与えるものでもありません。正式な情報は、各製品の販売元にご確認ください。

本ブログは AI の力を借りて作成しています。

2. Sentinel LogSeeder とは

Sentinel LogSeeder は、Azure Monitor Logs Ingestion API を経由して Log Analytics(Microsoft Sentinel)にサンプルデータを投入する PowerShell ツールキットです。GitHub Copilot のエージェントが .github/copilot-instructions.md と Skill ファイルを読み込み、スキーマ調査・DCE/DCR デプロイ・データ生成・取り込みまでを一気通貫で実行してくれます。

2.1 主な機能

機能 内容
製品名ベースのサンプルログ生成・取り込み 「CrowdStrike のログを入れて」と指示すると、エージェントが Sentinel コネクタのドキュメントを調べ、対応テーブル・スキーマを自動判定
単一テーブルの取り込み ASIM・CommonSecurityLog・AWS 系・カスタムテーブル(_CL)など任意のテーブルにサンプルログを投入
サンプルファイルからの取り込み JSON / CSV を渡すと、内容を解析してテーブル・スキーマを推定し取り込み
攻撃シナリオの取り込み 複数テーブルにまたがる相関のあるイベントを時系列で投入し、ストーリー性のある攻撃を再現
エンティティの一貫性 ユーザ・IP・端末・ドメインなどのエンティティプールを共有し、テーブル間で同じ実体を参照

2.2 アーキテクチャ

┌──────────────────────────────────────────────────────────────┐
│  GitHub Copilot Agent (Skill: sentinel-logseeder)            │
│   - ユーザ意図解釈 / スキーマ調査 / シナリオ選定                │
└──────────────────────────────────────────────────────────────┘
                          │
                          ▼
┌──────────────────────────────────────────────────────────────┐
│  PowerShell scripts                                          │
│   - Invoke-SampleDataIngestion.ps1   (単一テーブル)           │
│   - Invoke-AttackScenarioIngestion.ps1 (シナリオ)             │
└──────────────────────────────────────────────────────────────┘
                          │  Logs Ingestion API
                          ▼
┌──────────────────────────────────────────────────────────────┐
│  Azure Monitor                                               │
│   Data Collection Endpoint (DCE)                             │
│   Data Collection Rule (DCR)  ──►  Log Analytics ──► Sentinel│
└──────────────────────────────────────────────────────────────┘

2.3 サポートテーブル

Logs Ingestion API の制約により、投入できるのは以下のテーブルです。

  • カスタムテーブル_CL サフィックスのテーブル全般)
  • API 対応の組み込みテーブルASim*CommonSecurityLogSyslogSecurityEventAWS*GCP*CrowdStrike* ほか多数

逆に SigninLogs / AuditLogs / DeviceProcessEvents のような ベンダー管理テーブルは API 経由では書き込み不可なので、その場合は ASIM 系(例:ASimAuthenticationEventLogs)に置き換えます。

詳細は Logs Ingestion API — Supported Tables を参照してください


3. 活用例

3.1 分析ルールのテストデータ生成

新しい KQL 検出ルールを書いたとき、「ヒットさせるためのデータを Sentinel に投入したい」というケースは多いはずです。Sentinel LogSeeder なら、検出対象テーブル(例:ASimAuthenticationEventLogs)にだけサンプルログを集中投入し、ルールのトリガー条件を実機で確認できます。

3.2 攻撃シナリオベースの SOC 演習

複数テーブルにまたがる相関のあるイベントを投入できるため、SOC アナリストの演習に最適です。例えば「ブルートフォース成功 → RDP ラテラルムーブメント → LSASS ダンプ」という攻撃を、認証・ネットワーク・プロセスの 3 テーブルに整合した時系列で流し込めます。

3.3 検証環境での SIEM コネクタ事前確認

新規導入予定のコネクタ(CrowdStrike、Okta、Zscaler ZIA など)について、実コネクタを設定する前にダミーデータでダッシュボード・Workbook の見え方を確認できます。

3.4 Atomic Red Team 由来のシナリオ自動生成

Atomic Red Team の MITRE ATT&CK テクニックテストから、製品非依存のシナリオを自動生成する仕組みも備えています。scenarios/generated/ 配下に出力され、手書きシナリオと同じフォーマットで利用可能です。


4. 同梱の攻撃シナリオ紹介

scenarios/ 配下には、現場の調査で頻出する 4 つの攻撃シナリオがプリセットされています。

4.1 Brute Force + Lateral Movement

外部 IP からの認証失敗連発 → 成功 → 内部ホストへの RDP → プロセス実行、という横展開シナリオ。

Phase テーブル 内容
1 ASimAuthenticationEventLogs 同一 IP からの認証失敗を高頻度で繰り返し
2 ASimAuthenticationEventLogs 認証成功
3 ASimNetworkSessionLogs 内部 RDP セッション確立
4 ASimProcessEventLogs 偵察コマンド(whoami / net user 等)

4.2 Ransomware Deployment

フィッシングで侵害されたアカウントから、悪性プロセス実行 → 大量ファイル暗号化 → レジストリ永続化までの一連の流れ。Authentication / ProcessEvent / FileEvent / RegistryEvent の 4 テーブルに同期して投入されます。

4.3 Data Exfiltration

機微リソースへの特権アクセス → 大量ファイル読み取り → 外部への大規模アウトバウンド転送 → DNS トンネリング、という情報持ち出しシナリオ。AuditEvent / FileEvent / NetworkSession / DnsActivity をカバー。

4.4 Credential Theft + Privilege Escalation

侵害アカウント → LSASS メモリダンプ → 新規管理者ユーザ作成 → 特権セッション、という権限昇格シナリオ。

4.5 自作シナリオの作り方

scenarios/_template.json をコピーして JSON を書き換えるだけです。各 Phase に「対象テーブル」「件数」「相対時刻」「フィールドの上書き値」を指定でき、エンティティはシナリオ内で共有されます。

{
  "name": "my-scenario",
  "description": "...",
  "phases": [
    {
      "table": "ASimAuthenticationEventLogs",
      "count": 50,
      "timeOffset": "-30m",
      "overrides": { "EventResult": "Failure" }
    }
  ]
}

5. デプロイ方法

5.1 前提条件

  • GitHub Copilot の有効なサブスクリプション(エージェントモード利用のため)
  • Azure CLI (az login 済み) + log-analytics 拡張
  • PowerShell 7+
  • Microsoft Sentinel が有効化された Log Analytics ワークスペース
  • リソースグループ上の Azure RBAC
    • Log Analytics Contributor(DCE / DCR / カスタムテーブル作成)
    • User Access Administrator(DCR への Monitoring Metrics Publisher 付与)

5.2 リポジトリの取得

git clone https://github.com/your-org/sentinel-logseeder.git
cd sentinel-logseeder
code .

VS Code で開くと、エージェントモードが .github/copilot-instructions.md と Skill ファイルを自動的に読み込みます。

5.3 ワークスペース設定

config/workspace.json.templateconfig/workspace.json にリネームし、ワークスペース名のみ記載します(他の値は az のコンテキストから自動解決)。

{
  "workspaceName": "law-mgmt-sentinel-US"
}

tenantId / subscriptionId / resourceGroup / dceName などはエージェントが自動で解決してくれます。

config/workspace.json.gitignore 対象なので、誤コミットの心配はありません。

5.4 PowerShell の実行ポリシー

PowerShell スクリプトの実行のために、現在のユーザに対して一時的に Bypass を設定します(検証後は元に戻すことを推奨)。

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass

6. 使い方

6.1 単一テーブルへの取り込み(GitHub Copilot 経由)

VS Code のチャットで以下のように依頼するだけです。

AWSCloudTrail テーブルにサンプルログを 500 件入れて

エージェントが以下を自動実行します。

  1. schemas/AWSCloudTrail.json を読み込み(無ければ生成)
  2. DCE sample-data-dce を再利用 / 新規作成
  3. DCR sampledata-AWSCloudTrail を作成し Microsoft-AWSCloudTrail ストリームに出力
  4. ユーザに Monitoring Metrics Publisher を DCR スコープで自動付与
  5. エンティティプールから整合した値で 500 件生成
  6. Logs Ingestion API へ POST

確認は KQL で。

AWSCloudTrail
| where TimeGenerated > ago(30m)
| take 10

Log Analytics への反映には 5〜10 分ほどかかります。

6.2 単一テーブルへの取り込み(PowerShell 直接)

CLI でも実行可能です。例として Zscaler ZIACommonSecurityLog に投入する例です。

.\scripts\Invoke-SampleDataIngestion.ps1 `
  -TableName "CommonSecurityLog" `
  -Schema "schemas\CommonSecurityLog-ZscalerZIA.json" `
  -RowCount 500 `
  -Deploy -Ingest

実行ログ(抜粋):

Reusing existing DCE 'sample-data-dce'.
Creating DCR 'sampledata-CommonSecurityLog'...
DCR 'sampledata-CommonSecurityLog' created.
Infrastructure ready:
  DCE endpoint : https://sample-data-dce-xxxx.centralus-1.ingest.monitor.azure.com
  DCR immutable: dcr-5f48ff1eee6a43f29ccc712acf2760dd
  Stream       : Custom-CommonSecurityLog
[RBAC] Role assignment succeeded.
Generating 500 sample records...
Successfully ingested 500 records in 2 batch(es).

6.3 攻撃シナリオの取り込み

GitHub Copilot に以下を依頼すると、シナリオ全体が一気に投入されます。

brute-force-lateral-movement のシナリオを実行して

PowerShell から直接実行する場合:

.\scripts\Invoke-AttackScenarioIngestion.ps1 `
  -ScenarioFile "scenarios\brute-force-lateral-movement.json"

エージェントは複数テーブルにまたがるシナリオを実行する際、「ステージごとにどの製品のテーブルを使うか」をユーザに確認してから取り込みます(例:「エンドポイントは CrowdStrike か ASIM どちらにしますか?」)。

対応シナリオ一覧

scenarios/ 配下にプリセットされた手書きシナリオ 4 本と、Atomic Red Team から自動生成された MITRE ATT&CK テクニックシナリオ 10 本を備えています。

手書きシナリオ(scenarios/

シナリオ 目的(攻撃ストーリー) 主な対象テーブル MITRE
brute-force-lateral-movement 外部 IP からのブルートフォース成功 → 内部 RDP ラテラルムーブメント → 偵察コマンド実行 Authentication / NetworkSession / ProcessEvent T1110 / T1078 / T1021
ransomware-deployment フィッシング侵害アカウント → 悪性プロセス実行 → 大量ファイル暗号化 → レジストリ永続化 Authentication / ProcessEvent / FileEvent / RegistryEvent T1566 / T1486 / T1490 / T1547
data-exfiltration 機密リソースへの特権アクセス → 大量ファイル読み取り → 大規模アウトバウンド転送 → DNS トンネリング AuditEvent / FileEvent / NetworkSession / DnsActivity T1530 / T1041 / T1048 / T1071
credential-theft-privesc 侵害アカウント → LSASS メモリダンプ → 新規管理者ユーザ作成 → 特権セッション Authentication / ProcessEvent / UserManagement T1003 / T1136 / T1078

Atomic Red Team 自動生成シナリオ(scenarios/generated/

シナリオ 目的(テクニック) 主な対象テーブル
atomic-t1003-os-credential-dumping OS Credential Dumping(LSASS / SAM / NTDS の認証情報窃取) ProcessEvent / FileEvent
atomic-t1005-data-from-local-system Data from Local System(ローカル端末からの情報収集) FileEvent
atomic-t1021-remote-services Remote Services(リモートサービス経由のラテラルムーブメント) Authentication
atomic-t1053-scheduled-taskjob Scheduled Task/Job(タスクスケジューラ/cron による永続化) ProcessEvent / RegistryEvent
atomic-t1059-command-and-scripting-interpreter Command and Scripting Interpreter(PowerShell / cmd / WSH 実行) ProcessEvent
atomic-t1078-valid-accounts Valid Accounts(正規アカウント悪用) Authentication
atomic-t1110-brute-force Brute Force(パスワード総当たり) Authentication
atomic-t1136-create-account Create Account(新規アカウント作成による永続化) AuditEvent
atomic-t1486-data-encrypted-for-impact Data Encrypted for Impact(ランサムウェアによる暗号化) FileEvent / ProcessEvent
atomic-t1547-boot-or-logon-autostart-execution Boot or Logon Autostart Execution(起動時自動実行による永続化) RegistryEvent / ProcessEvent

自作シナリオを追加する場合は、scenarios/_template.json をコピーして JSON を編集するだけです(4.5 節参照)。

6.4 サンプルファイルからの取り込み

JSON や CSV のログファイルがあれば、内容をそのまま流し込めます。

このサンプル CSV を Sentinel に取り込んで

エージェントがファイル内容からテーブルを推定し、必要ならカスタムテーブルを作って取り込みます。

6.5 投入後の検証

検出ルールに引っかかるかどうかは Sentinel の Analytics Rule をデプロイして確認できます。本リポジトリには detections/custom-detection-rules.kql に 17 本のテンプレートルール(D01〜D17)が同梱されており、scripts/Deploy-AnalyticsRules.ps1 で一括デプロイできます。

.\scripts\Deploy-AnalyticsRules.ps1

同梱の 17 本は、本リポジトリの 4 つのプリセット攻撃シナリオ+ Atomic Red Team 由来シナリオで投入されるイベントを検出することを目的に設計されており、ASIM 系・Windows Security Event・OktaV2_CL を対象にしています。

ID 分析ルール名 目的(検出対象) Severity MITRE
D01 Brute Force: High Rate of Failed Logons from Single Source 単一 IP からの短時間・高頻度な認証失敗を ASIM Authentication で検知 Medium T1110
D02 Successful Logon Following Brute Force from Same Source 同一 IP の認証失敗バースト後 30 分以内の認証成功を相関させ侵害成立を高確度で検知 High T1078
D03 Internal RDP Lateral Movement 内部 RFC1918 間の RDP(3389/tcp)セッションをラテラルムーブメント兆候として検知 Medium T1021
D04 Reconnaissance Command Cluster on Endpoint 同一ユーザ/ホストで複数の Windows 偵察コマンドが連続実行される手動侵入パターンを検知 Medium T1082 / T1016 / T1087 / T1033
D05 LSASS Credential Dumping Indicators LSASS メモリダンプに用いられるツール・コマンドラインを検知 High T1003
D06 Local or Domain Administrator Account Created 新規ユーザ作成や特権グループ追加(Administrators / Domain Admins 等)を検知 High T1136 / T1098
D07 net.exe Used to Create User or Add to Admin Group net.exe / net1.exe によるユーザ作成・管理者グループ追加を検知 High T1098
D08 Suspicious Service Creation or Auto-Start Configuration ユーザ書き込み可能パスのバイナリを自動起動するサービス作成・再構成を検知 Medium T1543
D09 Office Application Spawning Script Interpreter Office プロセスがスクリプトインタプリタや LOLBin を起動する悪性マクロ/フィッシング兆候を検知 High T1059
D10 Shadow Copy or Backup Catalog Deletion ボリュームシャドウコピー削除・回復無効化など、ランサムウェアの復旧妨害を検知 High T1490
D11 Mass File Encryption or Ransom Note Creation ランサムウェア拡張子の大量書き込みや脅迫文ファイル作成を検知 High T1486
D12 Registry Run Key or Security Policy Tampering Run/RunOnce や Defender/Firewall ポリシーの改変による永続化/防御無効化を検知 Medium T1547
D13 Okta Sign-in Followed by Suspicious Endpoint Execution Okta サインイン成功と 30 分以内の不審プロセス実行を相関させ ID 侵害を検知 High T1566 / T1078
D14 Privileged Directory and Audit Enumeration Burst 単一 ID による特権・監査・ディレクトリ列挙の集中実行を検知 Medium T1087 / T1526 / T1069
D15 Bulk Access to Confidential File Share confidential / finance / hr / legal / board 配下の機密ファイルへの大量アクセスを検知 Medium T1039 / T1530
D16 Large Outbound Data Transfer to External Destination 内部から外部への 15 分あたり 100 MB を超えるアウトバウンド転送を検知 High T1048 / T1041
D17 DNS Tunneling to Suspicious Parent Domain 同一親ドメインへの長いラベルのサブドメインクエリ/TXT 多発による DNS トンネリングを検知 High T1071

image.png

7. ハマりポイントと回避策

7.1 HTTP 403 「The authentication token does not have access to ingest data」

DCR の Monitoring Metrics Publisher ロールがあるはずなのに 403 が返るケースがあります。

原因 対処
ロール伝搬待ち 5〜10 分待つ
DCR 側の認可キャッシュ不整合 DCR を一旦削除して再作成(同名でも OK)
トークンのテナント不一致 az account showtenantId を確認、必要なら az login --tenant <id>

ロールが付与されているかは以下で確認できます。

az role assignment list `
  --assignee "<your-objectId>" `
  --scope "<dcr-resourceId>" `
  --include-inherited -o table

7.2 サブテクニック ID(例:T1003.001)が Analytics Rule API に弾かれる

Sentinel の Alert Rule API は T#### 形式しか受け付けないため、Atomic Red Team 由来のサブテクニック ID は親テクニックに丸める必要があります(T1003.001T1003)。

7.3 _CL テーブルが見つからない

カスタムテーブルは Logs Ingestion API での投入に事前作成が必要です。Sentinel LogSeeder は -Deploy 時に自動でテーブルを作成しますが、テナント側で作成権限が無い場合はエラーになります。リソースグループスコープで Log Analytics Contributor を付与してください。

8. まとめ

  • Sentinel LogSeeder は、Microsoft Sentinel の検証・SOC 演習・分析ルール開発に必要な「リアルなサンプルログ」を、GitHub Copilot 経由で自然言語から投入できる OSS です
  • 単一テーブル投入だけでなく、複数テーブルにまたがる相関のある攻撃シナリオをプリセット(4 種)+ Atomic Red Team 自動生成でサポートしています
  • DCE / DCR / カスタムテーブル / RBAC のセットアップは -Deploy 一発で自動化されており、Logs Ingestion API の煩雑な構成を意識せずに使えます
  • SigninLogs などのベンダ管理テーブルには書き込めない」「サブテクニックは親に丸める」など、API 制約由来のハマりどころも本記事のハマりポイントを参考にすれば回避できます

ぜひ自分の Sentinel 検証環境にクローンして、自然言語で攻撃シナリオを投入してみてください!

本稿は、個人の見解に基づいた内容であり、所属する会社の公式見解ではありません。また、いかなる保証を与えるものでもありません。正式な情報は、各製品の販売元にご確認ください。


参考情報

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?