Detection rules › Panther
Panther rules: sentinelone
| Rule | Severity |
|---|---|
| SentinelOne Alert Passthrough | high |
| SentinelOne Threats | medium |
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.
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
activitytypeis3608
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
activitytype | eq |
| field:"activitytype" kind:eq value:"3608" |
Output fields
Fields the rule emits when it matches, drawn from the rule's alert_context.
| Field | Source |
|---|---|
primarydescription | |
accountname | |
accountid | |
siteid | |
sitename | |
groupid | |
groupname | |
activityuuid | |
agentid | |
id | |
severity | data.severity |
rulename | data.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
#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
activitytypeis one of19,4108,4003,4109,18
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
activitytype | in |
| field:"activitytype" kind:in |
Output fields
Fields the rule emits when it matches, drawn from the rule's alert_context.
| Field | Source |
|---|---|
primarydescription | |
accountname | |
accountid | |
siteid | |
sitename | |
threatid | |
groupid | |
groupname | |
activityuuid | |
agentid | |
id | |
data | |
confidencelevel | data.confidencelevel |
filedisplayname | data.filedisplayname |
computername | data.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"
}