Detection rules › Panther
Snowflake Data Exfiltration
Detects multi-step Snowflake data exfiltration by identifying temporary stage creation, table data copied to stage, and file downloads. This technique was used in the April 2024 Snowflake breach (UNC5537) targeting accounts without MFA. The correlation of all three steps provides high-confidence evidence of active data theft beyond legitimate ETL operations.
MITRE ATT&CK coverage
| Tactic | Techniques |
|---|---|
| Collection | T1213 Data from Information Repositories, T1530 Data from Cloud Storage |
| Exfiltration | T1041 Exfiltration Over C2 Channel |
Rule body yaml
AnalysisType: correlation_rule
RuleID: "Snowflake.Stream.DataExfiltration"
DisplayName: "Snowflake Data Exfiltration"
Enabled: true
Tags:
- Snowflake
- Data Exfiltration
- Database
- Cloud Security
Severity: Critical
Description: >
Detects multi-step Snowflake data exfiltration by identifying temporary stage creation, table data copied to stage, and file downloads. This technique was used in the April 2024 Snowflake breach (UNC5537) targeting accounts without MFA. The correlation of all three steps provides high-confidence evidence of active data theft beyond legitimate ETL operations.
Runbook: |
1. Query Snowflake's QUERY_HISTORY and ACCESS_HISTORY views for the stage name in p_alert_context.stage to identify the user account, session ID, source IP addresses, client application, and all tables that were copied into the stage
2. Review the specific tables copied into the stage to determine data sensitivity (PII, financial records, intellectual property) and estimate the volume of data exfiltrated, then check Snowflake's LOGIN_HISTORY to verify if the user account had MFA enabled
3. Analyze the source IP addresses used during the exfiltration sequence against threat intelligence feeds to determine if they are corporate IPs, suspicious cloud providers, or known malicious infrastructure, and check for impossible travel patterns
Reference: https://cloud.google.com/blog/topics/threat-intelligence/unc5537-snowflake-data-theft-extortion/
Reports:
MITRE ATT&CK:
- TA0010:T1041 # Exfiltration: Exfiltration Over C2 Channel
- TA0010:T1530 # Exfiltration: Data from Cloud Storage
- TA0009:T1213 # Collection: Data from Information Repositories
Detection:
- Sequence:
- ID: SnowflakeTempStageCreated
RuleID: Snowflake.Stream.TempStageCreated
- ID: SnowflakeCopyIntoStage
RuleID: Snowflake.Stream.TableCopiedIntoStage
- ID: SnowflakeFileDownloaded
RuleID: Snowflake.Stream.FileDownloaded
Transitions:
- ID: Match SnowflakeTempStageCreated and SnowflakeCopyIntoStage on stage
From: SnowflakeTempStageCreated
To: SnowflakeCopyIntoStage
Match:
- On: p_alert_context.stage
- ID: Match SnowflakeCopyIntoStage and SnowflakeFileDownloaded on path
From: SnowflakeCopyIntoStage
To: SnowflakeFileDownloaded
Match:
- On: p_alert_context.stage
Schedule:
RateMinutes: 1440
TimeoutMinutes: 15
LookbackWindowMinutes: 2160
Tests:
- Name: Data Exfiltration
ExpectedResult: true
RuleOutputs:
- ID: SnowflakeTempStageCreated
Matches:
p_alert_context.stage:
LOGS.PUBLIC.data_exfil:
- "2006-01-02T15:04:05Z"
- "2006-01-02T15:04:06Z"
- ID: SnowflakeCopyIntoStage
Matches:
p_alert_context.stage:
LOGS.PUBLIC.data_exfil:
- "2006-01-02T15:04:05Z"
- "2006-01-02T15:04:06Z"
- ID: SnowflakeFileDownloaded
Matches:
p_alert_context.stage:
LOGS.PUBLIC.data_exfil:
- "2006-01-02T15:04:05Z"
- "2006-01-02T15:04:06Z"
- Name: Data Staged but not Downloaded
ExpectedResult: false
RuleOutputs:
- ID: SnowflakeTempStageCreated
Matches:
p_alert_context.stage:
LOGS.PUBLIC.data_exfil:
- "2006-01-02T15:04:05Z"
- "2006-01-02T15:04:06Z"
- ID: SnowflakeCopyIntoStage
Matches:
p_alert_context.stage:
LOGS.PUBLIC.data_exfil:
- "2006-01-02T15:04:05Z"
- "2006-01-02T15:04:06Z"
Detection logic
Stage 1: step SnowflakeTempStageCreated ordered before $SnowflakeCopyIntoStage
References detection Snowflake.Stream.TempStageCreated.
Stage 2: step SnowflakeCopyIntoStage ordered before $SnowflakeFileDownloaded ordered after $SnowflakeTempStageCreated
References detection Snowflake.Stream.TableCopiedIntoStage.
Stage 3: step SnowflakeFileDownloaded ordered after $SnowflakeCopyIntoStage
References detection Snowflake.Stream.FileDownloaded.