Detection rules › Panther

Snowflake File Downloaded

Severity
informational
Log types
Snowflake.QueryHistory
Tags
Snowflake, [MITRE] Exfiltration, [MITRE] Exfiltration Over C2 Channel
Reference
https://cloud.google.com/blog/topics/threat-intelligence/unc5537-snowflake-data-theft-extortion/
Source
github.com/panther-labs/panther-analysis

A file was downloaded from a stage.

MITRE ATT&CK coverage

TacticTechniques
ExfiltrationT1041 Exfiltration Over C2 Channel

Rule body yaml

AnalysisType: rule
Filename: snowflake_stream_file_downloaded.py
RuleID: Snowflake.Stream.FileDownloaded
DisplayName: Snowflake File Downloaded
Enabled: true
LogTypes:
  - Snowflake.QueryHistory
Severity: Info
CreateAlert: false
Reports:
  MITRE ATT&CK:
    - TA0010:T1041 # Exfiltration Over C2 Channel
Description: A file was downloaded from a stage.
Reference: 
  https://cloud.google.com/blog/topics/threat-intelligence/unc5537-snowflake-data-theft-extortion/
Tags:
  - Snowflake
  - '[MITRE] Exfiltration'
  - '[MITRE] Exfiltration Over C2 Channel'
Tests:
  - Name: Worksheet File Downloaded
    ExpectedResult: false
    Log:
      {
        "p_event_time": "2024-10-09 19:38:06.158000000",
        "p_log_type": "Snowflake.QueryHistory",
        "p_source_label": "SF-Ben",
        "EXECUTION_STATUS": "SUCCESS",
        "QUERY_TEXT": "GET '@~/worksheet_data/metadata' 'file:///'",
        "QUERY_TYPE": "GET_FILES",
        "ROLE_NAME": "PUBLIC",
        "USER_NAME": "CLARK_KENT"
      }
  - Name: Other File Downloaded
    ExpectedResult: true
    Log:
      {
        "p_event_time": "2024-10-09 19:38:06.158000000",
        "p_log_type": "Snowflake.QueryHistory",
        "p_source_label": "SF-Ben",
        "EXECUTION_STATUS": "SUCCESS",
        "QUERY_TEXT": "GET @PANTHER_LOGS.PUBLIC.data_exfil/DATA.csv 'file:///Users/lex.luthor/Documents'",
        "QUERY_TYPE": "GET_FILES",
        "ROLE_NAME": "PUBLIC",
        "USER_NAME": "LEX_LUTHOR"
      }

Detection logic

Condition

QUERY_TYPE eq "GET_FILES"
EXECUTION_STATUS eq "SUCCESS"
QUERY_TEXT ne "GET '@~/worksheet_data/metadata' 'file:///'"

This rule also runs imperative logic the parser cannot express as a filter; the conditions above are the structured part it could extract.

Indicators

Each row is a field, operator, and value that the rule matches. The corpus column counts how many other rules in the catalog look for the same combination: high numbers point to widely-used, community-vetted indicators. Blank or 1 shows that the indicator is specific to this rule.

FieldKindValues
EXECUTION_STATUSeq
  • SUCCESS
QUERY_TEXTne
  • GET '@~/worksheet_data/metadata' 'file:///'
QUERY_TYPEeq
  • GET_FILES