コンテンツにスキップ

システムテーブル

CSIRT-Pro には、組織ごとに自動的に作成される システムテーブル があります。

これらのテーブルには、ケース、脅威情報、チャットなどのプラットフォーム内部データが格納されています。 ユーザーが作成した Pipeline と同じく、PRQL クエリで検索・分析できます。


システムテーブル一覧

テーブル名 説明 主な用途
messages ケース(スレッド)の本文メッセージ ケース本文の検索、統計、レポート
message_meta ケースのステータス・分類などのメタデータ ステータス別・分類別の集計
reply_messages ケースへの返信メッセージ 調査コメントの検索、チーム活動分析
vulnerabilities 脆弱性(CVE)情報 脆弱性検索、影響調査
indicators 脅威インジケータ(IOC)情報 IOC 検索、脅威ハンティング

システムテーブルの制約

  • システムテーブル名は Pipeline 名として使用できません(予約済み)。
  • システムテーブルは読み取り専用です(データはプラットフォームが自動管理します)。
  • UI から通常の Pipeline と同様に PRQL で検索できます(必要な内部指定は自動で行われます)。

ステータスと分類の格納場所

ケースの ステータス(status分類(classification は、messages ではなく message_meta に格納されます。 ステータス別・分類別に集計する場合は message_meta を参照してください。


messages(ケース本文テーブル)

ケース(スレッド)の本文メッセージが格納されるテーブルです。

主なフィールド

フィールド 説明
__time 日時 タイムスタンプ
message_id String メッセージ / ケース ID
thread_id String スレッド ID
user String 作成者
content String 本文
created_at 日時 作成時刻
reply_to String 返信先メッセージ ID
tags Map(String → String) タグ(severity などのキーを持つ)
embedding_vector 配列 類似ケース検索に用いる埋め込みベクトル

クエリ例

# 直近のケース本文
from `messages`
sort {-__time}
take 50
# tags から severity を取り出して絞り込み
from `messages`
derive {severity = get_map tags "severity"}
filter severity == "high"
sort {-__time}
# 作成者別の件数
from `messages`
group {user} (
  aggregate {cnt = count this}
)
sort {-cnt}

message_meta(ケースメタデータテーブル)

ケースのステータス、分類などのメタデータが格納されます。

主なフィールド

フィールド 説明
__time 日時 タイムスタンプ
message_id String 対象ケースの ID
thread_id String スレッド ID
status String ステータス(open / inprogress / resolved 等)
classification String 分類
updated_by String 最終更新者
updated_at 日時 最終更新時刻
tags Map(String → String) タグ

クエリ例

# オープン中のケース一覧
from `message_meta`
filter status == "open"
sort {-__time}
take 50
# 分類別のケース件数
from `message_meta`
group {classification} (
  aggregate {cnt = count this}
)
sort {-cnt}
# ステータス別のケース件数
from `message_meta`
group {status} (
  aggregate {cnt = count this}
)
sort {-cnt}

reply_messages(返信メッセージテーブル)

ケースに対する調査コメントや返信メッセージが格納されます。

主なフィールド

フィールド 説明
__time 日時 返信日時
message_id String メッセージ ID
thread_id String 親ケースのスレッド ID
user String 返信者
content String 返信内容
reply_to String 返信先メッセージ ID

クエリ例

# 直近の調査コメント
from `reply_messages`
sort {-__time}
take 100
# アナリスト別の活動量(直近 30 日)
from `reply_messages`
filter __time > (now) - (to_interval_day 30)
group {user} (
  aggregate {reply_count = count this}
)
sort {-reply_count}

vulnerabilities(脆弱性テーブル)

CVE データベースから取得した脆弱性情報が格納されます。

主なフィールド

フィールド 説明
id String CVE ID(例: CVE-2024-12345
product String 対象製品名
severity String 深刻度(CRITICAL / HIGH / MEDIUM / LOW
kev Boolean 既知の悪用脆弱性(KEV)かどうか
fixed_in String 修正済みバージョン

__time を持ちません

vulnerabilities には __time がないため、sort {-__time} は使えません。 並べ替えは idseverity などの実在するフィールドで行ってください。

クエリ例

# CRITICAL な脆弱性
from `vulnerabilities`
filter severity == "CRITICAL"
sort {id}
take 50
# 特定製品の脆弱性検索
from `vulnerabilities`
filter product ~= "nginx"
# KEV(既知の悪用脆弱性)のみ
from `vulnerabilities`
filter kev == true
# 深刻度別の件数
from `vulnerabilities`
group {severity} (
  aggregate {cnt = count this}
)
sort {-cnt}

indicators(脅威インジケータテーブル)

脅威フィードから収集された IOC(Indicator of Compromise)データが格納されます。

主なフィールド

フィールド 説明
__time 日時 タイムスタンプ
value String IOC の値(IP, ドメイン, ハッシュ等)
indicator_type String インジケータタイプ(ip-src / domain / md5 / sha256 等)
category String 脅威カテゴリ
threat_level String 脅威レベル(high / medium / low
feed_name String フィード名
feed_provider String フィード提供元
first_seen / last_seen 日時 初回 / 最終観測日時
comment String 補足
tags 配列 関連タグ

クエリ例

# 高リスクの IOC 一覧
from `indicators`
filter threat_level == "high"
sort {-__time}
take 100
# IP アドレス型の IOC
from `indicators`
filter indicator_type == "ip-src"
sort {-__time}
take 50
# 特定の IOC を検索
from `indicators`
filter value == "192.168.1.100"
# フィード別の IOC 件数
from `indicators`
group {feed_name} (
  aggregate {cnt = count this}
)
sort {-cnt}

テーブル同士の結合

システムテーブル同士、またはユーザーが作成した Pipeline と結合して、データを突き合わせて分析できます。

例: ケース本文とステータスの突合(messages × message_meta

from `messages`
join `message_meta` (==message_id)
filter message_meta.status == "open"
select {messages.__time, messages.content, message_meta.status, message_meta.classification}
sort {-messages.__time}
take 50

例: ファイアウォールログと IOC の突合

firewall_logs の部分は、ご自身で作成した Pipeline 名に置き換えてください。

from `firewall_logs`
join `indicators` (this.src_ip == that.value)
filter indicators.threat_level == "high"
select {__time, src_ip, dst_ip, action, indicators.category, indicators.feed_name}
sort {-__time}
take 100

Search UI でのシステムテーブルの利用

Search 画面からシステムテーブルをクエリする手順は次のとおりです。

  1. クエリエディタに frommessages`` などのシステムテーブル名を入力します。
  2. 通常のクエリと同じ操作で検索・可視化ができます(必要な内部指定は UI が自動で行います)。

フィールドリスト

フィールドリスト(左側パネル)には、選択したテーブルの利用可能なフィールドが表示されます。 フィールド名のスペルに迷ったら、まずフィールドリストで確認してください。