Panther medium experimental python

Crowdstrike Detection Summary

Forwards any alerts generated by CrowdStrike to your Panther destinations.

View Source

Detection Logic

from panther_core import PantherEvent
from panther_crowdstrike_event_streams_helpers import cs_alert_context


def rule(event: PantherEvent):
    return event.deep_get("metadata", "eventType") == "EppDetectionSummaryEvent"


def title(event: PantherEvent):
    alert_title = event.deep_get("event", "Name", default="New CrowdStrike Detection")
    alert_desc = event.deep_get("event", "Description")
    return f"{alert_title}: {alert_desc}" if alert_desc else alert_title


def dedup(event: PantherEvent):
    if alert_id := event.deep_get("event", "CompositeId"):
        return alert_id
    # Else, fall back on title string
    return title(event)


def severity(event: PantherEvent):
    # First, try returning the severity based on the SeverityName
    sevname = str(event.deep_get("event", "SeverityName")).upper()
    allowed_values = ("INFO", "LOW", "MEDIUM", "HIGH", "CRITICAL")
    if sevname == "INFORMATIONAL":
        sevname = "INFO"
    if sevname in allowed_values:
        return sevname

    # Else, fallback on the numerical value, falling back on MEDIUM if we still don't have a value
    sevval = event.deep_get("event", "Severity") // 20
    return {0: "INFO", 1: "LOW", 2: "MEDIUM", 3: "HIGH", 4: "CRITICAL", 5: "CRITICAL"}.get(
        sevval, "DEFAULT"
    )


def reference(event: PantherEvent):
    return event.deep_get("event", "FalconHostLink", default="")


def alert_context(event: PantherEvent):
    context = cs_alert_context(event)
    context.update(
        {
            "FalconLink": event.deep_get("event", "FalconHostLink", default="<NO LINK PROVIDED>"),
            "CompositeId": event.deep_get("event", "CompositeId", default="<NO ID PROVIDED>"),
            "FileName": event.deep_get("event", "FileName", default="<NO FILENAME PROVIDED>"),
            "FilePath": event.deep_get("event", "FilePath", default="<NO FILEPATH PROVIDED>"),
            "UserName": event.deep_get("event", "UserName", default="<NO USERNAME PROVIDED>"),
        }
    )
    return context

Field Validations

Loading…

Comments (0)

Loading comments...