XQL クエリAPIを使用します。/public_api/v1/xql/start_xql_query からクエリを開始し、実行IDを返します。JSONで結果を取得するには /public_api/v1/xql/get_query_results を使用します。この呼び出しは最大1,000件の結果をインラインで返し、それ以上の場合はストリームIDを /public_api/v1/xql/get_query_results_stream に渡します。認証には2つのヘッダーを使用します: Authorization にAPIキーを、x-xdr-auth-id にそのIDを使用します。
Cortex XDRは、詳細なエンドポイントのテレメトリ、ネットワークデータ、IDデータを多くの展開で収集します。Prime Coreは676のMITRE ATT&CK技術にマップされた24,000以上のユニークな検出ルールを持っています。以下に、データを取り出し、消毒して無料でLogTotalで調査する方法を示します。
始める前に
APIキー。 Cortex XDRの設定で作成します(標準キータイプが最も簡単です)。XQLクエリを実行できるロールを持たせます。キーとそのIDをメモしておきます。
API URL。 キーを作成するときに表示されます。URLの形式は https://api-<tenant>.xdr.<region>.paloaltonetworks.com です。
ライセンスとクォータ。 XQL APIを使用するにはCortex XDR Proライセンスが必要です。クエリはXQLクォータに依存し、最大4つのAPIクエリを並行して実行できます。
データセット。 エンドポイントテレメトリは xdr_data にあり、agent_hostname、event_type、action_process_image_command_line、actor_process_image_name などのフィールドがあります。最初にクエリビルダーでクエリを構築します。
XQL APIでエクスポート
XDR="https://api-<tenant>.xdr.<region>.paloaltonetworks.com"
H1="Authorization: $XDR_API_KEY"
H2="x-xdr-auth-id: $XDR_API_KEY_ID"
# 1. クエリを開始する(時間枠をエポックミリ秒で)
QID=$(curl -sS -X POST "$XDR/public_api/v1/xql/start_xql_query" -H "$H1" -H "$H2" -H 'Content-Type: application/json'
-d '{"request_data": {"query": "dataset = xdr_data | filter agent_hostname = "WS-042" | fields _time, agent_hostname, event_type, action_process_image_name, action_process_image_command_line, actor_process_image_name", "timeframe": {"from": 1792368000000, "to": 1792454400000}}}'
| jq -r '.reply')
# 2. 結果を待つ
while :; do
RESP=$(curl -sS -X POST "$XDR/public_api/v1/xql/get_query_results" -H "$H1" -H "$H2" -H 'Content-Type: application/json'
-d "{"request_data": {"query_id": "$QID", "pending_flag": true, "format": "json"}}")
[ "$(echo "$RESP" | jq -r '.reply.status')" != "PENDING" ] && break
sleep 5
done
# 3. 最大1,000件の結果はインラインで; それ以上はストリームで
STREAM=$(echo "$RESP" | jq -r '.reply.results.stream_id // empty')
if [ -n "$STREAM" ]; then
curl -sS -X POST "$XDR/public_api/v1/xql/get_query_results_stream" -H "$H1" -H "$H2" -H 'Content-Type: application/json'
-d "{"request_data": {"stream_id": "$STREAM", "is_gzip_compressed": false}}" > xdr_ws042_1019.jsonl
else
echo "$RESP" | jq -c '.reply.results.data[]' > xdr_ws042_1019.jsonl
fi
上記のタイムフレームは2026年10月19日00:00 UTCから2026年10月20日00:00 UTCです。
LogTotalでアップロード、消毒、レビュー
- アップロード。 logtotal.com を開いて ファイルをドロップしてください。 消毒。
- レビュー。
- 問題が発生したとき
症状
| 考えられる原因 | キーとキーIDの交換、またはキーの有効期限切れ | Fix |
|---|---|---|
| 401 | Authorizationにキー、x-xdr-auth-idにID | ライセンスエラー |
| XDR Proライセンスがない | XQL APIはXDR Proが必要 | クォータエラー |
| XQLクォータが使い果たされた、または4つ以上の並行クエリ | 待つ; クエリを絞る | ちょうど1,000件の結果 |
| ストリームが使用されていない | ストリームIDで残りを取得する | クエリエラー |
| XQL構文 | 最初にクエリビルダーでテストする | インシデントとアラートをエクスポートできますか? |
FAQ
はい、それぞれのインシデントとアラートAPIを通じて可能です。LogTotalでは、背後にあるテレメトリをエクスポートします。
生のサードパーティログはどうですか?
Cortexに取り込んだ場合、それらは独自のデータセットにあり、同じ方法で出力されます。
If you ingest them into Cortex, they live in their own datasets and come out the same way.