From 81c678e4119f610c89ad351f9b0ce9b7beaed48f Mon Sep 17 00:00:00 2001 From: Srikar Shastry Date: Thu, 23 Oct 2025 11:06:38 -0500 Subject: [PATCH 1/3] [Crowdstrike Falcon Endpoint Protection] - update solution to include updated API data connector --- .../CrowdStrikeAPI_DCR.json | 850 +--------- .../CrowdStrikeAPI_Definition.json | 333 ++-- .../CrowdStrikeAPI_PollingConfig.json | 371 ++--- .../Data/Solution_CrowdStrike.json | 6 +- .../Package/3.1.6.zip | Bin 0 -> 74675 bytes .../Package/createUiDefinition.json | 33 +- .../Package/mainTemplate.json | 1367 +++-------------- 7 files changed, 586 insertions(+), 2374 deletions(-) create mode 100644 Solutions/CrowdStrike Falcon Endpoint Protection/Package/3.1.6.zip diff --git a/Solutions/CrowdStrike Falcon Endpoint Protection/Data Connectors/CrowdStrikeAPI_ccp/CrowdStrikeAPI_DCR.json b/Solutions/CrowdStrike Falcon Endpoint Protection/Data Connectors/CrowdStrikeAPI_ccp/CrowdStrikeAPI_DCR.json index 7c67ab9ce48..c05ee3ff58a 100644 --- a/Solutions/CrowdStrike Falcon Endpoint Protection/Data Connectors/CrowdStrikeAPI_ccp/CrowdStrikeAPI_DCR.json +++ b/Solutions/CrowdStrike Falcon Endpoint Protection/Data Connectors/CrowdStrikeAPI_ccp/CrowdStrikeAPI_DCR.json @@ -3,870 +3,58 @@ "name": "CrowdStrikeDCR", "apiVersion": "2023-04-01-preview", "type": "Microsoft.Insights/dataCollectionRules", - "location": "[parameters('workspace-location')]", - "kind": null, + "location": "{{location}}", "properties": { "dataCollectionEndpointId": "{{dataCollectionEndpointId}}", - "streamDeclarations": { - "Custom-Crowdstrike-VULNERABILITIES": { - "columns": [ - { - "name": "id", - "type": "string" - }, - { - "name": "cid", - "type": "string" - }, - { - "name": "aid", - "type": "string" - }, - { - "name": "vulnerability_id", - "type": "string" - }, - { - "name": "status", - "type": "string" - }, - { - "name": "created_timestamp", - "type": "datetime" - }, - { - "name": "updated_timestamp", - "type": "datetime" - }, - { - "name": "data_providers", - "type": "dynamic" - }, - { - "name": "apps", - "type": "dynamic" - }, - { - "name": "suppression_info", - "type": "dynamic" - }, - { - "name": "confidence", - "type": "string" - }, - { - "name": "app", - "type": "dynamic" - }, - { - "name": "cve", - "type": "dynamic" - }, - { - "name": "host_info", - "type": "dynamic" - }, - { - "name": "remediation", - "type": "dynamic" - } - ] - }, - "Custom-Crowdstrike-ALERTS": { - "columns": [ - { - "name": "id", - "type": "string" - }, - { - "name": "agent_id", - "type": "string" - }, - { - "name": "aggregate_id", - "type": "string" - }, - { - "name": "assigned_to_name", - "type": "string" - }, - { - "name": "assigned_to_uid", - "type": "string" - }, - { - "name": "assigned_to_uuid", - "type": "string" - }, - { - "name": "cid", - "type": "string" - }, - { - "name": "composite_id", - "type": "string" - }, - { - "name": "confidence", - "type": "int" - }, - { - "name": "crawled_timestamp", - "type": "datetime" - }, - { - "name": "created_timestamp", - "type": "datetime" - }, - { - "name": "data_domains", - "type": "dynamic" - }, - { - "name": "description", - "type": "string" - }, - { - "name": "display_name", - "type": "string" - }, - { - "name": "email_sent", - "type": "boolean" - }, - { - "name": "external", - "type": "boolean" - }, - { - "name": "name", - "type": "string" - }, - { - "name": "objective", - "type": "string" - }, - { - "name": "pattern_id", - "type": "int" - }, - { - "name": "platform", - "type": "string" - }, - { - "name": "product", - "type": "string" - }, - { - "name": "scenario", - "type": "string" - }, - { - "name": "seconds_to_resolved", - "type": "int" - }, - { - "name": "seconds_to_triaged", - "type": "int" - }, - { - "name": "severity", - "type": "int" - }, - { - "name": "severity_name", - "type": "string" - }, - { - "name": "show_in_ui", - "type": "boolean" - }, - { - "name": "source_products", - "type": "dynamic" - }, - { - "name": "source_vendors", - "type": "dynamic" - }, - { - "name": "status", - "type": "string" - }, - { - "name": "tactic", - "type": "string" - }, - { - "name": "tactic_id", - "type": "string" - }, - { - "name": "tags", - "type": "dynamic" - }, - { - "name": "technique", - "type": "string" - }, - { - "name": "technique_id", - "type": "string" - }, - { - "name": "timestamp", - "type": "datetime" - }, - { - "name": "type", - "type": "string" - }, - { - "name": "updated_timestamp", - "type": "datetime" - } - ] - }, - "Custom-Crowdstrike-INCIDENTS": { - "columns": [ - { - "name": "assigned_to", - "type": "string" - }, - { - "name": "assigned_to_name", - "type": "string" - }, - { - "name": "cid", - "type": "string" - }, - { - "name": "created", - "type": "datetime" - }, - { - "name": "description", - "type": "string" - }, - { - "name": "email_state", - "type": "string" - }, - { - "name": "end", - "type": "datetime" - }, - { - "name": "events_histogram", - "type": "dynamic" - }, - { - "name": "fine_score", - "type": "int" - }, - { - "name": "grouping_ids", - "type": "dynamic" - }, - { - "name": "host_ids", - "type": "dynamic" - }, - { - "name": "hosts", - "type": "dynamic" - }, - { - "name": "incident_id", - "type": "string" - }, - { - "name": "incident_type", - "type": "int" - }, - { - "name": "lm_host_ids", - "type": "dynamic" - }, - { - "name": "lm_hosts_capped", - "type": "boolean" - }, - { - "name": "lm_types", - "type": "int" - }, - { - "name": "lmra_host_ids", - "type": "dynamic" - }, - { - "name": "lmra_hosts_capped", - "type": "boolean" - }, - { - "name": "modified_timestamp", - "type": "datetime" - }, - { - "name": "name", - "type": "string" - }, - { - "name": "objectives", - "type": "dynamic" - }, - { - "name": "start", - "type": "datetime" - }, - { - "name": "state", - "type": "string" - }, - { - "name": "status", - "type": "int" - }, - { - "name": "tactics", - "type": "dynamic" - }, - { - "name": "tags", - "type": "dynamic" - }, - { - "name": "techniques", - "type": "dynamic" - }, - { - "name": "users", - "type": "dynamic" - } - ] - }, - "Custom-Crowdstrike-DETECTIONS": { - "columns": [ - { - "name": "adversary_ids", - "type": "dynamic" - }, - { - "name": "assigned_to_name", - "type": "string" - }, - { - "name": "assigned_to_uid", - "type": "string" - }, - { - "name": "behaviors", - "type": "dynamic" - }, - { - "name": "behaviors_processed", - "type": "dynamic" - }, - { - "name": "cid", - "type": "string" - }, - { - "name": "created_timestamp", - "type": "datetime" - }, - { - "name": "date_updated", - "type": "string" - }, - { - "name": "detection_id", - "type": "string" - }, - { - "name": "device", - "type": "dynamic" - }, - { - "name": "email_sent", - "type": "boolean" - }, - { - "name": "first_behavior", - "type": "datetime" - }, - { - "name": "host_info", - "type": "dynamic" - }, - { - "name": "last_behavior", - "type": "datetime" - }, - { - "name": "max_confidence", - "type": "int" - }, - { - "name": "max_severity", - "type": "int" - }, - { - "name": "max_severity_displayname", - "type": "string" - }, - { - "name": "overwatch_notes", - "type": "string" - }, - { - "name": "quarantined_files", - "type": "dynamic" - }, - { - "name": "seconds_to_resolved", - "type": "int" - }, - { - "name": "seconds_to_triaged", - "type": "int" - }, - { - "name": "show_in_ui", - "type": "boolean" - }, - { - "name": "status", - "type": "string" - } - ] - }, - "Custom-Crowdstrike-HOSTS": { - "columns": [ - { - "name": "agent_load_flags", - "type": "string" - }, - { - "name": "agent_local_time", - "type": "string" - }, - { - "name": "agent_version", - "type": "string" - }, - { - "name": "base_image_version", - "type": "string" - }, - { - "name": "bios_manufacturer", - "type": "string" - }, - { - "name": "bios_version", - "type": "string" - }, - { - "name": "build_number", - "type": "string" - }, - { - "name": "chassis_type", - "type": "string" - }, - { - "name": "chassis_type_desc", - "type": "string" - }, - { - "name": "cid", - "type": "string" - }, - { - "name": "config_id_base", - "type": "string" - }, - { - "name": "config_id_build", - "type": "string" - }, - { - "name": "config_id_platform", - "type": "string" - }, - { - "name": "connection_ip", - "type": "string" - }, - { - "name": "connection_mac_address", - "type": "string" - }, - { - "name": "cpu_signature", - "type": "string" - }, - { - "name": "cpu_vendor", - "type": "string" - }, - { - "name": "default_gateway_ip", - "type": "string" - }, - { - "name": "deployment_type", - "type": "string" - }, - { - "name": "detection_suppression_status", - "type": "string" - }, - { - "name": "device_id", - "type": "string" - }, - { - "name": "device_policies", - "type": "dynamic" - }, - { - "name": "email", - "type": "string" - }, - { - "name": "external_ip", - "type": "string" - }, - { - "name": "filesystem_containment_status", - "type": "string" - }, - { - "name": "first_login_timestamp", - "type": "string" - }, - { - "name": "first_seen", - "type": "string" - }, - { - "name": "group_hash", - "type": "string" - }, - { - "name": "groups", - "type": "dynamic" - }, - { - "name": "host_hidden_status", - "type": "string" - }, - { - "name": "host_utc_offset", - "type": "string" - }, - { - "name": "hostname", - "type": "string" - }, - { - "name": "instance_id", - "type": "string" - }, - { - "name": "internet_exposure", - "type": "string" - }, - { - "name": "k8s_cluster_git_version", - "type": "string" - }, - { - "name": "k8s_cluster_id", - "type": "string" - }, - { - "name": "k8s_cluster_version", - "type": "string" - }, - { - "name": "kernel_version", - "type": "string" - }, - { - "name": "last_login_timestamp", - "type": "string" - }, - { - "name": "last_login_uid", - "type": "string" - }, - { - "name": "last_login_user", - "type": "string" - }, - { - "name": "last_login_user_sid", - "type": "string" - }, - { - "name": "last_reboot", - "type": "string" - }, - { - "name": "last_seen", - "type": "string" - }, - { - "name": "linux_sensor_mode", - "type": "string" - }, - { - "name": "local_ip", - "type": "string" - }, - { - "name": "mac_address", - "type": "string" - }, - { - "name": "machine_domain", - "type": "string" - }, - { - "name": "major_version", - "type": "string" - }, - { - "name": "managed_apps", - "type": "dynamic" - }, - { - "name": "meta", - "type": "dynamic" - }, - { - "name": "migration_completed_time", - "type": "string" - }, - { - "name": "minor_version", - "type": "string" - }, - { - "name": "modified_timestamp", - "type": "string" - }, - { - "name": "notes", - "type": "dynamic" - }, - { - "name": "os_build", - "type": "string" - }, - { - "name": "os_product_name", - "type": "string" - }, - { - "name": "os_version", - "type": "string" - }, - { - "name": "ou", - "type": "dynamic" - }, - { - "name": "platform_id", - "type": "string" - }, - { - "name": "platform_name", - "type": "string" - }, - { - "name": "pod_annotations", - "type": "dynamic" - }, - { - "name": "pod_host_ip4", - "type": "string" - }, - { - "name": "pod_host_ip6", - "type": "string" - }, - { - "name": "pod_hostname", - "type": "string" - }, - { - "name": "pod_id", - "type": "string" - }, - { - "name": "pod_ip4", - "type": "string" - }, - { - "name": "pod_ip6", - "type": "string" - }, - { - "name": "pod_labels", - "type": "dynamic" - }, - { - "name": "pod_name", - "type": "string" - }, - { - "name": "pod_namespace", - "type": "string" - }, - { - "name": "pod_service_account_name", - "type": "string" - }, - { - "name": "pointer_size", - "type": "string" - }, - { - "name": "policies", - "type": "dynamic" - }, - { - "name": "product_type", - "type": "string" - }, - { - "name": "product_type_desc", - "type": "string" - }, - { - "name": "provision_status", - "type": "string" - }, - { - "name": "reduced_functionality_mode", - "type": "string" - }, - { - "name": "release_group", - "type": "string" - }, - { - "name": "rtr_state", - "type": "string" - }, - { - "name": "serial_number", - "type": "string" - }, - { - "name": "service_pack_major", - "type": "string" - }, - { - "name": "service_pack_minor", - "type": "string" - }, - { - "name": "service_provider", - "type": "string" - }, - { - "name": "service_provider_account_id", - "type": "string" - }, - { - "name": "site_name", - "type": "string" - }, - { - "name": "status", - "type": "string" - }, - { - "name": "system_manufacturer", - "type": "string" - }, - { - "name": "system_product_name", - "type": "string" - }, - { - "name": "tags", - "type": "dynamic" - } - ] - } - }, + "streamDeclarations": {}, "destinations": { "logAnalytics": [ { - "workspaceResourceId": "{{workspaceResourceId}}", - "name": "clv2ws1" + "workspaceResourceId": "{{workspaceResourceId}}", + "name": "clv2ws1" } ] }, "dataFlows": [ { "streams": [ - "Custom-Crowdstrike-VULNERABILITIES" + "Microsoft-CrowdStrikeVulnerabilities" ], "destinations": [ - "clv2ws1" - ], - "transformKql": "source | project TimeGenerated = now(), Id = tostring(id), Cid = tostring(cid), Aid = tostring(aid), VulnerabilityId = tostring(vulnerability_id), DataProviders = todynamic(data_providers), CreatedTimestamp = todatetime(created_timestamp), UpdatedTimestamp = todatetime(updated_timestamp), Status = tostring(status), Apps = todynamic(apps), SuppressionInfo = todynamic(suppression_info), Confidence = tostring(confidence), App = todynamic(app), Cve = todynamic(cve), HostInfo = todynamic(host_info), Remediation = todynamic(remediation)", - "outputStream": "Microsoft-CrowdStrikeVulnerabilities" + "clv2ws1" + ] }, { "streams": [ - "Custom-Crowdstrike-ALERTS" + "Microsoft-CrowdStrikeAlerts" ], "destinations": [ - "clv2ws1" - ], - "transformKql": "source | project TimeGenerated = now(), AgentId = tostring(agent_id), AggregateId = tostring(aggregate_id), AssignedToName = tostring(assigned_to_name), AssignedToUid = tostring(assigned_to_uid), AssignedToUuid = tostring(assigned_to_uuid), Cid = tostring(cid), CompositeId = tostring(composite_id), Confidence = toint(confidence), CrawledTimestamp = todatetime(crawled_timestamp), CreatedTimestamp = todatetime(created_timestamp), DataDomains = todynamic(data_domains), Description = tostring(description), DisplayName = tostring(display_name), EmailSent = tobool(email_sent), External = tobool(external), Id = tostring(id), Name = tostring(name), Objective = tostring(objective), PatternId = toint(pattern_id), Platform = tostring(platform), Product = tostring(product), Scenario = tostring(scenario), SecondsToResolved = toint(seconds_to_resolved), SecondsToTriaged = toint(seconds_to_triaged), Severity = toint(severity), SeverityName = tostring(severity_name), ShowInUi = tobool(show_in_ui), SourceProducts = todynamic(source_products), SourceVendors = todynamic(source_vendors), Status = tostring(status), Tactic = tostring(tactic), TacticId = tostring(tactic_id), Tags = todynamic(tags), Technique = tostring(technique), TechniqueId = tostring(technique_id), Timestamp = todatetime(timestamp), AlertType = tostring(type), UpdatedTimestamp = todatetime(updated_timestamp)", - "outputStream": "Microsoft-CrowdStrikeAlerts" + "clv2ws1" + ] }, { "streams": [ - "Custom-Crowdstrike-INCIDENTS" + "Microsoft-CrowdStrikeIncidents" ], "destinations": [ - "clv2ws1" - ], - "transformKql": "source | project TimeGenerated = now(), AssignedTo = tostring(assigned_to), AssignedToName = tostring(assigned_to_name), Cid = tostring(cid), Created = todatetime(created), Description = tostring(description), EmailState = tostring(email_state), End = todatetime(end), EventsHistogram = todynamic(events_histogram), FineScore = toint(fine_score), GroupingIds = todynamic(grouping_ids), HostIds = todynamic(host_ids), Hosts = todynamic(hosts), IncidentId = tostring(incident_id), IncidentType = toint(incident_type), LmHostIds = todynamic(lm_host_ids), LmHostsCapped = tobool(lm_hosts_capped), LmTypes = toint(lm_types), LmraHostIds = todynamic(lmra_host_ids), LmraHostsCapped = tobool(lmra_hosts_capped), ModifiedTimestamp = todatetime(modified_timestamp), Name = tostring(name), Objectives = todynamic(objectives), Start = todatetime(start), State = tostring(state), Status = toint(status), Tactics = todynamic(tactics), Tags = todynamic(tags), Techniques = todynamic(techniques), Users = todynamic(users)", - "outputStream": "Microsoft-CrowdStrikeIncidents" + "clv2ws1" + ] }, { "streams": [ - "Custom-Crowdstrike-DETECTIONS" + "Microsoft-CrowdStrikeDetections" ], "destinations": [ - "clv2ws1" - ], - "transformKql": "source | project TimeGenerated = now(), AdversaryIds = todynamic(adversary_ids), AssignedToName = tostring(assigned_to_name), AssignedToUid = tostring(assigned_to_uid), Behaviors = todynamic(behaviors), BehaviorsProcessed = todynamic(behaviors_processed), Cid = tostring(cid), CreatedTimestamp = todatetime(created_timestamp), DateUpdated = tostring(date_updated), DetectionId = tostring(detection_id), Device = todynamic(device), EmailSent = tobool(email_sent), FirstBehaviorTime = todatetime(first_behavior), HostInfo = todynamic(host_info), LastBehavior = todatetime(last_behavior), MaxConfidence = toint(max_confidence), MaxSeverity = toint(max_severity), MaxSeverityDisplayName = tostring(max_severity_displayname), OverwatchNotes = tostring(overwatch_notes), QuarantinedFiles = todynamic(quarantined_files), SecondsToResolved = toint(seconds_to_resolved), SecondsToTriaged = toint(seconds_to_triaged), ShowInUi = tobool(show_in_ui), Status = tostring(status)", - "outputStream": "Microsoft-CrowdStrikeDetections" + "clv2ws1" + ] }, { "streams": [ - "Custom-Crowdstrike-HOSTS" + "Microsoft-CrowdStrikeHosts" ], "destinations": [ - "clv2ws1" - ], - "transformKql": "source | project TimeGenerated = now(), AgentLoadFlags = tostring(agent_load_flags), AgentLocalTime = tostring(agent_local_time), AgentVersion = tostring(agent_version), BaseImageVersion = tostring(base_image_version), BiosManufacturer = tostring(bios_manufacturer), BiosVersion = tostring(bios_version), BuildNumber = tostring(build_number), ChassisType = tostring(chassis_type), ChassisTypeDesc = tostring(chassis_type_desc), Cid = tostring(cid), ConfigIdBase = tostring(config_id_base), ConfigIdBuild = tostring(config_id_build), ConfigIdPlatform = tostring(config_id_platform), ConnectionIp = tostring(connection_ip), ConnectionMacAddress = tostring(connection_mac_address), CpuSignature = tostring(cpu_signature), CpuVendor = tostring(cpu_vendor), DefaultGatewayIp = tostring(default_gateway_ip), DeploymentType = tostring(deployment_type), DetectionSuppressionStatus = tostring(detection_suppression_status), DeviceId = tostring(device_id), DevicePolicies = todynamic(device_policies), Email = tostring(email), ExternalIp = tostring(external_ip), FilesystemContainmentStatus = tostring(filesystem_containment_status), FirstLoginTimestamp = tostring(first_login_timestamp), FirstSeen = tostring(first_seen), GroupHash = tostring(group_hash), Groups = todynamic(groups), HostHiddenStatus = tostring(host_hidden_status), HostUtcOffset = tostring(host_utc_offset), Hostname = tostring(hostname), InstanceId = tostring(instance_id), InternetExposure = tostring(internet_exposure), K8sClusterGitVersion = tostring(k8s_cluster_git_version), K8sClusterId = tostring(k8s_cluster_id), K8sClusterVersion = tostring(k8s_cluster_version), KernelVersion = tostring(kernel_version), LastLoginTimestamp = tostring(last_login_timestamp), LastLoginUid = tostring(last_login_uid), LastLoginUser = tostring(last_login_user), LastLoginUserSid = tostring(last_login_user_sid), LastReboot = tostring(last_reboot), LastSeen = tostring(last_seen), LinuxSensorMode = tostring(linux_sensor_mode), LocalIp = tostring(local_ip), MacAddress = tostring(mac_address), MachineDomain = tostring(machine_domain), MajorVersion = tostring(major_version), ManagedApps = todynamic(managed_apps), Meta = todynamic(meta), MigrationCompletedTime = tostring(migration_completed_time), MinorVersion = tostring(minor_version), ModifiedTimestamp = tostring(modified_timestamp), Notes = todynamic(notes), OsBuild = tostring(os_build), OsProductName = tostring(os_product_name), OsVersion = tostring(os_version), Ou = todynamic(ou), PlatformId = tostring(platform_id), PlatformName = tostring(platform_name), PodAnnotations = todynamic(pod_annotations), PodHostIp4 = tostring(pod_host_ip4), PodHostIp6 = tostring(pod_host_ip6), PodHostname = tostring(pod_hostname), PodId = tostring(pod_id), PodIp4 = tostring(pod_ip4), PodIp6 = tostring(pod_ip6), PodLabels = todynamic(pod_labels), PodName = tostring(pod_name), PodNamespace = tostring(pod_namespace), PodServiceAccountName = tostring(pod_service_account_name), PointerSize = tostring(pointer_size), Policies = todynamic(policies), ProductType = tostring(product_type), ProductTypeDesc = tostring(product_type_desc), ProvisionStatus = tostring(provision_status), ReducedFunctionalityMode = tostring(reduced_functionality_mode), ReleaseGroup = tostring(release_group), RtrState = tostring(rtr_state), SerialNumber = tostring(serial_number), ServicePackMajor = tostring(service_pack_major), ServicePackMinor = tostring(service_pack_minor), ServiceProvider = tostring(service_provider), ServiceProviderAccountId = tostring(service_provider_account_id), SiteName = tostring(site_name), Status = tostring(status), SystemManufacturer = tostring(system_manufacturer), SystemProductName = tostring(system_product_name), Tags = todynamic(tags)", - "outputStream": "Microsoft-CrowdStrikeHosts" + "clv2ws1" + ] } ] } diff --git a/Solutions/CrowdStrike Falcon Endpoint Protection/Data Connectors/CrowdStrikeAPI_ccp/CrowdStrikeAPI_Definition.json b/Solutions/CrowdStrike Falcon Endpoint Protection/Data Connectors/CrowdStrikeAPI_ccp/CrowdStrikeAPI_Definition.json index 369aad1a6ce..2c86a3faca1 100644 --- a/Solutions/CrowdStrike Falcon Endpoint Protection/Data Connectors/CrowdStrikeAPI_ccp/CrowdStrikeAPI_Definition.json +++ b/Solutions/CrowdStrike Falcon Endpoint Protection/Data Connectors/CrowdStrikeAPI_ccp/CrowdStrikeAPI_Definition.json @@ -1,172 +1,173 @@ { - "name": "CrowdStrikeAPICCPDefinition", - "apiVersion": "2023-04-01-preview", - "type": "Microsoft.SecurityInsights/dataConnectorDefinitions", - "location": "[parameters('workspace-location')]", - "kind": "Customizable", - "properties": { - "connectorUiConfig": { - "id": "CrowdStrikeAPICCPDefinition", - "title": "CrowdStrike API Data Connector (via Codeless Connector Framework) (Preview)", - "publisher": "Microsoft", - "descriptionMarkdown": "The [CrowdStrike Data Connector](https://www.crowdstrike.com/) allows ingesting logs from the CrowdStrike API into Microsoft Sentinel. This connector is built on the Microsoft Sentinel Codeless Connector Platform and uses the CrowdStrike API to fetch logs for Alerts, Detections, Hosts, Incidents, and Vulnerabilities. It supports DCR-based ingestion time transformations so that queries can run more efficiently.", - "graphQueriesTableName": "CrowdStrikeVulnerabilities", - "graphQueries": [ - { - "metricName": "Total Vulnerability logs received", - "legend": "CrowdStrike Vulnerability Logs", - "baseQuery": "{{graphQueriesTableName}}" - }, - { - "metricName": "Total Alert logs received", - "legend": "CrowdStrike Alert Logs", - "baseQuery": "CrowdStrikeAlerts" - }, - { - "metricName": "Total Incident logs received", - "legend": "CrowdStrike Incident Logs", - "baseQuery": "CrowdStrikeIncidents" - }, - { - "metricName": "Total Detection logs received", - "legend": "CrowdStrike Detection Logs", - "baseQuery": "CrowdStrikeDetections" - }, - { - "metricName": "Total Host logs received", - "legend": "CrowdStrike Host Logs", - "baseQuery": "CrowdStrikeHosts" - } - ], - "sampleQueries": [ - { - "description": "Get sample of CrowdStrike Vulnerability logs", - "query": "{{graphQueriesTableName}}\n | take 10" - }, - { - "description": "Get sample of CrowdStrike Alert logs", - "query": "CrowdStrikeAlerts\n | take 10" - }, - { - "description": "Get sample of CrowdStrike Incident logs", - "query": "CrowdStrikeIncidents\n | take 10" - }, - { - "description": "Get sample of CrowdStrike Detection logs", - "query": "CrowdStrikeDetections\n | take 10" - }, - { - "description": "Get sample of CrowdStrike Host logs", - "query": "CrowdStrikeHosts\n | take 10" - } - ], - "dataTypes": [ - { - "name": "{{graphQueriesTableName}}", - "lastDataReceivedQuery": "{{graphQueriesTableName}}\n | where TimeGenerated > ago(12h) | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" - }, - { - "name": "CrowdStrikeAlerts", - "lastDataReceivedQuery": "CrowdStrikeAlerts\n | where TimeGenerated > ago(12h) | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" - }, - { - "name": "CrowdStrikeIncidents", - "lastDataReceivedQuery": "CrowdStrikeIncidents\n | where TimeGenerated > ago(12h) | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" - }, - { - "name": "CrowdStrikeDetections", - "lastDataReceivedQuery": "CrowdStrikeDetections\n | where TimeGenerated > ago(12h) | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" - }, - { - "name": "CrowdStrikeHosts", - "lastDataReceivedQuery": "CrowdStrikeHosts\n | where TimeGenerated > ago(12h) | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" - } - ], - "connectivityCriteria": [ - { - "type": "HasDataConnectors", - "value": null - } - ], - "availability": { - "status": 1, - "isPreview": false + "name": "CrowdStrikeAPICCPDefinition", + "apiVersion": "2023-04-01-preview", + "type": "Microsoft.SecurityInsights/dataConnectorDefinitions", + "location": "[parameters('workspace-location')]", + "kind": "Customizable", + "properties": { + "connectorUiConfig": { + "id": "CrowdStrikeAPICCPDefinition", + "title": "CrowdStrike API Data Connector (via Codeless Connector Framework) (Preview)", + "publisher": "Microsoft", + "descriptionMarkdown": "The [CrowdStrike Data Connector](https://www.crowdstrike.com/) allows ingesting logs from the CrowdStrike API into Microsoft Sentinel. This connector is built on the Microsoft Sentinel Codeless Connector Platform and uses the CrowdStrike API to fetch logs for Alerts, Detections, Hosts, Incidents, and Vulnerabilities. It supports DCR-based ingestion time transformations so that queries can run more efficiently.", + "graphQueriesTableName": "CrowdStrikeVulnerabilities", + "graphQueries": [ + { + "metricName": "Total Vulnerability logs received", + "legend": "CrowdStrike Vulnerability Logs", + "baseQuery": "{{graphQueriesTableName}}" + }, + { + "metricName": "Total Alert logs received", + "legend": "CrowdStrike Alert Logs", + "baseQuery": "CrowdStrikeAlerts" + }, + { + "metricName": "Total Incident logs received", + "legend": "CrowdStrike Incident Logs", + "baseQuery": "CrowdStrikeIncidents" + }, + { + "metricName": "Total Detection logs received", + "legend": "CrowdStrike Detection Logs", + "baseQuery": "CrowdStrikeDetections" + }, + { + "metricName": "Total Host logs received", + "legend": "CrowdStrike Host Logs", + "baseQuery": "CrowdStrikeHosts" + } + ], + "sampleQueries": [ + { + "description": "Get sample of CrowdStrike Vulnerability logs", + "query": "{{graphQueriesTableName}}\n | take 10" + }, + { + "description": "Get sample of CrowdStrike Alert logs", + "query": "CrowdStrikeAlerts\n | take 10" + }, + { + "description": "Get sample of CrowdStrike Incident logs", + "query": "CrowdStrikeIncidents\n | take 10" + }, + { + "description": "Get sample of CrowdStrike Detection logs", + "query": "CrowdStrikeDetections\n | take 10" + }, + { + "description": "Get sample of CrowdStrike Host logs", + "query": "CrowdStrikeHosts\n | take 10" + } + ], + "dataTypes": [ + { + "name": "{{graphQueriesTableName}}", + "lastDataReceivedQuery": "{{graphQueriesTableName}}\n | where TimeGenerated > ago(12h) | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" + }, + { + "name": "CrowdStrikeAlerts", + "lastDataReceivedQuery": "CrowdStrikeAlerts\n | where TimeGenerated > ago(12h) | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" + }, + { + "name": "CrowdStrikeIncidents", + "lastDataReceivedQuery": "CrowdStrikeIncidents\n | where TimeGenerated > ago(12h) | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" + }, + { + "name": "CrowdStrikeDetections", + "lastDataReceivedQuery": "CrowdStrikeDetections\n | where TimeGenerated > ago(12h) | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" + }, + { + "name": "CrowdStrikeHosts", + "lastDataReceivedQuery": "CrowdStrikeHosts\n | where TimeGenerated > ago(12h) | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" + } + ], + "connectivityCriteria": [ + { + "type": "HasDataConnectors" + } + ], + "availability": { + "isPreview": true, + "status": 1 + }, + "permissions": { + "resourceProvider": [ + { + "provider": "Microsoft.OperationalInsights/workspaces", + "permissionsDisplayText": "Read and Write permissions are required.", + "providerDisplayName": "Workspace", + "scope": "Workspace", + "requiredPermissions": { + "write": true, + "read": true, + "delete": true + } + } + ] + }, + "instructionSteps": [ + { + "title": "Configuration steps for the CrowdStrike API", + "description": "Follow the instructions below to obtain your CrowdStrike API credentials.", + "instructions": [ + { + "type": "Markdown", + "parameters": { + "content": "#### Configuration steps for the CrowdStrike API\nFollow the instructions below to obtain your CrowdStrike API credentials." + } + }, + { + "type": "Markdown", + "parameters": { + "content": "#### 1. Retrieve API URL\nLog in to your CrowdStrike Console and navigate to the API section to copy your Base API URL." + } + }, + { + "type": "Markdown", + "parameters": { + "content": "#### 2. Retrieve Client Credentials\nObtain your Client ID and Client Secret from the API credentials section in your CrowdStrike account." + } + }, + { + "type": "Textbox", + "parameters": { + "label": "Base API URL", + "placeholder": "https://api.us-2.crowdstrike.com", + "type": "text", + "name": "apiUrl" + } + }, + { + "type": "Textbox", + "parameters": { + "label": "Client ID", + "placeholder": "Your Client ID", + "type": "text", + "name": "clientId" + } }, - "permissions": { - "resourceProvider": [ - { - "provider": "Microsoft.OperationalInsights/workspaces", - "permissionsDisplayText": "Read and Write permissions are required.", - "providerDisplayName": "Workspace", - "scope": "Workspace", - "requiredPermissions": { - "read": true, - "write": true, - "delete": true, - "action": false - } - } - ] + { + "type": "Textbox", + "parameters": { + "label": "Client Secret", + "placeholder": "Your Client Secret", + "type": "password", + "name": "clientSecret" + } }, - "instructionSteps": [ - { - "instructions": [ - { - "type": "Markdown", - "parameters": { - "content": "#### Configuration steps for the CrowdStrike API\nFollow the instructions below to obtain your CrowdStrike API credentials." - } - }, - { - "type": "Markdown", - "parameters": { - "content": "#### 1. Retrieve API URL\nLog in to your CrowdStrike Console and navigate to the API section to copy your Base API URL." - } - }, - { - "type": "Markdown", - "parameters": { - "content": "#### 2. Retrieve Client Credentials\nObtain your Client ID and Client Secret from the API credentials section in your CrowdStrike account." - } - }, - { - "parameters": { - "label": "Base API URL", - "placeholder": "https://api.us-2.crowdstrike.com", - "type": "text", - "name": "apiUrl" - }, - "type": "Textbox" - }, - { - "parameters": { - "label": "Client ID", - "placeholder": "Your Client ID", - "type": "text", - "name": "clientId" - }, - "type": "Textbox" - }, - { - "type": "Textbox", - "parameters": { - "label": "Client Secret", - "placeholder": "Your Client Secret", - "type": "password", - "name": "clientSecret" - } - }, - { - "parameters": { - "label": "toggle", - "name": "toggle" - }, - "type": "ConnectionToggleButton" - } - ] - } - ], - "isConnectivityCriteriasMatchSome": false + { + "type": "ConnectionToggleButton", + "parameters": { + "connectLabel": "Connect", + "disconnectLabel": "Disconnect", + "name": "toggle" + } + } + ] } + ], + "isConnectivityCriteriasMatchSome": false } + } } \ No newline at end of file diff --git a/Solutions/CrowdStrike Falcon Endpoint Protection/Data Connectors/CrowdStrikeAPI_ccp/CrowdStrikeAPI_PollingConfig.json b/Solutions/CrowdStrike Falcon Endpoint Protection/Data Connectors/CrowdStrikeAPI_ccp/CrowdStrikeAPI_PollingConfig.json index f4108e1213b..d80c6b5ba11 100644 --- a/Solutions/CrowdStrike Falcon Endpoint Protection/Data Connectors/CrowdStrikeAPI_ccp/CrowdStrikeAPI_PollingConfig.json +++ b/Solutions/CrowdStrike Falcon Endpoint Protection/Data Connectors/CrowdStrikeAPI_ccp/CrowdStrikeAPI_PollingConfig.json @@ -1,210 +1,165 @@ [ { - "name": "CrowdStrikeVulnerabilities", - "apiVersion": "2023-04-01-preview", "type": "Microsoft.SecurityInsights/dataConnectors", + "apiVersion": "2023-04-01-preview", + "name": "CrowdStrikeVulnerabilitiesPoller", "location": "[parameters('workspace-location')]", "kind": "RestApiPoller", "properties": { - "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", - "dataType": "CrowdStrikeVulnerabilities", "auth": { "type": "OAuth2", "ClientId": "[[parameters('clientId')]", "ClientSecret": "[[parameters('clientSecret')]", "GrantType": "client_credentials", "TokenEndpoint": "[[concat(parameters('apiUrl'),'/oauth2/token')]", - "tokenEndpointHeaders": { + "TokenEndpointHeaders": { "Accept": "application/json", "Content-Type": "application/x-www-form-urlencoded" } }, "request": { - "httpMethod": "Get", - "apiEndpoint": "[[concat(parameters('apiUrl'),'/spotlight/queries/vulnerabilities/v1')]", - "queryParameters": { - "filter": "updated_timestamp:>'{_QueryWindowStartTime}'+updated_timestamp:<='{_QueryWindowEndTime}'", - "sort": "updated_timestamp.asc" - }, + "apiEndpoint": "[[concat(parameters('apiUrl'),'/spotlight/combined/vulnerabilities/v1')]", + "httpMethod": "GET", + "rateLimitQPS": 10, + "queryWindowInMin": 5, + "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", + "retryCount": 3, + "timeoutInSeconds": 68, "headers": { "Content-Type": "application/json", "Accept": "application/json", "User-Agent": "Scuba" }, - "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", - "queryWindowInMin": 5 + "queryParameters": { + "filter": "updated_timestamp:>'{_QueryWindowStartTime}'+updated_timestamp:<='{_QueryWindowEndTime}'", + "sort": "updated_timestamp.asc" + } }, "response": { "eventsJsonPaths": [ - "" - ] - }, - "stepInfo": { - "stepType": "Nested", - "nextSteps": [ - { - "stepId": "vuln_details", - "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project resources = res['resources'] | mvexpand resources | summarize by Url_PlaceHolder = tostring(resources)" - } - ] - }, - "stepCollectorConfigs": { - "vuln_details": { - "shouldJoinNestedData": false, - "request": { - "httpMethod": "Get", - "apiEndpoint": "[[concat(parameters('apiUrl'),'/spotlight/entities/vulnerabilities/v2?ids=$Url_PlaceHolder$')]", - "logResponseContent": true, - "headers": { - "Content-Type": "application/json", - "Accept": "application/json", - "User-Agent": "scuba" - } - }, - "response": { - "eventsJsonPaths": [ - "$.resources" - ] - } - } - }, - "dcrConfig": { - "streamName": "Custom-Crowdstrike-VULNERABILITIES", - "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]", - "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]" + "$.resources" + ], + "format": "json" }, "paging": { - "pagingType": "PersistentToken", - "nextPageParaName": "after", + "pagingType": "NextPageToken", "nextPageTokenJsonPath": "$.meta.pagination.after", - "pageSizeParameterName": "limit", - "pageSize": 400 + "NextPageParaName": "after", + "pageSize": 100, + "pageSizeParameterName": "limit" + }, + "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", + "dataType": "CrowdStrikeVulnerabilities", + "dcrConfig": { + "streamName": "Microsoft-CrowdStrikeVulnerabilities", + "dataCollectionEndpoint": "{{dataCollectionEndpoint}}", + "dataCollectionRuleImmutableId": "{{dataCollectionRuleImmutableId}}" } } }, { - "name": "CrowdStrikeAlerts", - "apiVersion": "2023-04-01-preview", "type": "Microsoft.SecurityInsights/dataConnectors", - "kind": "RestApiPoller", + "apiVersion": "2023-04-01-preview", + "name": "CrowdStrikeAlertsPoller", "location": "[parameters('workspace-location')]", + "kind": "RestApiPoller", "properties": { - "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", - "dataType": "CrowdStrikeAlerts", "auth": { "type": "OAuth2", "ClientId": "[[parameters('clientId')]", "ClientSecret": "[[parameters('clientSecret')]", "GrantType": "client_credentials", "TokenEndpoint": "[[concat(parameters('apiUrl'),'/oauth2/token')]", - "tokenEndpointHeaders": { + "TokenEndpointHeaders": { "Accept": "application/json", "Content-Type": "application/x-www-form-urlencoded" } }, "request": { - "httpMethod": "Get", - "apiEndpoint": "[[concat(parameters('apiUrl'),'/alerts/queries/alerts/v2')]", + "apiEndpoint": "[[concat(parameters('apiUrl'),'/alerts/combined/alerts/v1')]", + "httpMethod": "POST", + "rateLimitQPS": 10, + "queryWindowInMin": 5, + "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", + "retryCount": 3, + "timeoutInSeconds": 91, + "isPostPayloadJson": true, "headers": { "Content-Type": "application/json", "Accept": "application/json", "User-Agent": "Scuba" }, - "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", - "queryWindowInMin": 5, - "queryParameters": { - "filter": "created_timestamp:>'{_QueryWindowStartTime}'+created_timestamp:<='{_QueryWindowEndTime}'", - "sort": "created_timestamp.asc" - } + "queryParametersTemplate": "{\r\n \"filter\": \"created_timestamp:>'{_QueryWindowStartTime}'+created_timestamp:<='{_QueryWindowEndTime}'\",\r\n \"sort\": \"created_timestamp.asc\"\r\n }" }, "response": { "eventsJsonPaths": [ - "" - ] + "$.resources" + ], + "format": "json" }, - "stepInfo": { - "stepType": "Nested", - "nextSteps": [ - { - "stepId": "alerts_details", - "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project composite_ids = res['resources'] | mvexpand composite_ids | project Url_PlaceHolder = composite_ids" - } - ] - }, - "stepCollectorConfigs": { - "alerts_details": { - "shouldJoinNestedData": false, - "request": { - "httpMethod": "Post", - "apiEndpoint": "[[concat(parameters('apiUrl'),'/alerts/entities/alerts/v2')]", - "queryParametersTemplate": "{'composite_ids': ['$Url_PlaceHolder$']}", - "logResponseContent": true, - "isPostPayloadJson": true, - "headers": { - "Content-Type": "application/json", - "Accept": "application/json", - "User-Agent": "scuba" - } - }, - "response": { - "eventsJsonPaths": [ - "$.resources" - ] - } - } + "paging": { + "pagingType": "PersistentToken", + "nextPageTokenJsonPath": "$.meta.pagination.after", + "nextPageParaName": "after", + "pageSize": 100 }, + "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", + "dataType": "CrowdStrikeAlerts", "dcrConfig": { - "streamName": "Custom-Crowdstrike-ALERTS", - "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]", - "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]" - }, - "Paging": { - "pagingType": "Offset", - "offsetParaName": "offset", - "PageSizeParameterName": "limit", - "PageSize": 400 + "streamName": "Microsoft-CrowdStrikeAlerts", + "dataCollectionEndpoint": "{{dataCollectionEndpoint}}", + "dataCollectionRuleImmutableId": "{{dataCollectionRuleImmutableId}}" } } }, { - "name": "CrowdStrikeIncidents", - "apiVersion": "2023-04-01-preview", "type": "Microsoft.SecurityInsights/dataConnectors", + "apiVersion": "2023-04-01-preview", + "name": "CrowdStrikeIncidentsPoller", "location": "[parameters('workspace-location')]", "kind": "RestApiPoller", "properties": { - "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", - "dataType": "CrowdStrikeIncidents", "auth": { "type": "OAuth2", "ClientId": "[[parameters('clientId')]", "ClientSecret": "[[parameters('clientSecret')]", "GrantType": "client_credentials", "TokenEndpoint": "[[concat(parameters('apiUrl'),'/oauth2/token')]", - "tokenEndpointHeaders": { + "TokenEndpointHeaders": { "Accept": "application/json", "Content-Type": "application/x-www-form-urlencoded" } }, "request": { - "httpMethod": "Get", "apiEndpoint": "[[concat(parameters('apiUrl'),'/incidents/queries/incidents/v1')]", + "httpMethod": "GET", + "rateLimitQPS": 10, + "queryWindowInMin": 7, + "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", + "retryCount": 3, + "timeoutInSeconds": 60, "headers": { "Content-Type": "application/json", "Accept": "application/json", "User-Agent": "Scuba" }, - "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", - "queryWindowInMin": 5, "queryParameters": { "filter": "modified_timestamp:>'{_QueryWindowStartTime}'+modified_timestamp:<='{_QueryWindowEndTime}'", - "sort": "modified_timestamp.asc" + "sort": "modified_timestamp.asc", + "limit": "500" } }, "response": { "eventsJsonPaths": [ "" - ] + ], + "format": "json" + }, + "paging": { + "pagingType": "Offset", + "offsetParaName": "offset", + "pageSize": 500, + "pageSizeParameterName": "limit" }, "stepInfo": { "stepType": "Nested", @@ -219,151 +174,124 @@ "incidents_details": { "shouldJoinNestedData": false, "request": { - "httpMethod": "Post", "apiEndpoint": "[[concat(parameters('apiUrl'),'/incidents/entities/incidents/GET/v1')]", - "queryParametersTemplate": "{'ids': ['$Url_PlaceHolder$']}", + "httpMethod": "POST", + "rateLimitQPS": 10, + "queryWindowInMin": 5, + "retryCount": 3, + "timeoutInSeconds": 65, "logResponseContent": true, "isPostPayloadJson": true, "headers": { "Content-Type": "application/json", "Accept": "application/json", "User-Agent": "scuba" - } + }, + "queryParametersTemplate": "{'ids': ['$Url_PlaceHolder$']}" }, "response": { "eventsJsonPaths": [ "$.resources" - ] + ], + "format": "json" } } }, + "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", + "dataType": "CrowdStrikeIncidents", "dcrConfig": { - "streamName": "Custom-Crowdstrike-INCIDENTS", - "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]", - "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]" - }, - "Paging": { - "pagingType": "Offset", - "offsetParaName": "offset", - "PageSizeParameterName": "limit", - "PageSize": 400 + "streamName": "Microsoft-CrowdStrikeIncidents", + "dataCollectionEndpoint": "{{dataCollectionEndpoint}}", + "dataCollectionRuleImmutableId": "{{dataCollectionRuleImmutableId}}" } } }, { - "name": "CrowdStrikeDetections", - "apiVersion": "2023-04-01-preview", "type": "Microsoft.SecurityInsights/dataConnectors", + "apiVersion": "2023-04-01-preview", + "name": "CrowdStrikeDetectionsPoller", "location": "[parameters('workspace-location')]", "kind": "RestApiPoller", "properties": { - "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", - "dataType": "CrowdStrikeDetections", "auth": { "type": "OAuth2", "ClientId": "[[parameters('clientId')]", "ClientSecret": "[[parameters('clientSecret')]", "GrantType": "client_credentials", "TokenEndpoint": "[[concat(parameters('apiUrl'),'/oauth2/token')]", - "tokenEndpointHeaders": { + "TokenEndpointHeaders": { "Accept": "application/json", "Content-Type": "application/x-www-form-urlencoded" } }, "request": { - "httpMethod": "Get", - "apiEndpoint": "[[concat(parameters('apiUrl'),'/detects/queries/detects/v1')]", + "apiEndpoint": "[[concat(parameters('apiUrl'),'/alerts/combined/alerts/v1')]", + "httpMethod": "POST", + "rateLimitQPS": 10, + "queryWindowInMin": 6, + "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", + "retryCount": 3, + "timeoutInSeconds": 70, + "isPostPayloadJson": true, "headers": { "Content-Type": "application/json", "Accept": "application/json", "User-Agent": "Scuba" }, - "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", - "queryWindowInMin": 5, - "queryParameters": { - "filter": "first_behavior:>'{_QueryWindowStartTime}'+first_behavior:<='{_QueryWindowEndTime}'", - "sort": "first_behavior.asc" - } + "queryParametersTemplate": "{\r\n \"filter\": \"product:'epp'+created_timestamp:>'{_QueryWindowStartTime}'+created_timestamp:<='{_QueryWindowEndTime}'+type:'ldt'\",\r\n \"sort\": \"created_timestamp.asc\"\r\n }" }, "response": { "eventsJsonPaths": [ - "" - ] + "$.resources" + ], + "format": "json" }, - "stepInfo": { - "stepType": "Nested", - "nextSteps": [ - { - "stepId": "detections_details", - "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project resources = res['resources'] | mvexpand resources | project Url_PlaceHolder = resources" - } - ] - }, - "stepCollectorConfigs": { - "detections_details": { - "shouldJoinNestedData": false, - "request": { - "httpMethod": "Post", - "apiEndpoint": "[[concat(parameters('apiUrl'),'/detects/entities/summaries/GET/v1')]", - "queryParametersTemplate": "{'ids': ['$Url_PlaceHolder$']}", - "logResponseContent": true, - "isPostPayloadJson": true, - "headers": { - "Content-Type": "application/json", - "Accept": "application/json", - "User-Agent": "scuba" - } - }, - "response": { - "eventsJsonPaths": [ - "$.resources" - ] - } - } + "paging": { + "pagingType": "PersistentToken", + "nextPageTokenJsonPath": "$.meta.pagination.after", + "nextPageParaName": "after", + "pageSize": 100 }, + "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", + "dataType": "CrowdStrikeDetections", "dcrConfig": { - "streamName": "Custom-Crowdstrike-DETECTIONS", - "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]", - "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]" - }, - "Paging": { - "pagingType": "Offset", - "offsetParaName": "offset", - "PageSizeParameterName": "limit", - "PageSize": 400 + "streamName": "Microsoft-CrowdStrikeDetections", + "dataCollectionEndpoint": "{{dataCollectionEndpoint}}", + "dataCollectionRuleImmutableId": "{{dataCollectionRuleImmutableId}}" } } }, { - "name": "CrowdStrikeHosts", - "apiVersion": "2023-04-01-preview", "type": "Microsoft.SecurityInsights/dataConnectors", + "apiVersion": "2023-02-01-preview", + "name": "CrowdStrikeHostsPoller", "location": "[parameters('workspace-location')]", "kind": "RestApiPoller", "properties": { - "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", - "dataType": "CrowdStrikeHosts", "auth": { "type": "OAuth2", "ClientId": "[[parameters('clientId')]", "ClientSecret": "[[parameters('clientSecret')]", "GrantType": "client_credentials", "TokenEndpoint": "[[concat(parameters('apiUrl'),'/oauth2/token')]", - "tokenEndpointHeaders": { + "TokenEndpointHeaders": { "Accept": "application/json", "Content-Type": "application/x-www-form-urlencoded" } }, "request": { - "httpMethod": "Get", - "apiEndpoint": "[[concat(parameters('apiUrl'),'/devices/queries/devices/v1')]", + "apiEndpoint": "[[concat(parameters('apiUrl'),'/devices/combined/devices/v1')]", + "httpMethod": "GET", + "rateLimitQPS": 10, + "queryWindowInMin": 5, + "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", + "retryCount": 3, + "timeoutInSeconds": 63, "headers": { "Content-Type": "application/json", "Accept": "application/json", "User-Agent": "Scuba" }, - "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", - "queryWindowInMin": 5, "queryParameters": { "filter": "last_seen:>'{_QueryWindowStartTime}'+last_seen:<='{_QueryWindowEndTime}'", "sort": "last_seen.asc" @@ -371,50 +299,23 @@ }, "response": { "eventsJsonPaths": [ - "" - ] + "$.resources" + ], + "format": "json" }, - "stepInfo": { - "stepType": "Nested", - "nextSteps": [ - { - "stepId": "hosts_details", - "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project resources = res['resources'] | mvexpand resources | project Url_PlaceHolder = resources" - } - ] - }, - "stepCollectorConfigs": { - "hosts_details": { - "shouldJoinNestedData": false, - "request": { - "httpMethod": "Post", - "apiEndpoint": "[[concat(parameters('apiUrl'),'/devices/entities/devices/v2')]", - "queryParametersTemplate": "{'ids': ['$Url_PlaceHolder$']}", - "logResponseContent": true, - "isPostPayloadJson": true, - "headers": { - "Content-Type": "application/json", - "Accept": "application/json", - "User-Agent": "scuba" - } - }, - "response": { - "eventsJsonPaths": [ - "$.resources" - ] - } - } + "paging": { + "pagingType": "NextPageToken", + "nextPageTokenJsonPath": "$.meta.pagination.next", + "NextPageParaName": "offset", + "pageSize": 100, + "pageSizeParameterName": "limit" }, + "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", + "dataType": "CrowdStrikeHosts", "dcrConfig": { - "streamName": "Custom-Crowdstrike-HOSTS", - "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]", - "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]" - }, - "Paging": { - "pagingType": "Offset", - "offsetParaName": "offset", - "PageSizeParameterName": "limit", - "PageSize": 400 + "streamName": "Microsoft-CrowdStrikeHosts", + "dataCollectionEndpoint": "{{dataCollectionEndpoint}}", + "dataCollectionRuleImmutableId": "{{dataCollectionRuleImmutableId}}" } } } diff --git a/Solutions/CrowdStrike Falcon Endpoint Protection/Data/Solution_CrowdStrike.json b/Solutions/CrowdStrike Falcon Endpoint Protection/Data/Solution_CrowdStrike.json index c69a4920e57..9e5e1217a20 100644 --- a/Solutions/CrowdStrike Falcon Endpoint Protection/Data/Solution_CrowdStrike.json +++ b/Solutions/CrowdStrike Falcon Endpoint Protection/Data/Solution_CrowdStrike.json @@ -6,8 +6,8 @@ "Data Connectors": [ "Data Connectors/CrowdstrikeReplicatorCLv2/CrowdstrikeReplicatorV2_ConnectorUI.json", "Data Connectors/CrowdStrikeFalconAdversaryIntelligence/CrowdStrikeFalconAdversaryIntelligence_FunctionApp.json", - "Data Connectors/CrowdStrikeS3FDR_ccp/DataConnectorDefinition.json" - + "Data Connectors/CrowdStrikeS3FDR_ccp/DataConnectorDefinition.json", + "Data Connectors/CrowdStrikeAPI_ccp/CrowdStrikeAPI_Definition.json" ], "Parsers": [ "Parsers/CrowdStrikeFalconEventStream.yaml", @@ -30,7 +30,7 @@ "azuresentinel.azure-sentinel-solution-commoneventformat" ], "BasePath": "C:\\GitHub\\Azure-Sentinel\\Solutions\\CrowdStrike Falcon Endpoint Protection", - "Version": "3.1.5", + "Version": "3.1.6", "Metadata": "SolutionMetadata.json", "TemplateSpec": true, "Is1Pconnector": false diff --git a/Solutions/CrowdStrike Falcon Endpoint Protection/Package/3.1.6.zip b/Solutions/CrowdStrike Falcon Endpoint Protection/Package/3.1.6.zip new file mode 100644 index 0000000000000000000000000000000000000000..1b4903479f84b5b87411a2722fd157af37d3366f GIT binary patch literal 74675 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 B0n7jZ literal 0 HcmV?d00001 diff --git a/Solutions/CrowdStrike Falcon Endpoint Protection/Package/createUiDefinition.json b/Solutions/CrowdStrike Falcon Endpoint Protection/Package/createUiDefinition.json index 1ce5db3cdc6..754cf98760b 100644 --- a/Solutions/CrowdStrike Falcon Endpoint Protection/Package/createUiDefinition.json +++ b/Solutions/CrowdStrike Falcon Endpoint Protection/Package/createUiDefinition.json @@ -6,7 +6,7 @@ "config": { "isWizard": false, "basics": { - "description": "\n\n**Note:** Please refer to the following before installing the solution: \n\n• Review the solution [Release Notes](https://github.com/Azure/Azure-Sentinel/tree/master/Solutions/CrowdStrike%20Falcon%20Endpoint%20Protection/ReleaseNotes.md)\n\n • There may be [known issues](https://aka.ms/sentinelsolutionsknownissues) pertaining to this Solution, please refer to them before installing.\n\nThe [CrowdStrike Falcon Endpoint Protection](https://www.crowdstrike.com/products/) olution allows you to easily onboard CrowdStrike Falcon Endpoint Protection to Microsoft Sentinel. The data collected can be used to create custom dashboards, alerts, and improve investigation. This gives you more insight into your organization's endpoints and improves your security operation capabilities. \n\nThis solution contains multiple Data Connectors that help ingest Falcon Data Replicator logs, Adversary Intelligence & other more specific data from CrowdStrike. Carefully review the capabilities of each connector and configure/enable the most relevant connector based on specific requirements.\n\n**Data Connectors:** 4, **Parsers:** 3, **Workbooks:** 1, **Analytic Rules:** 2, **Playbooks:** 3\n\n[Learn more about Microsoft Sentinel](https://aka.ms/azuresentinel) | [Learn more about Solutions](https://aka.ms/azuresentinelsolutionsdoc)", + "description": "\n\n**Note:** Please refer to the following before installing the solution: \n\n• Review the solution [Release Notes](https://github.com/Azure/Azure-Sentinel/tree/master/Solutions/CrowdStrike%20Falcon%20Endpoint%20Protection/ReleaseNotes.md)\n\n • There may be [known issues](https://aka.ms/sentinelsolutionsknownissues) pertaining to this Solution, please refer to them before installing.\n\nThe [CrowdStrike Falcon Endpoint Protection](https://www.crowdstrike.com/products/) solution allows you to easily onboard CrowdStrike Falcon Endpoint Protection to Microsoft Sentinel. The data collected can be used to create custom dashboards, alerts, and improve investigation. This gives you more insight into your organization's endpoints and improves your security operation capabilities. \n\nThis solution contains multiple Data Connectors that help ingest Falcon Data Replicator logs, Adversary Intelligence & other more specific data from CrowdStrike. Carefully review the capabilities of each connector and configure/enable the most relevant connector based on specific requirements.\n\n**Data Connectors:** 4, **Parsers:** 3, **Workbooks:** 1, **Analytic Rules:** 2, **Playbooks:** 3\n\n[Learn more about Microsoft Sentinel](https://aka.ms/azuresentinel) | [Learn more about Solutions](https://aka.ms/azuresentinelsolutionsdoc)", "subscription": { "resourceProviders": [ "Microsoft.OperationsManagement/solutions", @@ -63,6 +63,37 @@ "text": "This Solution installs the data connector for CrowdStrike Falcon Endpoint Protection. You can get CrowdStrike Falcon Endpoint Protection custom log data in your Microsoft Sentinel workspace. After installing the solution, configure and enable this data connector by following guidance in Manage solution view." } }, + { + "name": "dataconnectors2-text", + "type": "Microsoft.Common.TextBlock", + "options": { + "text": "This Solution installs the data connector for CrowdStrike Falcon Endpoint Protection. You can get CrowdStrike Falcon Endpoint Protection custom log data in your Microsoft Sentinel workspace. After installing the solution, configure and enable this data connector by following guidance in Manage solution view." + } + }, + { + "name": "dataconnectors3-text", + "type": "Microsoft.Common.TextBlock", + "options": { + "text": "This Solution installs the data connector for CrowdStrike Falcon Data Replicator (AWS S3) (via Codeless Connector Framework). You can get CrowdStrike Falcon Data Replicator (AWS S3) (via Codeless Connector Framework) data in your Microsoft Sentinel workspace. After installing the solution, configure and enable this data connector by following guidance in Manage solution view." + } + }, + { + "name": "dataconnectors-link3", + "type": "Microsoft.Common.TextBlock", + "options": { + "link": { + "label": "Learn more about connecting data sources", + "uri": "https://docs.microsoft.com/azure/sentinel/connect-data-sources" + } + } + }, + { + "name": "dataconnectors4-text", + "type": "Microsoft.Common.TextBlock", + "options": { + "text": "This Solution installs the data connector for CrowdStrike API Data Connector (via Codeless Connector Framework) (Preview). You can get CrowdStrike API Data Connector (via Codeless Connector Framework) (Preview) data in your Microsoft Sentinel workspace. After installing the solution, configure and enable this data connector by following guidance in Manage solution view." + } + }, { "name": "dataconnectors-link4", "type": "Microsoft.Common.TextBlock", diff --git a/Solutions/CrowdStrike Falcon Endpoint Protection/Package/mainTemplate.json b/Solutions/CrowdStrike Falcon Endpoint Protection/Package/mainTemplate.json index cd1c07bbd94..7abea0dd5f6 100644 --- a/Solutions/CrowdStrike Falcon Endpoint Protection/Package/mainTemplate.json +++ b/Solutions/CrowdStrike Falcon Endpoint Protection/Package/mainTemplate.json @@ -55,7 +55,7 @@ "email": "support@microsoft.com", "_email": "[variables('email')]", "_solutionName": "CrowdStrike Falcon Endpoint Protection", - "_solutionVersion": "3.1.5", + "_solutionVersion": "3.1.6", "solutionId": "azuresentinel.azure-sentinel-solution-crowdstrikefalconep", "_solutionId": "[variables('solutionId')]", "uiConfigId1": "CrowdstrikeReplicatorv2", @@ -168,7 +168,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "CrowdStrike Falcon Endpoint Protection data connector with template version 3.1.5", + "description": "CrowdStrike Falcon Endpoint Protection data connector with template version 3.1.6", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('dataConnectorVersion1')]", @@ -552,7 +552,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "CrowdStrike Falcon Endpoint Protection data connector with template version 3.1.5", + "description": "CrowdStrike Falcon Endpoint Protection data connector with template version 3.1.6", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('dataConnectorVersion2')]", @@ -8661,13 +8661,12 @@ ], "connectivityCriteria": [ { - "type": "HasDataConnectors", - "value": null + "type": "HasDataConnectors" } ], "availability": { - "status": 1, - "isPreview": false + "isPreview": true, + "status": 1 }, "permissions": { "resourceProvider": [ @@ -8677,16 +8676,17 @@ "providerDisplayName": "Workspace", "scope": "Workspace", "requiredPermissions": { - "read": true, "write": true, - "delete": true, - "action": false + "read": true, + "delete": true } } ] }, "instructionSteps": [ { + "title": "Configuration steps for the CrowdStrike API", + "description": "Follow the instructions below to obtain your CrowdStrike API credentials.", "instructions": [ { "type": "Markdown", @@ -8707,22 +8707,22 @@ } }, { + "type": "Textbox", "parameters": { "label": "Base API URL", "placeholder": "https://api.us-2.crowdstrike.com", "type": "text", "name": "apiUrl" - }, - "type": "Textbox" + } }, { + "type": "Textbox", "parameters": { "label": "Client ID", "placeholder": "Your Client ID", "type": "text", "name": "clientId" - }, - "type": "Textbox" + } }, { "type": "Textbox", @@ -8734,11 +8734,12 @@ } }, { + "type": "ConnectionToggleButton", "parameters": { - "label": "toggle", + "connectLabel": "Connect", + "disconnectLabel": "Disconnect", "name": "toggle" - }, - "type": "ConnectionToggleButton" + } } ] } @@ -8758,840 +8759,38 @@ "version": "[variables('dataConnectorCCPVersion')]", "source": { "sourceId": "[variables('_solutionId')]", - "name": "[variables('_solutionName')]", - "kind": "Solution" - }, - "author": { - "name": "Microsoft", - "email": "[variables('_email')]" - }, - "support": { - "name": "Microsoft Corporation", - "email": "support@microsoft.com", - "tier": "Microsoft", - "link": "https://support.microsoft.com" - }, - "dependencies": { - "criteria": [ - { - "version": "[variables('dataConnectorCCPVersion')]", - "contentId": "[variables('_dataConnectorContentIdConnections4')]", - "kind": "ResourcesDataConnector" - } - ] - } - } - }, - { - "name": "CrowdStrikeDCR", - "apiVersion": "2022-06-01", - "type": "Microsoft.Insights/dataCollectionRules", - "location": "[parameters('workspace-location')]", - "kind": "[variables('blanks')]", - "properties": { - "dataCollectionEndpointId": "[variables('dataCollectionEndpointId4')]", - "streamDeclarations": { - "Custom-Crowdstrike-VULNERABILITIES": { - "columns": [ - { - "name": "id", - "type": "string" - }, - { - "name": "cid", - "type": "string" - }, - { - "name": "aid", - "type": "string" - }, - { - "name": "vulnerability_id", - "type": "string" - }, - { - "name": "status", - "type": "string" - }, - { - "name": "created_timestamp", - "type": "datetime" - }, - { - "name": "updated_timestamp", - "type": "datetime" - }, - { - "name": "data_providers", - "type": "dynamic" - }, - { - "name": "apps", - "type": "dynamic" - }, - { - "name": "suppression_info", - "type": "dynamic" - }, - { - "name": "confidence", - "type": "string" - }, - { - "name": "app", - "type": "dynamic" - }, - { - "name": "cve", - "type": "dynamic" - }, - { - "name": "host_info", - "type": "dynamic" - }, - { - "name": "remediation", - "type": "dynamic" - } - ] - }, - "Custom-Crowdstrike-ALERTS": { - "columns": [ - { - "name": "id", - "type": "string" - }, - { - "name": "agent_id", - "type": "string" - }, - { - "name": "aggregate_id", - "type": "string" - }, - { - "name": "assigned_to_name", - "type": "string" - }, - { - "name": "assigned_to_uid", - "type": "string" - }, - { - "name": "assigned_to_uuid", - "type": "string" - }, - { - "name": "cid", - "type": "string" - }, - { - "name": "composite_id", - "type": "string" - }, - { - "name": "confidence", - "type": "int" - }, - { - "name": "crawled_timestamp", - "type": "datetime" - }, - { - "name": "created_timestamp", - "type": "datetime" - }, - { - "name": "data_domains", - "type": "dynamic" - }, - { - "name": "description", - "type": "string" - }, - { - "name": "display_name", - "type": "string" - }, - { - "name": "email_sent", - "type": "boolean" - }, - { - "name": "external", - "type": "boolean" - }, - { - "name": "name", - "type": "string" - }, - { - "name": "objective", - "type": "string" - }, - { - "name": "pattern_id", - "type": "int" - }, - { - "name": "platform", - "type": "string" - }, - { - "name": "product", - "type": "string" - }, - { - "name": "scenario", - "type": "string" - }, - { - "name": "seconds_to_resolved", - "type": "int" - }, - { - "name": "seconds_to_triaged", - "type": "int" - }, - { - "name": "severity", - "type": "int" - }, - { - "name": "severity_name", - "type": "string" - }, - { - "name": "show_in_ui", - "type": "boolean" - }, - { - "name": "source_products", - "type": "dynamic" - }, - { - "name": "source_vendors", - "type": "dynamic" - }, - { - "name": "status", - "type": "string" - }, - { - "name": "tactic", - "type": "string" - }, - { - "name": "tactic_id", - "type": "string" - }, - { - "name": "tags", - "type": "dynamic" - }, - { - "name": "technique", - "type": "string" - }, - { - "name": "technique_id", - "type": "string" - }, - { - "name": "timestamp", - "type": "datetime" - }, - { - "name": "type", - "type": "string" - }, - { - "name": "updated_timestamp", - "type": "datetime" - } - ] - }, - "Custom-Crowdstrike-INCIDENTS": { - "columns": [ - { - "name": "assigned_to", - "type": "string" - }, - { - "name": "assigned_to_name", - "type": "string" - }, - { - "name": "cid", - "type": "string" - }, - { - "name": "created", - "type": "datetime" - }, - { - "name": "description", - "type": "string" - }, - { - "name": "email_state", - "type": "string" - }, - { - "name": "end", - "type": "datetime" - }, - { - "name": "events_histogram", - "type": "dynamic" - }, - { - "name": "fine_score", - "type": "int" - }, - { - "name": "grouping_ids", - "type": "dynamic" - }, - { - "name": "host_ids", - "type": "dynamic" - }, - { - "name": "hosts", - "type": "dynamic" - }, - { - "name": "incident_id", - "type": "string" - }, - { - "name": "incident_type", - "type": "int" - }, - { - "name": "lm_host_ids", - "type": "dynamic" - }, - { - "name": "lm_hosts_capped", - "type": "boolean" - }, - { - "name": "lm_types", - "type": "int" - }, - { - "name": "lmra_host_ids", - "type": "dynamic" - }, - { - "name": "lmra_hosts_capped", - "type": "boolean" - }, - { - "name": "modified_timestamp", - "type": "datetime" - }, - { - "name": "name", - "type": "string" - }, - { - "name": "objectives", - "type": "dynamic" - }, - { - "name": "start", - "type": "datetime" - }, - { - "name": "state", - "type": "string" - }, - { - "name": "status", - "type": "int" - }, - { - "name": "tactics", - "type": "dynamic" - }, - { - "name": "tags", - "type": "dynamic" - }, - { - "name": "techniques", - "type": "dynamic" - }, - { - "name": "users", - "type": "dynamic" - } - ] - }, - "Custom-Crowdstrike-DETECTIONS": { - "columns": [ - { - "name": "adversary_ids", - "type": "dynamic" - }, - { - "name": "assigned_to_name", - "type": "string" - }, - { - "name": "assigned_to_uid", - "type": "string" - }, - { - "name": "behaviors", - "type": "dynamic" - }, - { - "name": "behaviors_processed", - "type": "dynamic" - }, - { - "name": "cid", - "type": "string" - }, - { - "name": "created_timestamp", - "type": "datetime" - }, - { - "name": "date_updated", - "type": "string" - }, - { - "name": "detection_id", - "type": "string" - }, - { - "name": "device", - "type": "dynamic" - }, - { - "name": "email_sent", - "type": "boolean" - }, - { - "name": "first_behavior", - "type": "datetime" - }, - { - "name": "host_info", - "type": "dynamic" - }, - { - "name": "last_behavior", - "type": "datetime" - }, - { - "name": "max_confidence", - "type": "int" - }, - { - "name": "max_severity", - "type": "int" - }, - { - "name": "max_severity_displayname", - "type": "string" - }, - { - "name": "overwatch_notes", - "type": "string" - }, - { - "name": "quarantined_files", - "type": "dynamic" - }, - { - "name": "seconds_to_resolved", - "type": "int" - }, - { - "name": "seconds_to_triaged", - "type": "int" - }, - { - "name": "show_in_ui", - "type": "boolean" - }, - { - "name": "status", - "type": "string" - } - ] - }, - "Custom-Crowdstrike-HOSTS": { - "columns": [ - { - "name": "agent_load_flags", - "type": "string" - }, - { - "name": "agent_local_time", - "type": "string" - }, - { - "name": "agent_version", - "type": "string" - }, - { - "name": "base_image_version", - "type": "string" - }, - { - "name": "bios_manufacturer", - "type": "string" - }, - { - "name": "bios_version", - "type": "string" - }, - { - "name": "build_number", - "type": "string" - }, - { - "name": "chassis_type", - "type": "string" - }, - { - "name": "chassis_type_desc", - "type": "string" - }, - { - "name": "cid", - "type": "string" - }, - { - "name": "config_id_base", - "type": "string" - }, - { - "name": "config_id_build", - "type": "string" - }, - { - "name": "config_id_platform", - "type": "string" - }, - { - "name": "connection_ip", - "type": "string" - }, - { - "name": "connection_mac_address", - "type": "string" - }, - { - "name": "cpu_signature", - "type": "string" - }, - { - "name": "cpu_vendor", - "type": "string" - }, - { - "name": "default_gateway_ip", - "type": "string" - }, - { - "name": "deployment_type", - "type": "string" - }, - { - "name": "detection_suppression_status", - "type": "string" - }, - { - "name": "device_id", - "type": "string" - }, - { - "name": "device_policies", - "type": "dynamic" - }, - { - "name": "email", - "type": "string" - }, - { - "name": "external_ip", - "type": "string" - }, - { - "name": "filesystem_containment_status", - "type": "string" - }, - { - "name": "first_login_timestamp", - "type": "string" - }, - { - "name": "first_seen", - "type": "string" - }, - { - "name": "group_hash", - "type": "string" - }, - { - "name": "groups", - "type": "dynamic" - }, - { - "name": "host_hidden_status", - "type": "string" - }, - { - "name": "host_utc_offset", - "type": "string" - }, - { - "name": "hostname", - "type": "string" - }, - { - "name": "instance_id", - "type": "string" - }, - { - "name": "internet_exposure", - "type": "string" - }, - { - "name": "k8s_cluster_git_version", - "type": "string" - }, - { - "name": "k8s_cluster_id", - "type": "string" - }, - { - "name": "k8s_cluster_version", - "type": "string" - }, - { - "name": "kernel_version", - "type": "string" - }, - { - "name": "last_login_timestamp", - "type": "string" - }, - { - "name": "last_login_uid", - "type": "string" - }, - { - "name": "last_login_user", - "type": "string" - }, - { - "name": "last_login_user_sid", - "type": "string" - }, - { - "name": "last_reboot", - "type": "string" - }, - { - "name": "last_seen", - "type": "string" - }, - { - "name": "linux_sensor_mode", - "type": "string" - }, - { - "name": "local_ip", - "type": "string" - }, - { - "name": "mac_address", - "type": "string" - }, - { - "name": "machine_domain", - "type": "string" - }, - { - "name": "major_version", - "type": "string" - }, - { - "name": "managed_apps", - "type": "dynamic" - }, - { - "name": "meta", - "type": "dynamic" - }, - { - "name": "migration_completed_time", - "type": "string" - }, - { - "name": "minor_version", - "type": "string" - }, - { - "name": "modified_timestamp", - "type": "string" - }, - { - "name": "notes", - "type": "dynamic" - }, - { - "name": "os_build", - "type": "string" - }, - { - "name": "os_product_name", - "type": "string" - }, - { - "name": "os_version", - "type": "string" - }, - { - "name": "ou", - "type": "dynamic" - }, - { - "name": "platform_id", - "type": "string" - }, - { - "name": "platform_name", - "type": "string" - }, - { - "name": "pod_annotations", - "type": "dynamic" - }, - { - "name": "pod_host_ip4", - "type": "string" - }, - { - "name": "pod_host_ip6", - "type": "string" - }, - { - "name": "pod_hostname", - "type": "string" - }, - { - "name": "pod_id", - "type": "string" - }, - { - "name": "pod_ip4", - "type": "string" - }, - { - "name": "pod_ip6", - "type": "string" - }, - { - "name": "pod_labels", - "type": "dynamic" - }, - { - "name": "pod_name", - "type": "string" - }, - { - "name": "pod_namespace", - "type": "string" - }, - { - "name": "pod_service_account_name", - "type": "string" - }, - { - "name": "pointer_size", - "type": "string" - }, - { - "name": "policies", - "type": "dynamic" - }, - { - "name": "product_type", - "type": "string" - }, - { - "name": "product_type_desc", - "type": "string" - }, - { - "name": "provision_status", - "type": "string" - }, - { - "name": "reduced_functionality_mode", - "type": "string" - }, - { - "name": "release_group", - "type": "string" - }, - { - "name": "rtr_state", - "type": "string" - }, - { - "name": "serial_number", - "type": "string" - }, - { - "name": "service_pack_major", - "type": "string" - }, - { - "name": "service_pack_minor", - "type": "string" - }, - { - "name": "service_provider", - "type": "string" - }, - { - "name": "service_provider_account_id", - "type": "string" - }, - { - "name": "site_name", - "type": "string" - }, - { - "name": "status", - "type": "string" - }, - { - "name": "system_manufacturer", - "type": "string" - }, - { - "name": "system_product_name", - "type": "string" - }, - { - "name": "tags", - "type": "dynamic" - } - ] - } + "name": "[variables('_solutionName')]", + "kind": "Solution" + }, + "author": { + "name": "Microsoft", + "email": "[variables('_email')]" + }, + "support": { + "name": "Microsoft Corporation", + "email": "support@microsoft.com", + "tier": "Microsoft", + "link": "https://support.microsoft.com" }, + "dependencies": { + "criteria": [ + { + "version": "[variables('dataConnectorCCPVersion')]", + "contentId": "[variables('_dataConnectorContentIdConnections4')]", + "kind": "ResourcesDataConnector" + } + ] + } + } + }, + { + "name": "CrowdStrikeDCR", + "apiVersion": "2022-06-01", + "type": "Microsoft.Insights/dataCollectionRules", + "location": "[parameters('workspace-location')]", + "kind": "[variables('blanks')]", + "properties": { + "dataCollectionEndpointId": "[variables('dataCollectionEndpointId4')]", "destinations": { "logAnalytics": [ { @@ -9603,53 +8802,43 @@ "dataFlows": [ { "streams": [ - "Custom-Crowdstrike-VULNERABILITIES" + "Microsoft-CrowdStrikeVulnerabilities" ], "destinations": [ "clv2ws1" - ], - "transformKql": "source | project TimeGenerated = now(), Id = tostring(id), Cid = tostring(cid), Aid = tostring(aid), VulnerabilityId = tostring(vulnerability_id), DataProviders = todynamic(data_providers), CreatedTimestamp = todatetime(created_timestamp), UpdatedTimestamp = todatetime(updated_timestamp), Status = tostring(status), Apps = todynamic(apps), SuppressionInfo = todynamic(suppression_info), Confidence = tostring(confidence), App = todynamic(app), Cve = todynamic(cve), HostInfo = todynamic(host_info), Remediation = todynamic(remediation)", - "outputStream": "Microsoft-CrowdStrikeVulnerabilities" + ] }, { "streams": [ - "Custom-Crowdstrike-ALERTS" + "Microsoft-CrowdStrikeAlerts" ], "destinations": [ "clv2ws1" - ], - "transformKql": "source | project TimeGenerated = now(), AgentId = tostring(agent_id), AggregateId = tostring(aggregate_id), AssignedToName = tostring(assigned_to_name), AssignedToUid = tostring(assigned_to_uid), AssignedToUuid = tostring(assigned_to_uuid), Cid = tostring(cid), CompositeId = tostring(composite_id), Confidence = toint(confidence), CrawledTimestamp = todatetime(crawled_timestamp), CreatedTimestamp = todatetime(created_timestamp), DataDomains = todynamic(data_domains), Description = tostring(description), DisplayName = tostring(display_name), EmailSent = tobool(email_sent), External = tobool(external), Id = tostring(id), Name = tostring(name), Objective = tostring(objective), PatternId = toint(pattern_id), Platform = tostring(platform), Product = tostring(product), Scenario = tostring(scenario), SecondsToResolved = toint(seconds_to_resolved), SecondsToTriaged = toint(seconds_to_triaged), Severity = toint(severity), SeverityName = tostring(severity_name), ShowInUi = tobool(show_in_ui), SourceProducts = todynamic(source_products), SourceVendors = todynamic(source_vendors), Status = tostring(status), Tactic = tostring(tactic), TacticId = tostring(tactic_id), Tags = todynamic(tags), Technique = tostring(technique), TechniqueId = tostring(technique_id), Timestamp = todatetime(timestamp), AlertType = tostring(type), UpdatedTimestamp = todatetime(updated_timestamp)", - "outputStream": "Microsoft-CrowdStrikeAlerts" + ] }, { "streams": [ - "Custom-Crowdstrike-INCIDENTS" + "Microsoft-CrowdStrikeIncidents" ], "destinations": [ "clv2ws1" - ], - "transformKql": "source | project TimeGenerated = now(), AssignedTo = tostring(assigned_to), AssignedToName = tostring(assigned_to_name), Cid = tostring(cid), Created = todatetime(created), Description = tostring(description), EmailState = tostring(email_state), End = todatetime(end), EventsHistogram = todynamic(events_histogram), FineScore = toint(fine_score), GroupingIds = todynamic(grouping_ids), HostIds = todynamic(host_ids), Hosts = todynamic(hosts), IncidentId = tostring(incident_id), IncidentType = toint(incident_type), LmHostIds = todynamic(lm_host_ids), LmHostsCapped = tobool(lm_hosts_capped), LmTypes = toint(lm_types), LmraHostIds = todynamic(lmra_host_ids), LmraHostsCapped = tobool(lmra_hosts_capped), ModifiedTimestamp = todatetime(modified_timestamp), Name = tostring(name), Objectives = todynamic(objectives), Start = todatetime(start), State = tostring(state), Status = toint(status), Tactics = todynamic(tactics), Tags = todynamic(tags), Techniques = todynamic(techniques), Users = todynamic(users)", - "outputStream": "Microsoft-CrowdStrikeIncidents" + ] }, { "streams": [ - "Custom-Crowdstrike-DETECTIONS" + "Microsoft-CrowdStrikeDetections" ], "destinations": [ "clv2ws1" - ], - "transformKql": "source | project TimeGenerated = now(), AdversaryIds = todynamic(adversary_ids), AssignedToName = tostring(assigned_to_name), AssignedToUid = tostring(assigned_to_uid), Behaviors = todynamic(behaviors), BehaviorsProcessed = todynamic(behaviors_processed), Cid = tostring(cid), CreatedTimestamp = todatetime(created_timestamp), DateUpdated = tostring(date_updated), DetectionId = tostring(detection_id), Device = todynamic(device), EmailSent = tobool(email_sent), FirstBehaviorTime = todatetime(first_behavior), HostInfo = todynamic(host_info), LastBehavior = todatetime(last_behavior), MaxConfidence = toint(max_confidence), MaxSeverity = toint(max_severity), MaxSeverityDisplayName = tostring(max_severity_displayname), OverwatchNotes = tostring(overwatch_notes), QuarantinedFiles = todynamic(quarantined_files), SecondsToResolved = toint(seconds_to_resolved), SecondsToTriaged = toint(seconds_to_triaged), ShowInUi = tobool(show_in_ui), Status = tostring(status)", - "outputStream": "Microsoft-CrowdStrikeDetections" + ] }, { "streams": [ - "Custom-Crowdstrike-HOSTS" + "Microsoft-CrowdStrikeHosts" ], "destinations": [ "clv2ws1" - ], - "transformKql": "source | project TimeGenerated = now(), AgentLoadFlags = tostring(agent_load_flags), AgentLocalTime = tostring(agent_local_time), AgentVersion = tostring(agent_version), BaseImageVersion = tostring(base_image_version), BiosManufacturer = tostring(bios_manufacturer), BiosVersion = tostring(bios_version), BuildNumber = tostring(build_number), ChassisType = tostring(chassis_type), ChassisTypeDesc = tostring(chassis_type_desc), Cid = tostring(cid), ConfigIdBase = tostring(config_id_base), ConfigIdBuild = tostring(config_id_build), ConfigIdPlatform = tostring(config_id_platform), ConnectionIp = tostring(connection_ip), ConnectionMacAddress = tostring(connection_mac_address), CpuSignature = tostring(cpu_signature), CpuVendor = tostring(cpu_vendor), DefaultGatewayIp = tostring(default_gateway_ip), DeploymentType = tostring(deployment_type), DetectionSuppressionStatus = tostring(detection_suppression_status), DeviceId = tostring(device_id), DevicePolicies = todynamic(device_policies), Email = tostring(email), ExternalIp = tostring(external_ip), FilesystemContainmentStatus = tostring(filesystem_containment_status), FirstLoginTimestamp = tostring(first_login_timestamp), FirstSeen = tostring(first_seen), GroupHash = tostring(group_hash), Groups = todynamic(groups), HostHiddenStatus = tostring(host_hidden_status), HostUtcOffset = tostring(host_utc_offset), Hostname = tostring(hostname), InstanceId = tostring(instance_id), InternetExposure = tostring(internet_exposure), K8sClusterGitVersion = tostring(k8s_cluster_git_version), K8sClusterId = tostring(k8s_cluster_id), K8sClusterVersion = tostring(k8s_cluster_version), KernelVersion = tostring(kernel_version), LastLoginTimestamp = tostring(last_login_timestamp), LastLoginUid = tostring(last_login_uid), LastLoginUser = tostring(last_login_user), LastLoginUserSid = tostring(last_login_user_sid), LastReboot = tostring(last_reboot), LastSeen = tostring(last_seen), LinuxSensorMode = tostring(linux_sensor_mode), LocalIp = tostring(local_ip), MacAddress = tostring(mac_address), MachineDomain = tostring(machine_domain), MajorVersion = tostring(major_version), ManagedApps = todynamic(managed_apps), Meta = todynamic(meta), MigrationCompletedTime = tostring(migration_completed_time), MinorVersion = tostring(minor_version), ModifiedTimestamp = tostring(modified_timestamp), Notes = todynamic(notes), OsBuild = tostring(os_build), OsProductName = tostring(os_product_name), OsVersion = tostring(os_version), Ou = todynamic(ou), PlatformId = tostring(platform_id), PlatformName = tostring(platform_name), PodAnnotations = todynamic(pod_annotations), PodHostIp4 = tostring(pod_host_ip4), PodHostIp6 = tostring(pod_host_ip6), PodHostname = tostring(pod_hostname), PodId = tostring(pod_id), PodIp4 = tostring(pod_ip4), PodIp6 = tostring(pod_ip6), PodLabels = todynamic(pod_labels), PodName = tostring(pod_name), PodNamespace = tostring(pod_namespace), PodServiceAccountName = tostring(pod_service_account_name), PointerSize = tostring(pointer_size), Policies = todynamic(policies), ProductType = tostring(product_type), ProductTypeDesc = tostring(product_type_desc), ProvisionStatus = tostring(provision_status), ReducedFunctionalityMode = tostring(reduced_functionality_mode), ReleaseGroup = tostring(release_group), RtrState = tostring(rtr_state), SerialNumber = tostring(serial_number), ServicePackMajor = tostring(service_pack_major), ServicePackMinor = tostring(service_pack_minor), ServiceProvider = tostring(service_provider), ServiceProviderAccountId = tostring(service_provider_account_id), SiteName = tostring(site_name), Status = tostring(status), SystemManufacturer = tostring(system_manufacturer), SystemProductName = tostring(system_product_name), Tags = todynamic(tags)", - "outputStream": "Microsoft-CrowdStrikeHosts" + ] } ] } @@ -9751,13 +8940,12 @@ ], "connectivityCriteria": [ { - "type": "HasDataConnectors", - "value": null + "type": "HasDataConnectors" } ], "availability": { - "status": 1, - "isPreview": false + "isPreview": true, + "status": 1 }, "permissions": { "resourceProvider": [ @@ -9767,16 +8955,17 @@ "providerDisplayName": "Workspace", "scope": "Workspace", "requiredPermissions": { - "read": true, "write": true, - "delete": true, - "action": false + "read": true, + "delete": true } } ] }, "instructionSteps": [ { + "title": "Configuration steps for the CrowdStrike API", + "description": "Follow the instructions below to obtain your CrowdStrike API credentials.", "instructions": [ { "type": "Markdown", @@ -9797,22 +8986,22 @@ } }, { + "type": "Textbox", "parameters": { "label": "Base API URL", "placeholder": "https://api.us-2.crowdstrike.com", "type": "text", "name": "apiUrl" - }, - "type": "Textbox" + } }, { + "type": "Textbox", "parameters": { "label": "Client ID", "placeholder": "Your Client ID", "type": "text", "name": "clientId" - }, - "type": "Textbox" + } }, { "type": "Textbox", @@ -9824,11 +9013,12 @@ } }, { + "type": "ConnectionToggleButton", "parameters": { - "label": "toggle", + "connectLabel": "Connect", + "disconnectLabel": "Disconnect", "name": "toggle" - }, - "type": "ConnectionToggleButton" + } } ] } @@ -9959,211 +9149,166 @@ } }, { - "name": "[[concat(parameters('innerWorkspace'),'/Microsoft.SecurityInsights/', 'CrowdStrikeVulnerabilities', parameters('guidValue'))]", + "name": "[[concat(parameters('innerWorkspace'),'/Microsoft.SecurityInsights/', 'CrowdStrikeVulnerabilitiesPoller', parameters('guidValue'))]", "apiVersion": "2023-02-01-preview", "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors", "location": "[parameters('workspace-location')]", "kind": "RestApiPoller", "properties": { - "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", - "dataType": "CrowdStrikeVulnerabilities", "auth": { "type": "OAuth2", "ClientId": "[[parameters('clientId')]", "ClientSecret": "[[parameters('clientSecret')]", "GrantType": "client_credentials", "TokenEndpoint": "[[concat(parameters('apiUrl'),'/oauth2/token')]", - "tokenEndpointHeaders": { + "TokenEndpointHeaders": { "Accept": "application/json", "Content-Type": "application/x-www-form-urlencoded" } }, "request": { - "httpMethod": "Get", - "apiEndpoint": "[[concat(parameters('apiUrl'),'/spotlight/queries/vulnerabilities/v1')]", - "queryParameters": { - "filter": "updated_timestamp:>'{_QueryWindowStartTime}'+updated_timestamp:<='{_QueryWindowEndTime}'", - "sort": "updated_timestamp.asc" - }, + "apiEndpoint": "[[concat(parameters('apiUrl'),'/spotlight/combined/vulnerabilities/v1')]", + "httpMethod": "GET", + "rateLimitQPS": 10, + "queryWindowInMin": 5, + "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", + "retryCount": 3, + "timeoutInSeconds": 68, "headers": { "Content-Type": "application/json", "Accept": "application/json", "User-Agent": "Scuba" }, - "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", - "queryWindowInMin": 5 + "queryParameters": { + "filter": "updated_timestamp:>'{_QueryWindowStartTime}'+updated_timestamp:<='{_QueryWindowEndTime}'", + "sort": "updated_timestamp.asc" + } }, "response": { "eventsJsonPaths": [ - "" - ] - }, - "stepInfo": { - "stepType": "Nested", - "nextSteps": [ - { - "stepId": "vuln_details", - "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project resources = res['resources'] | mvexpand resources | summarize by Url_PlaceHolder = tostring(resources)" - } - ] + "$.resources" + ], + "format": "json" }, - "stepCollectorConfigs": { - "vuln_details": { - "shouldJoinNestedData": false, - "request": { - "httpMethod": "Get", - "apiEndpoint": "[[concat(parameters('apiUrl'),'/spotlight/entities/vulnerabilities/v2?ids=$Url_PlaceHolder$')]", - "logResponseContent": true, - "headers": { - "Content-Type": "application/json", - "Accept": "application/json", - "User-Agent": "scuba" - } - }, - "response": { - "eventsJsonPaths": [ - "$.resources" - ] - } - } + "paging": { + "pagingType": "NextPageToken", + "nextPageTokenJsonPath": "$.meta.pagination.after", + "NextPageParaName": "after", + "pageSize": 100, + "pageSizeParameterName": "limit" }, + "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", + "dataType": "CrowdStrikeVulnerabilities", "dcrConfig": { - "streamName": "Custom-Crowdstrike-VULNERABILITIES", + "streamName": "Microsoft-CrowdStrikeVulnerabilities", "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]", "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]" - }, - "paging": { - "pagingType": "PersistentToken", - "nextPageParaName": "after", - "nextPageTokenJsonPath": "$.meta.pagination.after", - "pageSizeParameterName": "limit", - "pageSize": 400 } } }, { - "name": "[[concat(parameters('innerWorkspace'),'/Microsoft.SecurityInsights/', 'CrowdStrikeAlerts', parameters('guidValue'))]", + "name": "[[concat(parameters('innerWorkspace'),'/Microsoft.SecurityInsights/', 'CrowdStrikeAlertsPoller', parameters('guidValue'))]", "apiVersion": "2023-02-01-preview", "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors", "location": "[parameters('workspace-location')]", "kind": "RestApiPoller", "properties": { - "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", - "dataType": "CrowdStrikeAlerts", "auth": { "type": "OAuth2", "ClientId": "[[parameters('clientId')]", "ClientSecret": "[[parameters('clientSecret')]", "GrantType": "client_credentials", "TokenEndpoint": "[[concat(parameters('apiUrl'),'/oauth2/token')]", - "tokenEndpointHeaders": { + "TokenEndpointHeaders": { "Accept": "application/json", "Content-Type": "application/x-www-form-urlencoded" } }, "request": { - "httpMethod": "Get", - "apiEndpoint": "[[concat(parameters('apiUrl'),'/alerts/queries/alerts/v2')]", + "apiEndpoint": "[[concat(parameters('apiUrl'),'/alerts/combined/alerts/v1')]", + "httpMethod": "POST", + "rateLimitQPS": 10, + "queryWindowInMin": 5, + "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", + "retryCount": 3, + "timeoutInSeconds": 91, + "isPostPayloadJson": true, "headers": { "Content-Type": "application/json", "Accept": "application/json", "User-Agent": "Scuba" }, - "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", - "queryWindowInMin": 5, - "queryParameters": { - "filter": "created_timestamp:>'{_QueryWindowStartTime}'+created_timestamp:<='{_QueryWindowEndTime}'", - "sort": "created_timestamp.asc" - } + "queryParametersTemplate": "{\r\n \"filter\": \"created_timestamp:>'{_QueryWindowStartTime}'+created_timestamp:<='{_QueryWindowEndTime}'\",\r\n \"sort\": \"created_timestamp.asc\"\r\n }" }, "response": { "eventsJsonPaths": [ - "" - ] - }, - "stepInfo": { - "stepType": "Nested", - "nextSteps": [ - { - "stepId": "alerts_details", - "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project composite_ids = res['resources'] | mvexpand composite_ids | project Url_PlaceHolder = composite_ids" - } - ] + "$.resources" + ], + "format": "json" }, - "stepCollectorConfigs": { - "alerts_details": { - "shouldJoinNestedData": false, - "request": { - "httpMethod": "Post", - "apiEndpoint": "[[concat(parameters('apiUrl'),'/alerts/entities/alerts/v2')]", - "queryParametersTemplate": "{'composite_ids': ['$Url_PlaceHolder$']}", - "logResponseContent": true, - "isPostPayloadJson": true, - "headers": { - "Content-Type": "application/json", - "Accept": "application/json", - "User-Agent": "scuba" - } - }, - "response": { - "eventsJsonPaths": [ - "$.resources" - ] - } - } + "paging": { + "pagingType": "PersistentToken", + "nextPageTokenJsonPath": "$.meta.pagination.after", + "nextPageParaName": "after", + "pageSize": 100 }, + "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", + "dataType": "CrowdStrikeAlerts", "dcrConfig": { - "streamName": "Custom-Crowdstrike-ALERTS", + "streamName": "Microsoft-CrowdStrikeAlerts", "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]", "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]" - }, - "Paging": { - "pagingType": "Offset", - "offsetParaName": "offset", - "PageSizeParameterName": "limit", - "PageSize": 400 } } }, { - "name": "[[concat(parameters('innerWorkspace'),'/Microsoft.SecurityInsights/', 'CrowdStrikeIncidents', parameters('guidValue'))]", + "name": "[[concat(parameters('innerWorkspace'),'/Microsoft.SecurityInsights/', 'CrowdStrikeIncidentsPoller', parameters('guidValue'))]", "apiVersion": "2023-02-01-preview", "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors", "location": "[parameters('workspace-location')]", "kind": "RestApiPoller", "properties": { - "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", - "dataType": "CrowdStrikeIncidents", "auth": { "type": "OAuth2", "ClientId": "[[parameters('clientId')]", "ClientSecret": "[[parameters('clientSecret')]", "GrantType": "client_credentials", "TokenEndpoint": "[[concat(parameters('apiUrl'),'/oauth2/token')]", - "tokenEndpointHeaders": { + "TokenEndpointHeaders": { "Accept": "application/json", "Content-Type": "application/x-www-form-urlencoded" } }, "request": { - "httpMethod": "Get", "apiEndpoint": "[[concat(parameters('apiUrl'),'/incidents/queries/incidents/v1')]", + "httpMethod": "GET", + "rateLimitQPS": 10, + "queryWindowInMin": 7, + "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", + "retryCount": 3, + "timeoutInSeconds": 60, "headers": { "Content-Type": "application/json", "Accept": "application/json", "User-Agent": "Scuba" }, - "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", - "queryWindowInMin": 5, "queryParameters": { "filter": "modified_timestamp:>'{_QueryWindowStartTime}'+modified_timestamp:<='{_QueryWindowEndTime}'", - "sort": "modified_timestamp.asc" + "sort": "modified_timestamp.asc", + "limit": "500" } }, "response": { "eventsJsonPaths": [ "" - ] + ], + "format": "json" + }, + "paging": { + "pagingType": "Offset", + "offsetParaName": "offset", + "pageSize": 500, + "pageSizeParameterName": "limit" }, "stepInfo": { "stepType": "Nested", @@ -10178,151 +9323,124 @@ "incidents_details": { "shouldJoinNestedData": false, "request": { - "httpMethod": "Post", "apiEndpoint": "[[concat(parameters('apiUrl'),'/incidents/entities/incidents/GET/v1')]", - "queryParametersTemplate": "{'ids': ['$Url_PlaceHolder$']}", + "httpMethod": "POST", + "rateLimitQPS": 10, + "queryWindowInMin": 5, + "retryCount": 3, + "timeoutInSeconds": 65, "logResponseContent": true, "isPostPayloadJson": true, "headers": { "Content-Type": "application/json", "Accept": "application/json", "User-Agent": "scuba" - } + }, + "queryParametersTemplate": "{'ids': ['$Url_PlaceHolder$']}" }, "response": { "eventsJsonPaths": [ "$.resources" - ] + ], + "format": "json" } } }, + "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", + "dataType": "CrowdStrikeIncidents", "dcrConfig": { - "streamName": "Custom-Crowdstrike-INCIDENTS", + "streamName": "Microsoft-CrowdStrikeIncidents", "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]", "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]" - }, - "Paging": { - "pagingType": "Offset", - "offsetParaName": "offset", - "PageSizeParameterName": "limit", - "PageSize": 400 } } }, { - "name": "[[concat(parameters('innerWorkspace'),'/Microsoft.SecurityInsights/', 'CrowdStrikeDetections', parameters('guidValue'))]", + "name": "[[concat(parameters('innerWorkspace'),'/Microsoft.SecurityInsights/', 'CrowdStrikeDetectionsPoller', parameters('guidValue'))]", "apiVersion": "2023-02-01-preview", "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors", "location": "[parameters('workspace-location')]", "kind": "RestApiPoller", "properties": { - "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", - "dataType": "CrowdStrikeDetections", "auth": { "type": "OAuth2", "ClientId": "[[parameters('clientId')]", "ClientSecret": "[[parameters('clientSecret')]", "GrantType": "client_credentials", "TokenEndpoint": "[[concat(parameters('apiUrl'),'/oauth2/token')]", - "tokenEndpointHeaders": { + "TokenEndpointHeaders": { "Accept": "application/json", "Content-Type": "application/x-www-form-urlencoded" } }, "request": { - "httpMethod": "Get", - "apiEndpoint": "[[concat(parameters('apiUrl'),'/detects/queries/detects/v1')]", + "apiEndpoint": "[[concat(parameters('apiUrl'),'/alerts/combined/alerts/v1')]", + "httpMethod": "POST", + "rateLimitQPS": 10, + "queryWindowInMin": 6, + "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", + "retryCount": 3, + "timeoutInSeconds": 70, + "isPostPayloadJson": true, "headers": { "Content-Type": "application/json", "Accept": "application/json", "User-Agent": "Scuba" }, - "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", - "queryWindowInMin": 5, - "queryParameters": { - "filter": "first_behavior:>'{_QueryWindowStartTime}'+first_behavior:<='{_QueryWindowEndTime}'", - "sort": "first_behavior.asc" - } + "queryParametersTemplate": "{\r\n \"filter\": \"product:'epp'+created_timestamp:>'{_QueryWindowStartTime}'+created_timestamp:<='{_QueryWindowEndTime}'+type:'ldt'\",\r\n \"sort\": \"created_timestamp.asc\"\r\n }" }, "response": { "eventsJsonPaths": [ - "" - ] - }, - "stepInfo": { - "stepType": "Nested", - "nextSteps": [ - { - "stepId": "detections_details", - "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project resources = res['resources'] | mvexpand resources | project Url_PlaceHolder = resources" - } - ] + "$.resources" + ], + "format": "json" }, - "stepCollectorConfigs": { - "detections_details": { - "shouldJoinNestedData": false, - "request": { - "httpMethod": "Post", - "apiEndpoint": "[[concat(parameters('apiUrl'),'/detects/entities/summaries/GET/v1')]", - "queryParametersTemplate": "{'ids': ['$Url_PlaceHolder$']}", - "logResponseContent": true, - "isPostPayloadJson": true, - "headers": { - "Content-Type": "application/json", - "Accept": "application/json", - "User-Agent": "scuba" - } - }, - "response": { - "eventsJsonPaths": [ - "$.resources" - ] - } - } + "paging": { + "pagingType": "PersistentToken", + "nextPageTokenJsonPath": "$.meta.pagination.after", + "nextPageParaName": "after", + "pageSize": 100 }, + "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", + "dataType": "CrowdStrikeDetections", "dcrConfig": { - "streamName": "Custom-Crowdstrike-DETECTIONS", + "streamName": "Microsoft-CrowdStrikeDetections", "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]", "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]" - }, - "Paging": { - "pagingType": "Offset", - "offsetParaName": "offset", - "PageSizeParameterName": "limit", - "PageSize": 400 } } }, { - "name": "[[concat(parameters('innerWorkspace'),'/Microsoft.SecurityInsights/', 'CrowdStrikeHosts', parameters('guidValue'))]", + "name": "[[concat(parameters('innerWorkspace'),'/Microsoft.SecurityInsights/', 'CrowdStrikeHostsPoller', parameters('guidValue'))]", "apiVersion": "2023-02-01-preview", "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors", "location": "[parameters('workspace-location')]", "kind": "RestApiPoller", "properties": { - "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", - "dataType": "CrowdStrikeHosts", "auth": { "type": "OAuth2", "ClientId": "[[parameters('clientId')]", "ClientSecret": "[[parameters('clientSecret')]", "GrantType": "client_credentials", "TokenEndpoint": "[[concat(parameters('apiUrl'),'/oauth2/token')]", - "tokenEndpointHeaders": { + "TokenEndpointHeaders": { "Accept": "application/json", "Content-Type": "application/x-www-form-urlencoded" } }, "request": { - "httpMethod": "Get", - "apiEndpoint": "[[concat(parameters('apiUrl'),'/devices/queries/devices/v1')]", + "apiEndpoint": "[[concat(parameters('apiUrl'),'/devices/combined/devices/v1')]", + "httpMethod": "GET", + "rateLimitQPS": 10, + "queryWindowInMin": 5, + "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", + "retryCount": 3, + "timeoutInSeconds": 63, "headers": { "Content-Type": "application/json", "Accept": "application/json", "User-Agent": "Scuba" }, - "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", - "queryWindowInMin": 5, "queryParameters": { "filter": "last_seen:>'{_QueryWindowStartTime}'+last_seen:<='{_QueryWindowEndTime}'", "sort": "last_seen.asc" @@ -10330,50 +9448,23 @@ }, "response": { "eventsJsonPaths": [ - "" - ] - }, - "stepInfo": { - "stepType": "Nested", - "nextSteps": [ - { - "stepId": "hosts_details", - "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project resources = res['resources'] | mvexpand resources | project Url_PlaceHolder = resources" - } - ] + "$.resources" + ], + "format": "json" }, - "stepCollectorConfigs": { - "hosts_details": { - "shouldJoinNestedData": false, - "request": { - "httpMethod": "Post", - "apiEndpoint": "[[concat(parameters('apiUrl'),'/devices/entities/devices/v2')]", - "queryParametersTemplate": "{'ids': ['$Url_PlaceHolder$']}", - "logResponseContent": true, - "isPostPayloadJson": true, - "headers": { - "Content-Type": "application/json", - "Accept": "application/json", - "User-Agent": "scuba" - } - }, - "response": { - "eventsJsonPaths": [ - "$.resources" - ] - } - } + "paging": { + "pagingType": "NextPageToken", + "nextPageTokenJsonPath": "$.meta.pagination.next", + "NextPageParaName": "offset", + "pageSize": 100, + "pageSizeParameterName": "limit" }, + "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", + "dataType": "CrowdStrikeHosts", "dcrConfig": { - "streamName": "Custom-Crowdstrike-HOSTS", + "streamName": "Microsoft-CrowdStrikeHosts", "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]", "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]" - }, - "Paging": { - "pagingType": "Offset", - "offsetParaName": "offset", - "PageSizeParameterName": "limit", - "PageSize": 400 } } } @@ -10397,7 +9488,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "CrowdStrikeFalconEventStream Data Parser with template version 3.1.5", + "description": "CrowdStrikeFalconEventStream Data Parser with template version 3.1.6", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('parserObject1').parserVersion1]", @@ -10529,7 +9620,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "CrowdstrikeReplicator Data Parser with template version 3.1.5", + "description": "CrowdstrikeReplicator Data Parser with template version 3.1.6", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('parserObject2').parserVersion2]", @@ -10661,7 +9752,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "CrowdStrikeReplicatorV2 Data Parser with template version 3.1.5", + "description": "CrowdStrikeReplicatorV2 Data Parser with template version 3.1.6", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('parserObject3').parserVersion3]", @@ -10793,7 +9884,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "CrowdStrikeFalconEndpointProtection Workbook with template version 3.1.5", + "description": "CrowdStrikeFalconEndpointProtection Workbook with template version 3.1.6", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('workbookVersion1')]", @@ -10881,7 +9972,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "CriticalOrHighSeverityDetectionsByUser_AnalyticalRules Analytics Rule with template version 3.1.5", + "description": "CriticalOrHighSeverityDetectionsByUser_AnalyticalRules Analytics Rule with template version 3.1.6", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('analyticRuleObject1').analyticRuleVersion1]", @@ -10909,18 +10000,18 @@ "status": "Available", "requiredDataConnectors": [ { - "connectorId": "CefAma", "dataTypes": [ "CommonSecurityLog" - ] + ], + "connectorId": "CefAma" } ], "entityMappings": [ { "fieldMappings": [ { - "columnName": "AccountCustomEntity", - "identifier": "FullName" + "identifier": "FullName", + "columnName": "AccountCustomEntity" } ], "entityType": "Account" @@ -10928,8 +10019,8 @@ { "fieldMappings": [ { - "columnName": "HostCustomEntity", - "identifier": "FullName" + "identifier": "FullName", + "columnName": "HostCustomEntity" } ], "entityType": "Host" @@ -10937,8 +10028,8 @@ { "fieldMappings": [ { - "columnName": "IPCustomEntity", - "identifier": "Address" + "identifier": "Address", + "columnName": "IPCustomEntity" } ], "entityType": "IP" @@ -10946,12 +10037,12 @@ { "fieldMappings": [ { - "columnName": "FileHashAlgo", - "identifier": "Algorithm" + "identifier": "Algorithm", + "columnName": "FileHashAlgo" }, { - "columnName": "FileHashCustomEntity", - "identifier": "Value" + "identifier": "Value", + "columnName": "FileHashCustomEntity" } ], "entityType": "FileHash" @@ -11010,7 +10101,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "CriticalSeverityDetection_AnalyticalRules Analytics Rule with template version 3.1.5", + "description": "CriticalSeverityDetection_AnalyticalRules Analytics Rule with template version 3.1.6", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('analyticRuleObject2').analyticRuleVersion2]", @@ -11038,18 +10129,18 @@ "status": "Available", "requiredDataConnectors": [ { - "connectorId": "CefAma", "dataTypes": [ "CommonSecurityLog" - ] + ], + "connectorId": "CefAma" } ], "entityMappings": [ { "fieldMappings": [ { - "columnName": "AccountCustomEntity", - "identifier": "FullName" + "identifier": "FullName", + "columnName": "AccountCustomEntity" } ], "entityType": "Account" @@ -11057,8 +10148,8 @@ { "fieldMappings": [ { - "columnName": "HostCustomEntity", - "identifier": "FullName" + "identifier": "FullName", + "columnName": "HostCustomEntity" } ], "entityType": "Host" @@ -11066,8 +10157,8 @@ { "fieldMappings": [ { - "columnName": "IPCustomEntity", - "identifier": "Address" + "identifier": "Address", + "columnName": "IPCustomEntity" } ], "entityType": "IP" @@ -11075,12 +10166,12 @@ { "fieldMappings": [ { - "columnName": "FileHashAlgo", - "identifier": "Algorithm" + "identifier": "Algorithm", + "columnName": "FileHashAlgo" }, { - "columnName": "FileHashCustomEntity", - "identifier": "Value" + "identifier": "Value", + "columnName": "FileHashCustomEntity" } ], "entityType": "FileHash" @@ -11139,7 +10230,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "CrowdStrike_Base Playbook with template version 3.1.5", + "description": "CrowdStrike_Base Playbook with template version 3.1.6", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('playbookVersion1')]", @@ -11516,7 +10607,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "Crowdstrike-EndpointEnrichment Playbook with template version 3.1.5", + "description": "Crowdstrike-EndpointEnrichment Playbook with template version 3.1.6", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('playbookVersion2')]", @@ -12971,7 +12062,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "Crowdstrike-ContainHost Playbook with template version 3.1.5", + "description": "Crowdstrike-ContainHost Playbook with template version 3.1.6", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('playbookVersion3')]", @@ -14086,12 +13177,12 @@ "apiVersion": "2023-04-01-preview", "location": "[parameters('workspace-location')]", "properties": { - "version": "3.1.5", + "version": "3.1.6", "kind": "Solution", "contentSchemaVersion": "3.0.0", "displayName": "CrowdStrike Falcon Endpoint Protection", "publisherDisplayName": "Microsoft Sentinel, Microsoft Corporation", - "descriptionHtml": "

Note: Please refer to the following before installing the solution:

\n

• Review the solution Release Notes

\n

• There may be known issues pertaining to this Solution, please refer to them before installing.

\n

The CrowdStrike Falcon Endpoint Protection olution allows you to easily onboard CrowdStrike Falcon Endpoint Protection to Microsoft Sentinel. The data collected can be used to create custom dashboards, alerts, and improve investigation. This gives you more insight into your organization's endpoints and improves your security operation capabilities.

\n

This solution contains multiple Data Connectors that help ingest Falcon Data Replicator logs, Adversary Intelligence & other more specific data from CrowdStrike. Carefully review the capabilities of each connector and configure/enable the most relevant connector based on specific requirements.

\n

Data Connectors: 4, Parsers: 3, Workbooks: 1, Analytic Rules: 2, Playbooks: 3

\n

Learn more about Microsoft Sentinel | Learn more about Solutions

\n", + "descriptionHtml": "

Note: Please refer to the following before installing the solution:

\n

• Review the solution Release Notes

\n

• There may be known issues pertaining to this Solution, please refer to them before installing.

\n

The CrowdStrike Falcon Endpoint Protection solution allows you to easily onboard CrowdStrike Falcon Endpoint Protection to Microsoft Sentinel. The data collected can be used to create custom dashboards, alerts, and improve investigation. This gives you more insight into your organization's endpoints and improves your security operation capabilities.

\n

This solution contains multiple Data Connectors that help ingest Falcon Data Replicator logs, Adversary Intelligence & other more specific data from CrowdStrike. Carefully review the capabilities of each connector and configure/enable the most relevant connector based on specific requirements.

\n

Data Connectors: 4, Parsers: 3, Workbooks: 1, Analytic Rules: 2, Playbooks: 3

\n

Learn more about Microsoft Sentinel | Learn more about Solutions

\n", "contentKind": "Solution", "contentProductId": "[variables('_solutioncontentProductId')]", "id": "[variables('_solutioncontentProductId')]", From c7c5fe363533e2e790a3ad1ab808703031db430c Mon Sep 17 00:00:00 2001 From: Srikar Shastry Date: Thu, 23 Oct 2025 22:50:02 -0500 Subject: [PATCH 2/3] fix stream names --- .../CrowdStrikeAPI_DCR.json | 27 ++++++++-------- .../CrowdStrikeAPI_Definition.json | 4 +-- .../CrowdStrikeAPI_PollingConfig.json | 20 ++++++------ .../Package/3.1.6.zip | Bin 74675 -> 74711 bytes .../Package/createUiDefinition.json | 2 +- .../Package/mainTemplate.json | 30 +++++++++--------- .../common/standardLogStreams.ps1 | 10 +++--- 7 files changed, 46 insertions(+), 47 deletions(-) diff --git a/Solutions/CrowdStrike Falcon Endpoint Protection/Data Connectors/CrowdStrikeAPI_ccp/CrowdStrikeAPI_DCR.json b/Solutions/CrowdStrike Falcon Endpoint Protection/Data Connectors/CrowdStrikeAPI_ccp/CrowdStrikeAPI_DCR.json index c05ee3ff58a..5fdfb364277 100644 --- a/Solutions/CrowdStrike Falcon Endpoint Protection/Data Connectors/CrowdStrikeAPI_ccp/CrowdStrikeAPI_DCR.json +++ b/Solutions/CrowdStrike Falcon Endpoint Protection/Data Connectors/CrowdStrikeAPI_ccp/CrowdStrikeAPI_DCR.json @@ -1,59 +1,58 @@ [ { "name": "CrowdStrikeDCR", - "apiVersion": "2023-04-01-preview", + "apiVersion": "2023-03-11", "type": "Microsoft.Insights/dataCollectionRules", "location": "{{location}}", "properties": { "dataCollectionEndpointId": "{{dataCollectionEndpointId}}", - "streamDeclarations": {}, "destinations": { "logAnalytics": [ { - "workspaceResourceId": "{{workspaceResourceId}}", - "name": "clv2ws1" + "workspaceResourceId": "{{workspaceResourceId}}", + "name": "clv2ws1" } ] }, "dataFlows": [ { "streams": [ - "Microsoft-CrowdStrikeVulnerabilities" + "Microsoft-SentinelCrowdStrikeVulnerabilities" ], "destinations": [ - "clv2ws1" + "clv2ws1" ] }, { "streams": [ - "Microsoft-CrowdStrikeAlerts" + "Microsoft-SentinelCrowdStrikeAlerts" ], "destinations": [ - "clv2ws1" + "clv2ws1" ] }, { "streams": [ - "Microsoft-CrowdStrikeIncidents" + "Microsoft-SentinelCrowdStrikeIncidents" ], "destinations": [ - "clv2ws1" + "clv2ws1" ] }, { "streams": [ - "Microsoft-CrowdStrikeDetections" + "Microsoft-SentinelCrowdStrikeDetections" ], "destinations": [ - "clv2ws1" + "clv2ws1" ] }, { "streams": [ - "Microsoft-CrowdStrikeHosts" + "Microsoft-SentinelCrowdStrikeHosts" ], "destinations": [ - "clv2ws1" + "clv2ws1" ] } ] diff --git a/Solutions/CrowdStrike Falcon Endpoint Protection/Data Connectors/CrowdStrikeAPI_ccp/CrowdStrikeAPI_Definition.json b/Solutions/CrowdStrike Falcon Endpoint Protection/Data Connectors/CrowdStrikeAPI_ccp/CrowdStrikeAPI_Definition.json index 2c86a3faca1..dc05c234a87 100644 --- a/Solutions/CrowdStrike Falcon Endpoint Protection/Data Connectors/CrowdStrikeAPI_ccp/CrowdStrikeAPI_Definition.json +++ b/Solutions/CrowdStrike Falcon Endpoint Protection/Data Connectors/CrowdStrikeAPI_ccp/CrowdStrikeAPI_Definition.json @@ -1,13 +1,13 @@ { "name": "CrowdStrikeAPICCPDefinition", - "apiVersion": "2023-04-01-preview", + "apiVersion": "2024-09-01", "type": "Microsoft.SecurityInsights/dataConnectorDefinitions", "location": "[parameters('workspace-location')]", "kind": "Customizable", "properties": { "connectorUiConfig": { "id": "CrowdStrikeAPICCPDefinition", - "title": "CrowdStrike API Data Connector (via Codeless Connector Framework) (Preview)", + "title": "CrowdStrike API Data Connector (via Codeless Connector Framework)", "publisher": "Microsoft", "descriptionMarkdown": "The [CrowdStrike Data Connector](https://www.crowdstrike.com/) allows ingesting logs from the CrowdStrike API into Microsoft Sentinel. This connector is built on the Microsoft Sentinel Codeless Connector Platform and uses the CrowdStrike API to fetch logs for Alerts, Detections, Hosts, Incidents, and Vulnerabilities. It supports DCR-based ingestion time transformations so that queries can run more efficiently.", "graphQueriesTableName": "CrowdStrikeVulnerabilities", diff --git a/Solutions/CrowdStrike Falcon Endpoint Protection/Data Connectors/CrowdStrikeAPI_ccp/CrowdStrikeAPI_PollingConfig.json b/Solutions/CrowdStrike Falcon Endpoint Protection/Data Connectors/CrowdStrikeAPI_ccp/CrowdStrikeAPI_PollingConfig.json index d80c6b5ba11..916acd7934d 100644 --- a/Solutions/CrowdStrike Falcon Endpoint Protection/Data Connectors/CrowdStrikeAPI_ccp/CrowdStrikeAPI_PollingConfig.json +++ b/Solutions/CrowdStrike Falcon Endpoint Protection/Data Connectors/CrowdStrikeAPI_ccp/CrowdStrikeAPI_PollingConfig.json @@ -1,7 +1,7 @@ [ { "type": "Microsoft.SecurityInsights/dataConnectors", - "apiVersion": "2023-04-01-preview", + "apiVersion": "2024-09-01", "name": "CrowdStrikeVulnerabilitiesPoller", "location": "[parameters('workspace-location')]", "kind": "RestApiPoller", @@ -51,7 +51,7 @@ "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", "dataType": "CrowdStrikeVulnerabilities", "dcrConfig": { - "streamName": "Microsoft-CrowdStrikeVulnerabilities", + "streamName": "SENTINEL_CROWDSTRIKEVULNERABILITIES", "dataCollectionEndpoint": "{{dataCollectionEndpoint}}", "dataCollectionRuleImmutableId": "{{dataCollectionRuleImmutableId}}" } @@ -59,7 +59,7 @@ }, { "type": "Microsoft.SecurityInsights/dataConnectors", - "apiVersion": "2023-04-01-preview", + "apiVersion": "2024-09-01", "name": "CrowdStrikeAlertsPoller", "location": "[parameters('workspace-location')]", "kind": "RestApiPoller", @@ -106,7 +106,7 @@ "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", "dataType": "CrowdStrikeAlerts", "dcrConfig": { - "streamName": "Microsoft-CrowdStrikeAlerts", + "streamName": "SENTINEL_CROWDSTRIKEALERTS", "dataCollectionEndpoint": "{{dataCollectionEndpoint}}", "dataCollectionRuleImmutableId": "{{dataCollectionRuleImmutableId}}" } @@ -114,7 +114,7 @@ }, { "type": "Microsoft.SecurityInsights/dataConnectors", - "apiVersion": "2023-04-01-preview", + "apiVersion": "2024-09-01", "name": "CrowdStrikeIncidentsPoller", "location": "[parameters('workspace-location')]", "kind": "RestApiPoller", @@ -200,7 +200,7 @@ "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", "dataType": "CrowdStrikeIncidents", "dcrConfig": { - "streamName": "Microsoft-CrowdStrikeIncidents", + "streamName": "SENTINEL_CROWDSTRIKEINCIDENTS", "dataCollectionEndpoint": "{{dataCollectionEndpoint}}", "dataCollectionRuleImmutableId": "{{dataCollectionRuleImmutableId}}" } @@ -208,7 +208,7 @@ }, { "type": "Microsoft.SecurityInsights/dataConnectors", - "apiVersion": "2023-04-01-preview", + "apiVersion": "2024-09-01", "name": "CrowdStrikeDetectionsPoller", "location": "[parameters('workspace-location')]", "kind": "RestApiPoller", @@ -255,7 +255,7 @@ "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", "dataType": "CrowdStrikeDetections", "dcrConfig": { - "streamName": "Microsoft-CrowdStrikeDetections", + "streamName": "SENTINEL_CROWDSTRIKEDETECTIONS", "dataCollectionEndpoint": "{{dataCollectionEndpoint}}", "dataCollectionRuleImmutableId": "{{dataCollectionRuleImmutableId}}" } @@ -263,7 +263,7 @@ }, { "type": "Microsoft.SecurityInsights/dataConnectors", - "apiVersion": "2023-02-01-preview", + "apiVersion": "2024-09-01", "name": "CrowdStrikeHostsPoller", "location": "[parameters('workspace-location')]", "kind": "RestApiPoller", @@ -313,7 +313,7 @@ "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", "dataType": "CrowdStrikeHosts", "dcrConfig": { - "streamName": "Microsoft-CrowdStrikeHosts", + "streamName": "SENTINEL_CROWDSTRIKEHOSTS", "dataCollectionEndpoint": "{{dataCollectionEndpoint}}", "dataCollectionRuleImmutableId": "{{dataCollectionRuleImmutableId}}" } diff --git a/Solutions/CrowdStrike Falcon Endpoint Protection/Package/3.1.6.zip b/Solutions/CrowdStrike Falcon Endpoint Protection/Package/3.1.6.zip index 1b4903479f84b5b87411a2722fd157af37d3366f..8c153a8b4437ed1b661c7bd05e7bc6e2d074c5b8 100644 GIT binary patch delta 47433 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%0Dt!}a7DzeC7?g9 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 a0xS^n&*T5kF_uzA3QPupO$z+8_P+o~)nLs4 diff --git a/Solutions/CrowdStrike Falcon Endpoint Protection/Package/createUiDefinition.json b/Solutions/CrowdStrike Falcon Endpoint Protection/Package/createUiDefinition.json index 754cf98760b..ce63572ae93 100644 --- a/Solutions/CrowdStrike Falcon Endpoint Protection/Package/createUiDefinition.json +++ b/Solutions/CrowdStrike Falcon Endpoint Protection/Package/createUiDefinition.json @@ -91,7 +91,7 @@ "name": "dataconnectors4-text", "type": "Microsoft.Common.TextBlock", "options": { - "text": "This Solution installs the data connector for CrowdStrike API Data Connector (via Codeless Connector Framework) (Preview). You can get CrowdStrike API Data Connector (via Codeless Connector Framework) (Preview) data in your Microsoft Sentinel workspace. After installing the solution, configure and enable this data connector by following guidance in Manage solution view." + "text": "This Solution installs the data connector for CrowdStrike API Data Connector (via Codeless Connector Framework). You can get CrowdStrike API Data Connector (via Codeless Connector Framework) data in your Microsoft Sentinel workspace. After installing the solution, configure and enable this data connector by following guidance in Manage solution view." } }, { diff --git a/Solutions/CrowdStrike Falcon Endpoint Protection/Package/mainTemplate.json b/Solutions/CrowdStrike Falcon Endpoint Protection/Package/mainTemplate.json index 7abea0dd5f6..25a8c7e81c6 100644 --- a/Solutions/CrowdStrike Falcon Endpoint Protection/Package/mainTemplate.json +++ b/Solutions/CrowdStrike Falcon Endpoint Protection/Package/mainTemplate.json @@ -8567,7 +8567,7 @@ ], "properties": { "contentId": "[variables('_dataConnectorContentIdConnectorDefinition4')]", - "displayName": "CrowdStrike API Data Connector (via Codeless Connector Framework) (Preview)", + "displayName": "CrowdStrike API Data Connector (via Codeless Connector Framework)", "contentKind": "DataConnector", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", @@ -8584,7 +8584,7 @@ "properties": { "connectorUiConfig": { "id": "CrowdStrikeAPICCPDefinition", - "title": "CrowdStrike API Data Connector (via Codeless Connector Framework) (Preview)", + "title": "CrowdStrike API Data Connector (via Codeless Connector Framework)", "publisher": "Microsoft", "descriptionMarkdown": "The [CrowdStrike Data Connector](https://www.crowdstrike.com/) allows ingesting logs from the CrowdStrike API into Microsoft Sentinel. This connector is built on the Microsoft Sentinel Codeless Connector Platform and uses the CrowdStrike API to fetch logs for Alerts, Detections, Hosts, Incidents, and Vulnerabilities. It supports DCR-based ingestion time transformations so that queries can run more efficiently.", "graphQueriesTableName": "CrowdStrikeVulnerabilities", @@ -8802,7 +8802,7 @@ "dataFlows": [ { "streams": [ - "Microsoft-CrowdStrikeVulnerabilities" + "Microsoft-SentinelCrowdStrikeVulnerabilities" ], "destinations": [ "clv2ws1" @@ -8810,7 +8810,7 @@ }, { "streams": [ - "Microsoft-CrowdStrikeAlerts" + "Microsoft-SentinelCrowdStrikeAlerts" ], "destinations": [ "clv2ws1" @@ -8818,7 +8818,7 @@ }, { "streams": [ - "Microsoft-CrowdStrikeIncidents" + "Microsoft-SentinelCrowdStrikeIncidents" ], "destinations": [ "clv2ws1" @@ -8826,7 +8826,7 @@ }, { "streams": [ - "Microsoft-CrowdStrikeDetections" + "Microsoft-SentinelCrowdStrikeDetections" ], "destinations": [ "clv2ws1" @@ -8834,7 +8834,7 @@ }, { "streams": [ - "Microsoft-CrowdStrikeHosts" + "Microsoft-SentinelCrowdStrikeHosts" ], "destinations": [ "clv2ws1" @@ -8863,7 +8863,7 @@ "properties": { "connectorUiConfig": { "id": "CrowdStrikeAPICCPDefinition", - "title": "CrowdStrike API Data Connector (via Codeless Connector Framework) (Preview)", + "title": "CrowdStrike API Data Connector (via Codeless Connector Framework)", "publisher": "Microsoft", "descriptionMarkdown": "The [CrowdStrike Data Connector](https://www.crowdstrike.com/) allows ingesting logs from the CrowdStrike API into Microsoft Sentinel. This connector is built on the Microsoft Sentinel Codeless Connector Platform and uses the CrowdStrike API to fetch logs for Alerts, Detections, Hosts, Incidents, and Vulnerabilities. It supports DCR-based ingestion time transformations so that queries can run more efficiently.", "graphQueriesTableName": "CrowdStrikeVulnerabilities", @@ -9072,7 +9072,7 @@ ], "properties": { "contentId": "[variables('_dataConnectorContentIdConnections4')]", - "displayName": "CrowdStrike API Data Connector (via Codeless Connector Framework) (Preview)", + "displayName": "CrowdStrike API Data Connector (via Codeless Connector Framework)", "contentKind": "ResourcesDataConnector", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", @@ -9087,7 +9087,7 @@ "type": "securestring" }, "connectorDefinitionName": { - "defaultValue": "CrowdStrike API Data Connector (via Codeless Connector Framework) (Preview)", + "defaultValue": "CrowdStrike API Data Connector (via Codeless Connector Framework)", "type": "securestring", "minLength": 1 }, @@ -9200,7 +9200,7 @@ "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", "dataType": "CrowdStrikeVulnerabilities", "dcrConfig": { - "streamName": "Microsoft-CrowdStrikeVulnerabilities", + "streamName": "SENTINEL_CROWDSTRIKEVULNERABILITIES", "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]", "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]" } @@ -9255,7 +9255,7 @@ "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", "dataType": "CrowdStrikeAlerts", "dcrConfig": { - "streamName": "Microsoft-CrowdStrikeAlerts", + "streamName": "SENTINEL_CROWDSTRIKEALERTS", "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]", "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]" } @@ -9349,7 +9349,7 @@ "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", "dataType": "CrowdStrikeIncidents", "dcrConfig": { - "streamName": "Microsoft-CrowdStrikeIncidents", + "streamName": "SENTINEL_CROWDSTRIKEINCIDENTS", "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]", "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]" } @@ -9404,7 +9404,7 @@ "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", "dataType": "CrowdStrikeDetections", "dcrConfig": { - "streamName": "Microsoft-CrowdStrikeDetections", + "streamName": "SENTINEL_CROWDSTRIKEDETECTIONS", "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]", "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]" } @@ -9462,7 +9462,7 @@ "connectorDefinitionName": "CrowdStrikeAPICCPDefinition", "dataType": "CrowdStrikeHosts", "dcrConfig": { - "streamName": "Microsoft-CrowdStrikeHosts", + "streamName": "SENTINEL_CROWDSTRIKEHOSTS", "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]", "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]" } diff --git a/Tools/Create-Azure-Sentinel-Solution/common/standardLogStreams.ps1 b/Tools/Create-Azure-Sentinel-Solution/common/standardLogStreams.ps1 index 13b833a48a8..091cfcefb1f 100644 --- a/Tools/Create-Azure-Sentinel-Solution/common/standardLogStreams.ps1 +++ b/Tools/Create-Azure-Sentinel-Solution/common/standardLogStreams.ps1 @@ -188,11 +188,11 @@ $standardStreamMapping += @{ Key = 'SECURITY_WEF_EVENT_BLOB_OBO'; Value = 'Micro $standardStreamMapping += @{ Key = 'SENTINEL_GOOGLEWORKSPACEREPORTS'; Value = 'Microsoft-GoogleWorkspaceReports' } $standardStreamMapping += @{ Key = 'SENTINEL_AWSSECHUB'; Value = 'Microsoft-AWSSecurityHubFindings' } $standardStreamMapping += @{ Key = 'SENTINEL_AWSROUTE53RESOLVER'; Value = 'Microsoft-AWSRoute53Resolver' } -$standardStreamMapping += @{ Key = 'CROWDSTRIKE_VULNERABILITIES'; Value = 'Microsoft-CrowdStrikeVulnerabilities' } -$standardStreamMapping += @{ Key = 'CROWDSTRIKE_ALERTS'; Value = 'Microsoft-CrowdStrikeAlerts' } -$standardStreamMapping += @{ Key = 'CROWDSTRIKE_INCIDENTS'; Value = 'Microsoft-CrowdStrikeIncidents' } -$standardStreamMapping += @{ Key = 'CROWDSTRIKE_DETECTIONS'; Value = 'Microsoft-CrowdStrikeDetections' } -$standardStreamMapping += @{ Key = 'CROWDSTRIKE_HOSTS'; Value = 'Microsoft-CrowdStrikeHosts' } +$standardStreamMapping += @{ Key = 'SENTINEL_CROWDSTRIKEVULNERABILITIES'; Value = 'Microsoft-SentinelCrowdStrikeVulnerabilities' } +$standardStreamMapping += @{ Key = 'SENTINEL_CROWDSTRIKEALERTS'; Value = 'Microsoft-SentinelCrowdStrikeAlerts' } +$standardStreamMapping += @{ Key = 'SENTINEL_CROWDSTRIKEINCIDENTS'; Value = 'Microsoft-SentinelCrowdStrikeIncidents' } +$standardStreamMapping += @{ Key = 'SENTINEL_CROWDSTRIKEDETECTIONS'; Value = 'Microsoft-SentinelCrowdStrikeDetections' } +$standardStreamMapping += @{ Key = 'SENTINEL_CROWDSTRIKEHOSTS'; Value = 'Microsoft-SentinelCrowdStrikeHosts' } $standardStreamMapping += @{ Key = 'SENTINEL_GCP_VPC_FLOW_LOGS'; Value = 'Microsoft-GCPVPCFlow' } $standardStreamMapping += @{ Key = 'SENTINEL_GCP_CDN_LOGS'; Value = 'Microsoft-GCPCDN'} $standardStreamMapping += @{ Key = 'SENTINEL_GCPRESOURCEMANAGER'; Value = 'Microsoft-GCPResourceManager'} From b392a6a4ba2e8c4c96deedff9fd3aaada45bb466 Mon Sep 17 00:00:00 2001 From: Srikar Shastry Date: Thu, 23 Oct 2025 22:57:27 -0500 Subject: [PATCH 3/3] update release notes --- Solutions/CrowdStrike Falcon Endpoint Protection/ReleaseNotes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Solutions/CrowdStrike Falcon Endpoint Protection/ReleaseNotes.md b/Solutions/CrowdStrike Falcon Endpoint Protection/ReleaseNotes.md index 13a0a93f8fe..ef0d74a97ba 100644 --- a/Solutions/CrowdStrike Falcon Endpoint Protection/ReleaseNotes.md +++ b/Solutions/CrowdStrike Falcon Endpoint Protection/ReleaseNotes.md @@ -1,5 +1,6 @@ | **Version** | **Date Modified (DD-MM-YYYY)** | **Change History** | |-------------|--------------------------------|--------------------------------------------------------------------------------| +| 3.1.6 | 23-10-2025 | Updated *CrowdStrike API Data Connector* to fix deprecated detections API issues | | 3.1.5 | 22-08-2025 | Updated *CrowdStrike API Data Connector* to fix duplicate logs issues | | 3.1.4 | 04-07-2025 | Added new **CCF Connector** to the Solution *CrowdStrike API Data Connector*.
Removed *Crowdstrike Falcon Data Replicator* - Function App **Data Connector**.
Updated Connectors description. | | 3.1.3 | 24-06-2025 | Removed "DEPRECATED" label from the *Crowdstrike Falcon Data Replicator V2* - **Data connector**.
Updated Solution description. |