SentinelOne Alert Passthrough


Description

SentinelOne Alert Passthrough

Query · python

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,
    }
Raw source SentinelOne Alert Passthrough · Panther Python
Esc
Published by panther-labs/panther-analysis ↗, licensed under Apache 2.0 ↗. Reproduced here unmodified.
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
Tests:
  - ExpectedResult: true
    Log:
      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"
    Name: CRITICAL
  - ExpectedResult: true
    Log:
      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_MEDIUM
        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"
    Name: MEDIUM
  - ExpectedResult: false
    Log:
      accountid: "12345"
      accountname: Account1
      activitytype: "90"
      activityuuid: 123-456-789
      agentid: "111111"
      createdat: "2022-12-07 16:06:35.483"
      data:
        accountname: Account1
        computername: BobsPC
        createdat: "2022-12-07T16:06:35.477827Z"
        fullscopedetails: Group Testing in Site Default site of Account Account1
        fullscopedetailspath: Global / Account1 / Default site / Testing
        groupname: Testing
        scopelevel: Group
        scopename: Testing
        sitename: Default site
        status: started
      groupid: "11234"
      groupname: Testing
      id: "123564"
      primarydescription: Agent BobsPC started full disk scan at Wed, 07 Dec 2022, 16:06:35 UTC.
      siteid: "12345"
      sitename: Default site
      updatedat: "2022-12-07 16:06:35.479"
    Name: Non-Alert
DedupPeriodMinutes: 60
LogTypes:
  - SentinelOne.Activity
RuleID: "SentinelOne.Alert.Passthrough"
Threshold: 1


# ------ paired body: sentinelone_alert_passthrough.py ------

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,
    }

Detection rules belong to the projects that publish them and remain under their own licenses. This site indexes and links to them; it claims no rights in them.