システムテーブル
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 |
配列 | 類似ケース検索に用いる埋め込みベクトル |
クエリ例
# tags から severity を取り出して絞り込み
from `messages`
derive {severity = get_map tags "severity"}
filter severity == "high"
sort {-__time}
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) | タグ |
クエリ例
reply_messages(返信メッセージテーブル)
ケースに対する調査コメントや返信メッセージが格納されます。
主なフィールド
| フィールド | 型 | 説明 |
|---|---|---|
__time |
日時 | 返信日時 |
message_id |
String | メッセージ ID |
thread_id |
String | 親ケースのスレッド ID |
user |
String | 返信者 |
content |
String | 返信内容 |
reply_to |
String | 返信先メッセージ ID |
クエリ例
# アナリスト別の活動量(直近 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} は使えません。
並べ替えは id や severity などの実在するフィールドで行ってください。
クエリ例
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 |
配列 | 関連タグ |
クエリ例
テーブル同士の結合
システムテーブル同士、またはユーザーが作成した 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 画面からシステムテーブルをクエリする手順は次のとおりです。
- クエリエディタに
frommessages`` などのシステムテーブル名を入力します。 - 通常のクエリと同じ操作で検索・可視化ができます(必要な内部指定は UI が自動で行います)。
フィールドリスト
フィールドリスト(左側パネル)には、選択したテーブルの利用可能なフィールドが表示されます。 フィールド名のスペルに迷ったら、まずフィールドリストで確認してください。