Detection rules › Panther

Panther rules: sentinelone

SentinelOne Alert Passthrough

#

This is a third-party alert feed, not a detection over modeled telemetry. Another security product raised the finding; this rule forwards or reshapes it into the SIEM. It is searchable for reference but is excluded from the detection-rule browse and the ATT&CK coverage matrix.

Severity
high
Group by
id
Log types
SentinelOne.Activity
Reference
www.sentinelone.com
Source
github.com/panther-labs/panther-analysis

SentinelOne Alert Passthrough

Detection Logic

SENTINELONE_SEVERITY = {
    "E_LOW": "LOW",
    "E_MEDIUM": "MEDIUM",
    "E_HIGH": "HIGH",
    "E_CRITICAL": "CRITICAL",
}


def rule(event):
    # "3608" corresponds to new alerts
    return event.get("activitytype") == "3608"


def title(event):
    return (
        "SentinelOne "
        f"[{SENTINELONE_SEVERITY.get(event.deep_get('data', 'severity', default=''))}] "
        f"Alert - [{event.deep_get('data', 'rulename')}]"
    )


def dedup(event):
    return f"s1alerts:{event.get('id')}"


def severity(event):
    return SENTINELONE_SEVERITY.get(event.deep_get("data", "severity", default=""), "MEDIUM")


def alert_context(event):
    data_cleaned = {k: v for k, v in event.get("data", {}).items() if v != ""}
    return {
        "primarydescription": event.get("primarydescription", ""),
        "accountname": event.get("accountname", ""),
        "accountid": event.get("accountid", ""),
        "siteid": event.get("siteid", ""),
        "sitename": event.get("sitename", ""),
        "groupid": event.get("groupid", ""),
        "groupname": event.get("groupname", ""),
        "activityuuid": event.get("activityuuid", ""),
        "agentid": event.get("agentid", ""),
        "id": event.get("id", ""),
        "data": data_cleaned,
    }

Rule Specification

AnalysisType: rule
Description: SentinelOne Alert Passthrough
DisplayName: "SentinelOne Alert Passthrough"
Enabled: true
Filename: sentinelone_alert_passthrough.py
Reference: https://www.sentinelone.com/blog/feature-spotlight-introducing-the-new-threat-center/
Severity: High
DedupPeriodMinutes: 60
LogTypes:
  - SentinelOne.Activity
RuleID: "SentinelOne.Alert.Passthrough"
Threshold: 1

Stages and Predicates

Fires on SentinelOne.Activity events when the condition below holds.

Condition

  • activitytype is 3608

Indicators

These rows show field, operator, and value matches.

Output Fields

These fields are emitted when the rule matches.

FieldSource
primarydescription
accountname
accountid
siteid
sitename
groupid
groupname
activityuuid
agentid
id
severitydata.severity
rulenamedata.rulename

Worked Example

A sample event from the rule's unit tests that triggers a match.

Sample Test Event
{
  "accountid": "12345",
  "accountname": "Account1",
  "activitytype": "3608",
  "activityuuid": "f123-345-1234",
  "agentid": "1234567",
  "createdat": "2022-12-07 17:36:05.076",
  "data": {
    "accountid": "987654",
    "accountname": "Account1",
    "actoralternateid": "",
    "agentipv4": "1.2.3.4",
    "alertid": "1570395776954206544",
    "datasourcename": "SentinelOne",
    "detectedat": "2022-12-07T17:35:48Z",
    "dnsrequest": "",
    "dnsresponse": "",
    "dstip": "",
    "dstport": 0,
    "ruledescription": "test",
    "ruleid": "12345",
    "rulename": "test-rule",
    "rulescopeid": 123,
    "rulescopelevel": "E_ACCOUNT",
    "scopeid": 123,
    "scopelevel": "Group",
    "scopename": "Default Group",
    "severity": "E_CRITICAL",
    "siteid": "12345",
    "sitename": "Default site",
    "tiindicatorsource": "",
    "tiindicatortype": "",
    "tiindicatorvalue": "",
    "userid": 432134
  },
  "groupid": "12345",
  "groupname": "Default Group",
  "id": "5423",
  "primarydescription": "Alert created for sshd from Custom Rule: test-rule in Group Default Group in Site Default site of Account Account1, detected on BobsPC.",
  "secondarydescription": "e020cd039b099b6bfdfd33d13554da5383cc4cc0",
  "siteid": "1408801957997975086",
  "sitename": "Default site",
  "updatedat": "2022-12-07 17:36:05.075",
  "userid": "1234"
}

SentinelOne Threats

#
Severity
medium
Group by
id
Log types
SentinelOne.Activity
Reference
www.sentinelone.com
Source
github.com/panther-labs/panther-analysis

Passthrough SentinelOne Threats

Detection Logic

