XQL 쿼리 API를 사용하세요. /public_api/v1/xql/start_xql_query로 쿼리를 시작하면 실행 ID가 반환됩니다. JSON 형태로 /public_api/v1/xql/get_query_results에서 결과를 가져옵니다. 이 호출은 최대 1,000개의 결과를 인라인으로 반환하며, 그 이상의 결과는 /public_api/v1/xql/get_query_results_stream에 전달할 스트림 ID로 반환됩니다. 인증에는 두 개의 헤더가 사용됩니다: Authorization에 API 키를 입력하고, x-xdr-auth-id에 그 ID를 입력하세요.
Cortex XDR은 많은 배포에서 상세한 엔드포인트 원격 조정 및 네트워크, 아이덴티티 데이터를 수집합니다. Prime Core는 24,000개 이상의 고유한 탐지 규칙을 보유하고 있으며, 이는 676개의 MITRE ATT&CK 기법에 매핑됩니다. 아래에서는 LogTotal에서 데이터를 추출하고, 정제하고, 무료로 조사를 수행하는 방법을 설명합니다.
시작하기 전에
API 키. Cortex XDR 설정에서 하나를 생성하세요 (표준 키 유형이 가장 간단합니다). XQL 쿼리를 실행할 수 있는 역할이 필요하며, 키와 그 ID를 기록하세요.
API 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 그리고 파일을 드롭합니다.
- 정제.
- 검토.
문제가 발생할 때
| 증상 | 가능한 원인 | Fix |
|---|---|---|
| 401 | 키와 키 ID가 교체되었거나 키가 만료됨 | Authorization에 키, x-xdr-auth-id에 ID |
| 라이선스 오류 | XDR Pro 라이선스 없음 | XQL API는 XDR Pro가 필요함 |
| 할당량 오류 | XQL 할당량이 다 되었거나 4개 이상의 병렬 쿼리 | 기다리거나 쿼리를 좁히세요 |
| 정확히 1,000개의 결과 | 스트림이 사용되지 않음 | 스트림 ID로 나머지를 가져오세요 |
| 쿼리 오류 | XQL 문법 | 먼저 쿼리 빌더에서 테스트하세요 |
FAQ
사건과 경고를 내보낼 수 있나요?
네, 별도의 사건 및 경고 API를 통해 가능합니다. LogTotal의 경우, 그 뒤에 있는 원격 조정 데이터를 내보내세요.
원시 서드 파티 로그는 어떤가요?
Cortex에 수집하면, 그들은 자신의 데이터셋에 존재하며 동일한 방식으로 추출됩니다.