Techniques
Sample rules
GCP Vertex AI Prompt or Response Containing Credentials
- source: elastic
- technicques:
- T1552
Description
Detects a GCP Vertex AI GenerateContent exchange whose prompt or model reply contains a known credential pattern (AWS access keys, GitHub tokens, PEM private keys, and similar), or whose assistant reply warns about exposed keys and revocation. Secrets in prompt/response logs are visible to anyone with access to BigQuery prompt-response export and Elastic.
Detection logic
from logs-gcp_vertexai.prompt_response_logs-* metadata _id, _version, _index
| where data_stream.dataset == "gcp_vertexai.prompt_response_logs"
| eval request_text = coalesce(mv_concat(gcp.vertexai.prompt_response_logs.full_request.contents.parts.text, " "), ""),
response_raw = coalesce(mv_concat(gcp.vertexai.prompt_response_logs.full_response.candidates.content.parts.text, " "), ""),
response_text = to_lower(response_raw)
| where
request_text rlike """.*(AKIA|ASIA)[A-Z0-9]{16}.*""" or
response_raw rlike """.*(AKIA|ASIA)[A-Z0-9]{16}.*""" or
request_text rlike """.*gh[pousr]_[A-Za-z0-9]{36}.*""" or
response_raw rlike """.*gh[pousr]_[A-Za-z0-9]{36}.*""" or
request_text rlike """.*github_pat_[A-Za-z0-9_]+.*""" or
response_raw rlike """.*github_pat_[A-Za-z0-9_]+.*""" or
request_text rlike """.*-----BEGIN [A-Z ]*PRIVATE KEY-----.*""" or
response_raw rlike """.*-----BEGIN [A-Z ]*PRIVATE KEY-----.*""" or
request_text rlike """.*xox[baprs]-[0-9]+-[0-9]+-[A-Za-z0-9]+.*""" or
response_raw rlike """.*xox[baprs]-[0-9]+-[0-9]+-[A-Za-z0-9]+.*""" or
request_text rlike """.*sk_live_[A-Za-z0-9]+.*""" or
response_raw rlike """.*sk_live_[A-Za-z0-9]+.*""" or
request_text rlike """.*AIza[-A-Za-z0-9_]+.*""" or
response_raw rlike """.*AIza[-A-Za-z0-9_]+.*""" or
request_text rlike """.*glpat-[-A-Za-z0-9_]+.*""" or
response_raw rlike """.*glpat-[-A-Za-z0-9_]+.*""" or
response_text like "*serious security concern*" or
response_text like "*exposing api keys*" or
response_text like "*revoke/delete the api key*"
| keep
_id,
_version,
_index,
@timestamp,
cloud.project.id,
gcp.vertexai.prompt_response_logs.model,
gcp.vertexai.prompt_response_logs.api_method,
gcp.vertexai.prompt_response_logs.full_request.contents.parts.text,
gcp.vertexai.prompt_response_logs.full_response.candidates.content.parts.text,
gcp.vertexai.prompt_response_logs.full_response.candidates.finish_reason,
gcp.vertexai.prompt_response_logs.full_response.usage_metadata.prompt_token_count,
gcp.vertexai.prompt_response_logs.full_response.usage_metadata.candidates_token_count