NEW_THREAT_ACTIVITYTYPES = [
    # Malicious Threats - Not Mitigated
    "19",  # New Malicious Threat Not Mitigated
    "4108",  # New Malicious Threat Not Mitigated (detected by SentinelOne Cloud)
    # Suspicious Threats - Not Mitigated
    "4003",  # New Suspicious Threat Not Mitigated
    "4109",  # New Suspicious Threat Not Mitigated (detected by SentinelOne Cloud)
    # New Threats - Mitigated/Blocked
    "18",  # New Threat Mitigated
    "20",  # New Threat Preemptive Block
    # Automated Threat Intelligence Detections
    "4106",  # STAR Active Response Marked Event As Malicious
    "4107",  # STAR Active Response Marked Event As Suspicious
    "4110",  # Singularity Threat Intelligence Engine Marked Event As Malicious
    "4111",  # Watchtower Cloud Detection Engine Marked Event As Threat
    "4112",  # Watchtower Cloud Detection Engine Marked Event As Suspicious
    "4113",  # Singularity Threat Intelligence Engine Marked Event As Suspicious
]


def rule(event):
    return event.get("activitytype") in NEW_THREAT_ACTIVITYTYPES


def title(event):
    return (
        f"SentinelOne - [{event.deep_get('data', 'confidencelevel', default='')}] level threat "
        f"[{event.deep_get('data', 'filedisplayname', default='NO FILE NAME')}] detected on "
        f"[{event.deep_get('data', 'computername', default='NO COMPUTER NAME')}]."
    )


def dedup(event):
    return f"s1threat:{event.get('id', '')}"


def severity(event):
    if event.deep_get("data", "confidencelevel", default="") == "malicious":
        return "HIGH"
    return "DEFAULT"


def alert_context(event):
    return {
        "primarydescription": event.get("primarydescription", ""),
        "accountname": event.get("accountname", ""),
        "accountid": event.get("accountid", ""),
        "siteid": event.get("siteid", ""),
        "sitename": event.get("sitename", ""),
        "threatid": event.get("threatid", ""),
        "groupid": event.get("groupid", ""),
        "groupname": event.get("groupname", ""),
        "activityuuid": event.get("activityuuid", ""),
        "agentid": event.get("agentid", ""),
        "id": event.get("id", ""),
        "data": event.get("data", {}),
    }

Rule Specification

AnalysisType: rule
Description: "Passthrough SentinelOne Threats "
DisplayName: "SentinelOne Threats"
Enabled: true
Filename: sentinelone_threats.py
Reference: https://www.sentinelone.com/blog/feature-spotlight-introducing-the-new-threat-center/
Severity: Medium
DedupPeriodMinutes: 60
LogTypes:
  - SentinelOne.Activity
RuleID: "SentinelOne.Threats"
Threshold: 1

Stages and Predicates

Fires on SentinelOne.Activity events when the condition below holds.

Condition

  • activitytype is one of 19, 4108, 4003, 4109, 18 (+7 more values, see Indicators below)

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
activitytypein
  • 18
  • 19
  • 20
  • 4003
  • 4106
  • 4107
  • 4108
  • 4109
  • 4110
  • 4111
  • 4112
  • 4113
field:"activitytype" kind:in

Output Fields

These fields are emitted when the rule matches.

FieldSource
primarydescription
accountname
accountid
siteid
sitename
threatid
groupid
groupname
activityuuid
agentid
id
data
confidenceleveldata.confidencelevel
filedisplaynamedata.filedisplayname
computernamedata.computername

Worked Example

A sample event from the rule's unit tests that triggers a match.

Sample Test Event
{
  "accountid": "123456789",
  "accountname": "Account1",
  "activitytype": "19",
  "activityuuid": "123-456-678-89",
  "agentid": "1111112222233333",
  "createdat": "2022-12-07 16:08:55.703",
  "data": {
    "accountname": "Account1",
    "computername": "BobsPC",
    "confidencelevel": "malicious",
    "filecontenthash": "cf8bd9dfddff007f75adf4c2be48005cea317c62",
    "filedisplayname": "eicar.txt",
    "filepath": "/home/ubuntu/eicar.txt",
    "fullscopedetails": "Group Testing in Site Default site of Account Account1",
    "fullscopedetailspath": "Global / Account1 / Default site / Testing",
    "groupname": "Testing",
    "sitename": "Default site",
    "threatclassification": "Virus",
    "threatclassificationsource": "Cloud"
  },
  "groupid": "12345",
  "groupname": "Testing",
  "id": "11111111",
  "primarydescription": "Threat with confidence level malicious detected: eicar.txt",
  "secondarydescription": "cf8bd9dfddff007f75adf4c2be48005cea317c62",
  "siteid": "456789",
  "sitename": "Default site",
  "threatid": "123456789",
  "updatedat": "2022-12-07 16:08:55.698"
}

Back to all Panther rules