From 3794241260234cb0feebb40198e6083b49ae2b36 Mon Sep 17 00:00:00 2001 From: mohitjha_elastic Date: Tue, 28 Oct 2025 01:23:36 +0530 Subject: [PATCH 1/7] Add support for threat event data stream --- .../rally/threat_event-benchmark.yml | 14 + .../rally/threatevent-benchmark/config.yml | 192 ++ .../rally/threatevent-benchmark/fields.yml | 186 ++ .../threatevent-benchmark/template.ndjson | 217 +++ .../sentinel_one/_dev/build/docs/README.md | 93 +- .../_dev/deploy/docker/files/config.yml | 530 +++++- packages/sentinel_one/changelog.yml | 5 + .../_dev/benchmark/pipeline/config.yml | 1 + .../pipeline/threat-event-sample.log | 3 + .../_dev/test/pipeline/test-common-config.yml | 3 + .../pipeline/test-pipeline-application.log | 4 + ...est-pipeline-application.log-expected.json | 825 ++++++++ .../_dev/test/policy/test-all.expected | 252 +++ .../_dev/test/policy/test-all.yml | 105 ++ .../_dev/test/policy/test-default.expected | 158 ++ .../_dev/test/policy/test-default.yml | 13 + .../_dev/test/system/test-default-config.yml | 12 + .../threat_event/agent/stream/cel.yml.hbs | 156 ++ .../elasticsearch/ilm/default_policy.json | 20 + .../elasticsearch/ingest_pipeline/default.yml | 889 +++++++++ .../threat_event/fields/base-fields.yml | 16 + .../data_stream/threat_event/fields/beats.yml | 6 + .../threat_event/fields/fields.yml | 228 +++ .../data_stream/threat_event/lifecycle.yml | 1 + .../data_stream/threat_event/manifest.yml | 81 + .../threat_event/sample_event.json | 232 +++ packages/sentinel_one/docs/README.md | 433 ++++- .../fields/base-fields.yml | 16 + .../latest_threat_event/fields/beats.yml | 6 + .../latest_threat_event/fields/ecs.yml | 54 + .../latest_threat_event/fields/fields.yml | 228 +++ .../fields/is-transform-source-false.yml | 4 + .../latest_threat_event/manifest.yml | 11 + .../latest_threat_event/transform.yml | 37 + .../img/sentinel-one-dashboard.png | Bin 0 -> 77451 bytes .../sentinel-one-threat-event-dashboard.png | Bin 0 -> 251469 bytes ...-0dd17490-bbb8-11ec-82b7-8fcb232e9538.json | 794 ++++---- ...-413bf268-78f7-4bea-b668-55b5adacbf08.json | 1656 +++++++++++++++++ ...-5881f5f0-bb2c-11ec-82b7-8fcb232e9538.json | 374 ++-- ...-67844880-bbb5-11ec-82b7-8fcb232e9538.json | 296 +-- ...-899f2630-bb27-11ec-82b7-8fcb232e9538.json | 296 +-- ...-9d3f16ad-d421-4475-b0e2-c9b3f795e0d5.json | 340 ++-- ...-acd472d9-a6b7-4a53-a58d-06c315764c8d.json | 256 +-- ...-bcf1f680-bba3-11ec-82b7-8fcb232e9538.json | 360 ++-- ...-35fe472a-8994-4b8d-a6bc-df41aa12ca46.json | 2 +- ...entinel_one-security-solution-default.json | 4 +- packages/sentinel_one/manifest.yml | 6 +- 47 files changed, 8062 insertions(+), 1353 deletions(-) create mode 100644 packages/sentinel_one/_dev/benchmark/rally/threat_event-benchmark.yml create mode 100644 packages/sentinel_one/_dev/benchmark/rally/threatevent-benchmark/config.yml create mode 100644 packages/sentinel_one/_dev/benchmark/rally/threatevent-benchmark/fields.yml create mode 100644 packages/sentinel_one/_dev/benchmark/rally/threatevent-benchmark/template.ndjson create mode 100644 packages/sentinel_one/data_stream/threat_event/_dev/benchmark/pipeline/config.yml create mode 100644 packages/sentinel_one/data_stream/threat_event/_dev/benchmark/pipeline/threat-event-sample.log create mode 100644 packages/sentinel_one/data_stream/threat_event/_dev/test/pipeline/test-common-config.yml create mode 100644 packages/sentinel_one/data_stream/threat_event/_dev/test/pipeline/test-pipeline-application.log create mode 100644 packages/sentinel_one/data_stream/threat_event/_dev/test/pipeline/test-pipeline-application.log-expected.json create mode 100644 packages/sentinel_one/data_stream/threat_event/_dev/test/policy/test-all.expected create mode 100644 packages/sentinel_one/data_stream/threat_event/_dev/test/policy/test-all.yml create mode 100644 packages/sentinel_one/data_stream/threat_event/_dev/test/policy/test-default.expected create mode 100644 packages/sentinel_one/data_stream/threat_event/_dev/test/policy/test-default.yml create mode 100644 packages/sentinel_one/data_stream/threat_event/_dev/test/system/test-default-config.yml create mode 100644 packages/sentinel_one/data_stream/threat_event/agent/stream/cel.yml.hbs create mode 100644 packages/sentinel_one/data_stream/threat_event/elasticsearch/ilm/default_policy.json create mode 100644 packages/sentinel_one/data_stream/threat_event/elasticsearch/ingest_pipeline/default.yml create mode 100644 packages/sentinel_one/data_stream/threat_event/fields/base-fields.yml create mode 100644 packages/sentinel_one/data_stream/threat_event/fields/beats.yml create mode 100644 packages/sentinel_one/data_stream/threat_event/fields/fields.yml create mode 100644 packages/sentinel_one/data_stream/threat_event/lifecycle.yml create mode 100644 packages/sentinel_one/data_stream/threat_event/manifest.yml create mode 100644 packages/sentinel_one/data_stream/threat_event/sample_event.json create mode 100644 packages/sentinel_one/elasticsearch/transform/latest_threat_event/fields/base-fields.yml create mode 100644 packages/sentinel_one/elasticsearch/transform/latest_threat_event/fields/beats.yml create mode 100644 packages/sentinel_one/elasticsearch/transform/latest_threat_event/fields/ecs.yml create mode 100644 packages/sentinel_one/elasticsearch/transform/latest_threat_event/fields/fields.yml create mode 100644 packages/sentinel_one/elasticsearch/transform/latest_threat_event/fields/is-transform-source-false.yml create mode 100644 packages/sentinel_one/elasticsearch/transform/latest_threat_event/manifest.yml create mode 100644 packages/sentinel_one/elasticsearch/transform/latest_threat_event/transform.yml create mode 100644 packages/sentinel_one/img/sentinel-one-dashboard.png create mode 100644 packages/sentinel_one/img/sentinel-one-threat-event-dashboard.png create mode 100644 packages/sentinel_one/kibana/dashboard/sentinel_one-413bf268-78f7-4bea-b668-55b5adacbf08.json diff --git a/packages/sentinel_one/_dev/benchmark/rally/threat_event-benchmark.yml b/packages/sentinel_one/_dev/benchmark/rally/threat_event-benchmark.yml new file mode 100644 index 00000000000..c1b914149ad --- /dev/null +++ b/packages/sentinel_one/_dev/benchmark/rally/threat_event-benchmark.yml @@ -0,0 +1,14 @@ +--- +description: Benchmark 100000 sentinel_one.threat_event events ingested +data_stream: + name: threat_event +corpora: + generator: + total_events: 100000 + template: + type: gotext + path: ./threatevent-benchmark/template.ndjson + config: + path: ./threatevent-benchmark/config.yml + fields: + path: ./threatevent-benchmark/fields.yml diff --git a/packages/sentinel_one/_dev/benchmark/rally/threatevent-benchmark/config.yml b/packages/sentinel_one/_dev/benchmark/rally/threatevent-benchmark/config.yml new file mode 100644 index 00000000000..cdf406ce284 --- /dev/null +++ b/packages/sentinel_one/_dev/benchmark/rally/threatevent-benchmark/config.yml @@ -0,0 +1,192 @@ +fields: + - name: activeContentFileId + cardinality: 1000 + - name: activeContentHash + cardinality: 1000 + - name: activeContentPath + cardinality: 1000 + - name: agentDomain + cardinality: 1000 + - name: agentGroupId + cardinality: 1000 + - name: agentId + cardinality: 1000 + - name: agentIp + cardinality: 1000 + - name: agentMachineType + cardinality: 1000 + - name: agentName + cardinality: 1000 + - name: agentNetworkStatus + cardinality: 1000 + - name: agentOs + enum: + - linux + - windows + - macos + - unix + - android + - ios + - name: agentUuid + cardinality: 1000 + - name: agentVersion + cardinality: 1000 + - name: connectionStatus + cardinality: 1000 + - name: direction + cardinality: 1000 + - name: dnsRequest + cardinality: 1000 + - name: dnsResponse + cardinality: 1000 + - name: dstIp + cardinality: 1000 + - name: dstPort + range: + min: 0 + max: 65535 + - name: eventType + cardinality: 1000 + - name: fileFullName + cardinality: 1000 + - name: fileId + cardinality: 1000 + - name: fileMd5 + cardinality: 1000 + - name: fileSha1 + cardinality: 1000 + - name: fileSha256 + cardinality: 1000 + - name: fileSize + range: + min: 1 + max: 1000 + cardinality: 100 + - name: fileType + cardinality: 1000 + - name: hasActiveContent + - name: id + range: + min: 100000000000000000 + max: 999999999999999999 + cardinality: 100000 + - name: indicatorCategory + cardinality: 1000 + - name: indicatorDescription + cardinality: 1000 + - name: indicatorMetadata + cardinality: 1000 + - name: indicatorName + cardinality: 1000 + - name: loginsBaseType + cardinality: 1000 + - name: loginsUserName + cardinality: 1000 + - name: md5 + cardinality: 1000 + - name: networkMethod + cardinality: 1000 + - name: networkSource + cardinality: 1000 + - name: networkUrl + cardinality: 1000 + - name: objectType + cardinality: 1000 + - name: oldFileMd5 + cardinality: 1000 + - name: oldFileName + cardinality: 1000 + - name: oldFileSha1 + cardinality: 1000 + - name: oldFileSha256 + cardinality: 1000 + - name: parentPid + range: + min: 0 + max: 10000 + - name: parentProcessGroupId + cardinality: 1000 + - name: parentProcessName + cardinality: 1000 + - name: parentProcessUniqueKey + cardinality: 1000 + - name: pid + range: + min: 0 + max: 10000 + - name: processCmd + cardinality: 1000 + - name: processDisplayName + cardinality: 1000 + - name: processGroupId + cardinality: 1000 + - name: processImagePath + cardinality: 1000 + - name: processImageSha1Hash + cardinality: 1000 + - name: processIntegrityLevel + cardinality: 1000 + - name: processIsMalicious + - name: processIsRedirectedCommandProcessor + cardinality: 1000 + - name: processIsWow64 + cardinality: 1000 + - name: processName + cardinality: 1000 + - name: processRoot + cardinality: 1000 + - name: processSessionId + cardinality: 1000 + - name: processSubSystem + cardinality: 1000 + - name: processUniqueKey + cardinality: 1000 + - name: processUserName + cardinality: 1000 + - name: protocol + cardinality: 1000 + - name: publisher + cardinality: 1000 + - name: registryClassification + cardinality: 1000 + - name: registryId + cardinality: 1000 + - name: registryPath + cardinality: 1000 + - name: relatedToThreat + - name: rpid + cardinality: 1000 + - name: sha1 + cardinality: 1000 + - name: sha256 + cardinality: 1000 + - name: signatureSignedInvalidReason + cardinality: 1000 + - name: signedStatus + cardinality: 1000 + - name: siteId + cardinality: 1000 + - name: siteName + cardinality: 1000 + - name: srcIp + cardinality: 1000 + - name: srcPort + range: + min: 0 + max: 65535 + - name: storyline + cardinality: 1000 + - name: taskName + cardinality: 1000 + - name: taskPath + cardinality: 1000 + - name: threatStatus + cardinality: 1000 + - name: tid + cardinality: 1000 + - name: trueContext + cardinality: 1000 + - name: user + cardinality: 1000 + - name: verifiedStatus + cardinality: 1000 diff --git a/packages/sentinel_one/_dev/benchmark/rally/threatevent-benchmark/fields.yml b/packages/sentinel_one/_dev/benchmark/rally/threatevent-benchmark/fields.yml new file mode 100644 index 00000000000..fce60c44935 --- /dev/null +++ b/packages/sentinel_one/_dev/benchmark/rally/threatevent-benchmark/fields.yml @@ -0,0 +1,186 @@ +- name: activeContentFileId + type: keyword +- name: activeContentHash + type: keyword +- name: activeContentPath + type: keyword +- name: agentDomain + type: keyword +- name: agentGroupId + type: keyword +- name: agentId + type: keyword +- name: agentInfected + type: boolean +- name: agentIp + type: ip +- name: agentIsActive + type: boolean +- name: agentIsDecommissioned + type: boolean +- name: agentMachineType + type: keyword +- name: agentName + type: keyword +- name: agentNetworkStatus + type: keyword +- name: agentOs + type: keyword +- name: agentUuid + type: keyword +- name: agentVersion + type: keyword +- name: connectionStatus + type: keyword +- name: createdAt + type: date +- name: direction + type: keyword +- name: dnsRequest + type: keyword +- name: dnsResponse + type: keyword +- name: dstIp + type: ip +- name: dstPort + type: long +- name: eventType + type: keyword +- name: fileFullName + type: keyword +- name: fileId + type: keyword +- name: fileMd5 + type: keyword +- name: fileSha1 + type: keyword +- name: fileSha256 + type: keyword +- name: fileSize + type: long +- name: fileType + type: keyword +- name: hasActiveContent + type: boolean +- name: id + type: keyword +- name: indicatorCategory + type: keyword +- name: indicatorDescription + type: keyword +- name: indicatorMetadata + type: keyword +- name: indicatorName + type: keyword +- name: loginsBaseType + type: keyword +- name: loginsUserName + type: keyword +- name: md5 + type: keyword +- name: networkMethod + type: keyword +- name: networkSource + type: keyword +- name: networkUrl + type: keyword +- name: objectType + type: keyword +- name: oldFileMd5 + type: keyword +- name: oldFileName + type: keyword +- name: oldFileSha1 + type: keyword +- name: oldFileSha256 + type: keyword +- name: parentPid + type: long +- name: parentProcessGroupId + type: keyword +- name: parentProcessIsMalicious + type: boolean +- name: parentProcessName + type: keyword +- name: parentProcessUniqueKey + type: keyword +- name: pid + type: long +- name: processCmd + type: keyword +- name: processDisplayName + type: keyword +- name: processGroupId + type: keyword +- name: processImagePath + type: keyword +- name: processImageSha1Hash + type: keyword +- name: processIntegrityLevel + type: keyword +- name: processIsMalicious + type: boolean +- name: processIsRedirectedCommandProcessor + type: keyword +- name: processIsWow64 + type: keyword +- name: processName + type: keyword +- name: processRoot + type: keyword +- name: processSessionId + type: keyword +- name: processStartTime + type: date +- name: processSubSystem + type: keyword +- name: processUniqueKey + type: keyword +- name: processUserName + type: keyword +- name: protocol + type: keyword +- name: publisher + type: keyword +- name: registryClassification + type: keyword +- name: registryId + type: keyword +- name: registryPath + type: keyword +- name: relatedToThreat + type: boolean +- name: rpid + type: keyword +- name: sha1 + type: keyword +- name: sha256 + type: keyword +- name: signatureSignedInvalidReason + type: keyword +- name: signedStatus + type: keyword +- name: siteId + type: keyword +- name: siteName + type: keyword +- name: srcIp + type: ip +- name: srcPort + type: long +- name: storyline + type: keyword +- name: taskName + type: keyword +- name: taskPath + type: keyword +- name: threatStatus + type: keyword +- name: tid + type: keyword +- name: trueContext + type: keyword +- name: user + type: keyword +- name: verifiedStatus + type: keyword diff --git a/packages/sentinel_one/_dev/benchmark/rally/threatevent-benchmark/template.ndjson b/packages/sentinel_one/_dev/benchmark/rally/threatevent-benchmark/template.ndjson new file mode 100644 index 00000000000..79093aeed16 --- /dev/null +++ b/packages/sentinel_one/_dev/benchmark/rally/threatevent-benchmark/template.ndjson @@ -0,0 +1,217 @@ +{{- $activeContentFileId := generate "activeContentFileId" }} +{{- $activeContentHash := generate "activeContentHash" }} +{{- $activeContentPath := generate "activeContentPath" }} +{{- $agentDomain := generate "agentDomain" }} +{{- $agentGroupId := generate "agentGroupId" }} +{{- $agentId := generate "agentId" }} +{{- $agentInfected := generate "agentInfected" }} +{{- $agentIp := generate "agentIp" }} +{{- $agentIsActive := generate "agentIsActive" }} +{{- $agentIsDecommissioned := generate "agentIsDecommissioned" }} +{{- $agentMachineType := generate "agentMachineType" }} +{{- $agentName := generate "agentName" }} +{{- $agentNetworkStatus := generate "agentNetworkStatus" }} +{{- $agentOs := generate "agentOs" }} +{{- $agentUuid := generate "agentUuid" }} +{{- $agentVersion := generate "agentVersion" }} +{{- $connectionStatus := generate "connectionStatus" }} +{{- $direction := generate "direction" }} +{{- $dnsRequest := generate "dnsRequest" }} +{{- $dnsResponse := generate "dnsResponse" }} +{{- $dstIp := generate "dstIp" }} +{{- $dstPort := generate "dstPort" }} +{{- $eventType := generate "eventType" }} +{{- $fileFullName := generate "fileFullName" }} +{{- $fileId := generate "fileId" }} +{{- $fileMd5 := generate "fileMd5" }} +{{- $fileSha1 := generate "fileSha1" }} +{{- $fileSha256 := generate "fileSha256" }} +{{- $fileSize := generate "fileSize" }} +{{- $fileType := generate "fileType" }} +{{- $hasActiveContent := generate "hasActiveContent" }} +{{- $id := generate "id" }} +{{- $indicatorCategory := generate "indicatorCategory" }} +{{- $indicatorDescription := generate "indicatorDescription" }} +{{- $indicatorMetadata := generate "indicatorMetadata" }} +{{- $indicatorName := generate "indicatorName" }} +{{- $loginsBaseType := generate "loginsBaseType" }} +{{- $loginsUserName := generate "loginsUserName" }} +{{- $md5 := generate "md5" }} +{{- $networkMethod := generate "networkMethod" }} +{{- $networkSource := generate "networkSource" }} +{{- $networkUrl := generate "networkUrl" }} +{{- $objectType := generate "objectType" }} +{{- $oldFileMd5 := generate "oldFileMd5" }} +{{- $oldFileName := generate "oldFileName" }} +{{- $oldFileSha1 := generate "oldFileSha1" }} +{{- $oldFileSha256 := generate "oldFileSha256" }} +{{- $parentPid := generate "parentPid" }} +{{- $parentProcessGroupId := generate "parentProcessGroupId" }} +{{- $parentProcessIsMalicious := generate "parentProcessIsMalicious" }} +{{- $parentProcessName := generate "parentProcessName" }} +{{- $parentProcessUniqueKey := generate "parentProcessUniqueKey" }} +{{- $pid := generate "pid" }} +{{- $processCmd := generate "processCmd" }} +{{- $processDisplayName := generate "processDisplayName" }} +{{- $processGroupId := generate "processGroupId" }} +{{- $processImagePath := generate "processImagePath" }} +{{- $processImageSha1Hash := generate "processImageSha1Hash" }} +{{- $processIntegrityLevel := generate "processIntegrityLevel" }} +{{- $processIsMalicious := generate "processIsMalicious" }} +{{- $processIsRedirectedCommandProcessor := generate "processIsRedirectedCommandProcessor" }} +{{- $processIsWow64 := generate "processIsWow64" }} +{{- $processName := generate "processName" }} +{{- $processRoot := generate "processRoot" }} +{{- $processSessionId := generate "processSessionId" }} +{{- $processSubSystem := generate "processSubSystem" }} +{{- $processUniqueKey := generate "processUniqueKey" }} +{{- $processUserName := generate "processUserName" }} +{{- $protocol := generate "protocol" }} +{{- $publisher := generate "publisher" }} +{{- $registryClassification := generate "registryClassification" }} +{{- $registryId := generate "registryId" }} +{{- $registryPath := generate "registryPath" }} +{{- $relatedToThreat := generate "relatedToThreat" }} +{{- $rpid := generate "rpid" }} +{{- $sha1 := generate "sha1" }} +{{- $sha256 := generate "sha256" }} +{{- $signatureSignedInvalidReason := generate "signatureSignedInvalidReason" }} +{{- $signedStatus := generate "signedStatus" }} +{{- $siteId := generate "siteId" }} +{{- $siteName := generate "siteName" }} +{{- $srcIp := generate "srcIp" }} +{{- $srcPort := generate "srcPort" }} +{{- $storyline := generate "storyline" }} +{{- $taskName := generate "taskName" }} +{{- $taskPath := generate "taskPath" }} +{{- $threatStatus := generate "threatStatus" }} +{{- $tid := generate "tid" }} +{{- $trueContext := generate "trueContext" }} +{{- $user := generate "user" }} +{{- $verifiedStatus := generate "verifiedStatus" }} +{{- /* +{ + "activeContentFileId": "{{ $activeContentFileId}}", + "activeContentHash": "{{ $activeContentHash}}", + "activeContentPath": "{{ $activeContentPath}}", + "agentDomain": "{{ $agentDomain}}", + "agentGroupId": "{{ $agentGroupId}}", + "agentId": "{{ $agentId}}", + "agentInfected": "{{ $agentInfected}}", + "agentIp": "{{ $agentIp}}", + "agentIsActive": "{{ $agentIsActive}}", + "agentIsDecommissioned": "{{ $agentIsDecommissioned}}", + "agentMachineType": "{{ $agentMachineType}}", + "agentName": "{{ $agentName}}", + "agentNetworkStatus": "{{ $agentNetworkStatus}}", + "agentOs": "{{ $agentOs}}", + "agentUuid": "{{ $agentUuid}}", + "agentVersion": "{{ $agentVersion}}", + "connectionStatus": "{{ $connectionStatus}}", + "direction": "{{ $direction}}", + "dnsRequest": "{{ $dnsRequest}}", + "dnsResponse": "{{ $dnsResponse}}", + "dstIp": "{{ $dstIp}}", + "dstPort": "{{ $dstPort}}", + "eventType": "{{ $eventType}}", + "fileFullName": "{{ $fileFullName}}", + "fileId": "{{ $fileId}}", + "fileMd5": "{{ $fileMd5}}", + "fileSha1": "{{ $fileSha1}}", + "fileSha256": "{{ $fileSha256}}", + "fileSize": "{{ $fileSize}}", + "fileType": "{{ $fileType}}", + "hasActiveContent": "{{ $hasActiveContent}}", + "id": "{{ $id}}", + "indicatorCategory": "{{ $indicatorCategory}}", + "indicatorDescription": "{{ $indicatorDescription}}", + "indicatorMetadata": "{{ $indicatorMetadata}}", + "indicatorName": "{{ $indicatorName}}", + "loginsBaseType": "{{ $loginsBaseType}}", + "loginsUserName": "{{ $loginsUserName}}", + "md5": "{{ $md5}}", + "networkMethod": "{{ $networkMethod}}", + "networkSource": "{{ $networkSource}}", + "networkUrl": "{{ $networkUrl}}", + "objectType": "{{ $objectType}}", + "oldFileMd5": "{{ $oldFileMd5}}", + "oldFileName": "{{ $oldFileName}}", + "oldFileSha1": "{{ $oldFileSha1}}", + "oldFileSha256": "{{ $oldFileSha256}}", + "parentPid": "{{ $parentPid}}", + "parentProcessGroupId": "{{ $parentProcessGroupId}}", + "parentProcessIsMalicious": "{{ $parentProcessIsMalicious}}", + "parentProcessName": "{{ $parentProcessName}}", + "parentProcessUniqueKey": "{{ $parentProcessUniqueKey}}", + "pid": "{{ $pid}}", + "processCmd": "{{ $processCmd}}", + "processDisplayName": "{{ $processDisplayName}}", + "processGroupId": "{{ $processGroupId}}", + "processImagePath": "{{ $processImagePath}}", + "processImageSha1Hash": "{{ $processImageSha1Hash}}", + "processIntegrityLevel": "{{ $processIntegrityLevel}}", + "processIsMalicious": "{{ $processIsMalicious}}", + "processIsRedirectedCommandProcessor": "{{ $processIsRedirectedCommandProcessor}}", + "processIsWow64": "{{ $processIsWow64}}", + "processName": "{{ $processName}}", + "processRoot": "{{ $processRoot}}", + "processSessionId": "{{ $processSessionId}}", + "processSubSystem": "{{ $processSubSystem}}", + "processUniqueKey": "{{ $processUniqueKey}}", + "processUserName": "{{ $processUserName}}", + "protocol": "{{ $protocol}}", + "publisher": "{{ $publisher}}", + "registryClassification": "{{ $registryClassification}}", + "registryId": "{{ $registryId}}", + "registryPath": "{{ $registryPath}}", + "relatedToThreat": "{{ $relatedToThreat}}", + "rpid": "{{ $rpid}}", + "sha1": "{{ $sha1}}", + "sha256": "{{ $sha256}}", + "signatureSignedInvalidReason": "{{ $signatureSignedInvalidReason}}", + "signedStatus": "{{ $signedStatus}}", + "siteId": "{{ $siteId}}", + "siteName": "{{ $siteName}}", + "srcIp": "{{ $srcIp}}", + "srcPort": "{{ $srcPort}}", + "storyline": "{{ $storyline}}", + "taskName": "{{ $taskName}}", + "taskPath": "{{ $taskPath}}", + "threatStatus": "{{ $threatStatus}}", + "tid": "{{ $tid}}", + "trueContext": "{{ $trueContext}}", + "user": "{{ $user}}", + "verifiedStatus": "{{ $verifiedStatus}}" +} +*/ -}} +{ + "agent": { + "ephemeral_id": "cdaaaabb-be7e-432f-816b-bda019fd7c15", + "id": "da6cb4c8-c84c-4c5f-97c7-f8586a098af4", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.18.0" + }, + "data_stream": { + "dataset": "sentinel_one.threat_event", + "namespace": "93724", + "type": "logs" + }, + "elastic_agent": { + "id": "da6cb4c8-c84c-4c5f-97c7-f8586a098af4", + "snapshot": false, + "version": "8.18.0" + }, + "message": "{\"activeContentFileId\": \"{{ $activeContentFileId}}\", \"activeContentHash\": \"{{ $activeContentHash}}\", \"activeContentPath\": \"{{ $activeContentPath}}\", \"agentDomain\": \"{{ $agentDomain}}\", \"agentGroupId\": \"{{ $agentGroupId}}\", \"agentId\": \"{{ $agentId}}\", \"agentInfected\": \"{{ $agentInfected}}\", \"agentIp\": \"{{ $agentIp}}\", \"agentIsActive\": \"{{ $agentIsActive}}\", \"agentIsDecommissioned\": \"{{ $agentIsDecommissioned}}\", \"agentMachineType\": \"{{ $agentMachineType}}\", \"agentName\": \"{{ $agentName}}\", \"agentNetworkStatus\": \"{{ $agentNetworkStatus}}\", \"agentOs\": \"{{ $agentOs}}\", \"agentUuid\": \"{{ $agentUuid}}\", \"agentVersion\": \"{{ $agentVersion}}\", \"connectionStatus\": \"{{ $connectionStatus}}\", \"direction\": \"{{ $direction}}\", \"dnsRequest\": \"{{ $dnsRequest}}\", \"dnsResponse\": \"{{ $dnsResponse}}\", \"dstIp\": \"{{ $dstIp}}\", \"dstPort\": \"{{ $dstPort}}\", \"eventType\": \"{{ $eventType}}\", \"fileFullName\": \"{{ $fileFullName}}\", \"fileId\": \"{{ $fileId}}\", \"fileMd5\": \"{{ $fileMd5}}\", \"fileSha1\": \"{{ $fileSha1}}\", \"fileSha256\": \"{{ $fileSha256}}\", \"fileSize\": \"{{ $fileSize}}\", \"fileType\": \"{{ $fileType}}\", \"hasActiveContent\": \"{{ $hasActiveContent}}\", \"id\": \"{{ $id}}\", \"indicatorCategory\": \"{{ $indicatorCategory}}\", \"indicatorDescription\": \"{{ $indicatorDescription}}\", \"indicatorMetadata\": \"{{ $indicatorMetadata}}\", \"indicatorName\": \"{{ $indicatorName}}\", \"loginsBaseType\": \"{{ $loginsBaseType}}\", \"loginsUserName\": \"{{ $loginsUserName}}\", \"md5\": \"{{ $md5}}\", \"networkMethod\": \"{{ $networkMethod}}\", \"networkSource\": \"{{ $networkSource}}\", \"networkUrl\": \"{{ $networkUrl}}\", \"objectType\": \"{{ $objectType}}\", \"oldFileMd5\": \"{{ $oldFileMd5}}\", \"oldFileName\": \"{{ $oldFileName}}\", \"oldFileSha1\": \"{{ $oldFileSha1}}\", \"oldFileSha256\": \"{{ $oldFileSha256}}\", \"parentPid\": \"{{ $parentPid}}\", \"parentProcessGroupId\": \"{{ $parentProcessGroupId}}\", \"parentProcessIsMalicious\": \"{{ $parentProcessIsMalicious}}\", \"parentProcessName\": \"{{ $parentProcessName}}\", \"parentProcessUniqueKey\": \"{{ $parentProcessUniqueKey}}\", \"pid\": \"{{ $pid}}\", \"processCmd\": \"{{ $processCmd}}\", \"processDisplayName\": \"{{ $processDisplayName}}\", \"processGroupId\": \"{{ $processGroupId}}\", \"processImagePath\": \"{{ $processImagePath}}\", \"processImageSha1Hash\": \"{{ $processImageSha1Hash}}\", \"processIntegrityLevel\": \"{{ $processIntegrityLevel}}\", \"processIsMalicious\": \"{{ $processIsMalicious}}\", \"processIsRedirectedCommandProcessor\": \"{{ $processIsRedirectedCommandProcessor}}\", \"processIsWow64\": \"{{ $processIsWow64}}\", \"processName\": \"{{ $processName}}\", \"processRoot\": \"{{ $processRoot}}\", \"processSessionId\": \"{{ $processSessionId}}\", \"processSubSystem\": \"{{ $processSubSystem}}\", \"processUniqueKey\": \"{{ $processUniqueKey}}\", \"processUserName\": \"{{ $processUserName}}\", \"protocol\": \"{{ $protocol}}\", \"publisher\": \"{{ $publisher}}\", \"registryClassification\": \"{{ $registryClassification}}\", \"registryId\": \"{{ $registryId}}\", \"registryPath\": \"{{ $registryPath}}\", \"relatedToThreat\": \"{{ $relatedToThreat}}\", \"rpid\": \"{{ $rpid}}\", \"sha1\": \"{{ $sha1}}\", \"sha256\": \"{{ $sha256}}\", \"signatureSignedInvalidReason\": \"{{ $signatureSignedInvalidReason}}\", \"signedStatus\": \"{{ $signedStatus}}\", \"siteId\": \"{{ $siteId}}\", \"siteName\": \"{{ $siteName}}\", \"srcIp\": \"{{ $srcIp}}\", \"srcPort\": \"{{ $srcPort}}\", \"storyline\": \"{{ $storyline}}\", \"taskName\": \"{{ $taskName}}\", \"taskPath\": \"{{ $taskPath}}\", \"threatStatus\": \"{{ $threatStatus}}\", \"tid\": \"{{ $tid}}\", \"trueContext\": \"{{ $trueContext}}\", \"user\": \"{{ $user}}\", \"verifiedStatus\": \"{{ $verifiedStatus}}\"}", + "event": { + "dataset": "sentinel_one.threat_event" + }, + "input": { + "type": "cel" + }, + "tags": [ + "preserve_original_event", + "forwarded", + "sentinel_one-threat_event" + ] +} diff --git a/packages/sentinel_one/_dev/build/docs/README.md b/packages/sentinel_one/_dev/build/docs/README.md index f4184803593..035559d7a77 100644 --- a/packages/sentinel_one/_dev/build/docs/README.md +++ b/packages/sentinel_one/_dev/build/docs/README.md @@ -1,17 +1,36 @@ -# SentinelOne +# SentinelOne Integration for Elastic + +## Overview The [SentinelOne](https://www.sentinelone.com/) integration collects and parses data from SentinelOne REST APIs. This integration also offers the capability to perform response actions on SentinelOne hosts directly through the Elastic Security interface (introduced with v8.12.0). Additional configuration is required; for detailed guidance, refer to [documentation](https://www.elastic.co/guide/en/security/current/response-actions-config.html). -## Agentless Enabled Integration -Agentless integrations allow you to collect data without having to manage Elastic Agent in your cloud. They make manual agent deployment unnecessary, so you can focus on your data instead of the agent that collects it. For more information, refer to [Agentless integrations](https://www.elastic.co/guide/en/serverless/current/security-agentless-integrations.html) and the [Agentless integrations FAQ](https://www.elastic.co/guide/en/serverless/current/agentless-integration-troubleshooting.html). +### Compatibility -Agentless deployments are only supported in Elastic Serverless and Elastic Cloud environments. This functionality is in beta and is subject to change. Beta features are not subject to the support SLA of official GA features. +This module has been tested against `SentinelOne Management Console API version 2.1`. -## Compatibility +### How it works -This module has been tested against `SentinelOne Management Console API version 2.1`. +This integration periodically queries the SentinelOne REST API to retrieve Activity, Agent, Alert, Application, Application Risk, Group, Threat and Threat Event logs. + +## What data does this integration collect? + +This integration collects log messages of the following types: + +- `Activity`: Captures general actions or events occurring within the SentinelOne environment, such as policy updates or administrative operations. +- `Agent`: Provides details about endpoint agents, including their status, configuration, and activity on protected devices. +- `Alert`: Represents security notifications triggered by detected suspicious or malicious activity requiring attention. +- `Application`: Logs information about installed or executed applications identified on endpoints. +- `Application Risk`: Assesses and records the risk level or reputation of discovered applications based on behavior and source. +- `Group`: Contains configuration and status information for endpoint groups within a site or tenant. +- `Threat`: Logs confirmed malicious detections, such as malware, exploits, or ransomware identified by SentinelOne. +- `Threat Event`: Provides detailed event-level information related to a specific threat, including process, file, and network indicators. + +### Supported use cases +Integrating SentinelOne Activity, Agent, Alert, Application, Application Risk, Group, Threat, and Threat Event logs with Elastic SIEM provides centralized visibility across endpoint operations and security events. Dashboards deliver insights into agent status, detections, application behavior, and threat lifecycle, helping SOC teams quickly identify malicious activity, enforce policy compliance, and accelerate investigation and response efforts. -## API token +## What do I need to use this integration? + +### From SentinelOne To collect data from SentinelOne APIs, you must have an API token. To create an API token, follow these steps: @@ -36,29 +55,63 @@ To collect data from SentinelOne APIs, you must have an API token. To create an | Application Risk | Applications -> viewRisks | | Group | Groups -> view | | Threat | Threats -> view | +| Threat Event | Threats -> view | ## Note The **alert** data stream depends on STAR Custom Rules. STAR Custom Rules are supported in Cloud environments, but are not supported in on-premises environments. Because of this, the **alert** data stream is not supported in on-premises environments. +## How do I deploy this integration? + +This integration supports both Elastic Agentless-based and Agent-based installations. + +### Agentless-based installation + +Agentless integrations allow you to collect data without having to manage Elastic Agent in your cloud. They make manual agent deployment unnecessary, so you can focus on your data instead of the agent that collects it. For more information, refer to [Agentless integrations](https://www.elastic.co/guide/en/serverless/current/security-agentless-integrations.html) and the [Agentless integrations FAQ](https://www.elastic.co/guide/en/serverless/current/agentless-integration-troubleshooting.html). + +Agentless deployments are only supported in Elastic Serverless and Elastic Cloud environments. This functionality is in beta and is subject to change. Beta features are not subject to the support SLA of official GA features. + +### Agent-based installation + +Elastic Agent must be installed. For more details, check the Elastic Agent [installation instructions](docs-content://reference/fleet/install-elastic-agents.md). You can install only one Elastic Agent per host. + ## Troubleshooting - The API token generated by the user is time-limited. The user must reconfigure a new API token before it expires. - For console users, the default expiration time limit is 30 days. - For service users, the expiration time limit is the same as the duration specified while generating the API token. -## Alert severity mapping +## Setup + +1. In the top search bar in Kibana, search for **Integrations**. +2. In the search bar, type **SentinelOne**. +3. Select the **SentinelOne** integration from the search results. +4. Select **Add SentinelOne** to add the integration. +5. Enable and configure only the collection methods which you will use. + + * To **Collect SentinelOne logs via API**, you'll need to: + + - Configure **URL** and **API Token**. + - Enable/Disable the required datasets. + - For each dataset, adjust the integration configuration parameters if required, including the Interval, Preserve original event etc. to enable data collection. + +6. Select **Save and continue** to save the integration. + +### Validation -The values used in `event.severity` are consistent with Elastic Detection Rules. +#### Dashboards populated -| Severity Name | `event.severity` | -|---------------|:----------------:| -| Low | 21 | -| Medium | 47 | -| High | 73 | -| Critical | 99 | +1. In the top search bar in Kibana, search for **Dashboards**. +2. In the search bar, type **SentinelOne**. +3. Select a dashboard for the dataset you are collecting, and verify the dashboard information is populated. -## Logs +## Performance and scaling + +For more information on architectures that can be used for scaling this integration, check the [Ingest Architectures](https://www.elastic.co/docs/manage-data/ingest/ingest-reference-architectures) documentation. + +## Reference + +### Logs reference ### activity @@ -115,3 +168,11 @@ This is the `threat` dataset. {{event "threat"}} {{fields "threat"}} + +### threat event + +This is the `threat event` dataset. + +{{event "threat_event"}} + +{{fields "threat_event"}} diff --git a/packages/sentinel_one/_dev/deploy/docker/files/config.yml b/packages/sentinel_one/_dev/deploy/docker/files/config.yml index 60a91a45e79..73221840c2d 100644 --- a/packages/sentinel_one/_dev/deploy/docker/files/config.yml +++ b/packages/sentinel_one/_dev/deploy/docker/files/config.yml @@ -1256,7 +1256,7 @@ rules: "labels": null, "name": null }, - "id": "1234567890123456789", + "id": "abc123", "indicators": [], "kubernetesInfo": { "cluster": null, @@ -1887,3 +1887,531 @@ rules: } } `}} + - path: /web/api/v2.1/threats + methods: ["GET"] + query_params: + skipCount: "true" + limit: 2 + cursor: abcd + request_headers: + Authorization: + - "ApiToken xxxx" + responses: + - status_code: 200 + body: |- + {{ minify_json ` + { + "data": [ + { + "id": "1234567890123456789", + "indicators": [], + "kubernetesInfo": { + "cluster": null, + "controllerKind": null, + "controllerLabels": null, + "controllerName": null, + "namespace": null, + "namespaceLabels": null, + "node": null, + "pod": null, + "podLabels": null + } + } + ], + "pagination": { + "nextCursor": null, + "totalItems": 0 + } + } + `}} + - path: /web/api/v2.1/threats + methods: ["GET"] + query_params: + skipCount: "true" + limit: 2 + request_headers: + Authorization: + - "ApiToken xxxx" + responses: + - status_code: 200 + body: |- + {{ minify_json ` + { + "data": [ + { + "id": "abc123", + "indicators": [], + "kubernetesInfo": { + "cluster": null, + "controllerKind": null, + "controllerLabels": null, + "controllerName": null, + "namespace": null, + "namespaceLabels": null, + "node": null, + "pod": null, + "podLabels": null + }, + "whiteningOptions": [ + "hash" + ] + } + ], + "pagination": { + "nextCursor": "abcd", + "totalItems": 0 + } + } + `}} + - path: /web/api/v2.1/threats/abc123/explore/events + methods: ['GET'] + query_params: + skipCount: "true" + limit: 2 + request_headers: + Authorization: + - "ApiToken xxxx" + responses: + - status_code: 200 + headers: + Content-Type: + - 'application/json' + body: |- + {{ minify_json ` + { + "data": [ + { + "activeContentFileId": "fileid_001", + "activeContentHash": "hash_001", + "activeContentPath": "C:\\content\\file1", + "agentDomain": "domain1", + "agentGroupId": "group_01", + "agentId": "agent_001", + "agentInfected": false, + "agentIp": "89.160.20.128", + "agentIsActive": true, + "agentIsDecommissioned": false, + "agentMachineType": "x64", + "agentName": "Agent_1", + "agentNetworkStatus": "online", + "agentOs": "Windows 10", + "agentUuid": "uuid_001", + "agentVersion": "1.0.5", + "connectionStatus": "active", + "createdAt": "2025-10-25T10:15:30Z", + "direction": "outbound", + "dnsRequest": "example.com", + "dnsResponse": "192.168.0.1", + "dstIp": "127.0.0.1", + "dstPort": 80, + "eventType": "network", + "fileFullName": "C:\\Windows\\explorer.exe", + "fileId": "file_001", + "fileMd5": "md5_001", + "fileSha1": "sha1_001", + "fileSha256": "sha256_001", + "fileSize": "1024", + "fileType": "exe", + "hasActiveContent": true, + "id": "id_001", + "indicatorCategory": "malware", + "indicatorDescription": "suspicious activity", + "indicatorMetadata": "meta1", + "indicatorName": "Malware1", + "loginsBaseType": "local", + "loginsUserName": "user_login1", + "md5": "md5_sample", + "networkMethod": "GET", + "networkSource": "LAN", + "networkUrl": "http://example.com", + "objectType": "process", + "oldFileMd5": "old_md5", + "oldFileName": "explorer_old.exe", + "oldFileSha1": "old_sha1", + "oldFileSha256": "old_sha256", + "parentPid": "1001", + "parentProcessGroupId": "group_parent_01", + "parentProcessIsMalicious": false, + "parentProcessName": "cmd.exe", + "parentProcessUniqueKey": "unique_parent_001", + "pid": "1234", + "processCmd": "explorer /start", + "processDisplayName": "Windows Explorer", + "processGroupId": "group_01", + "processImagePath": "C:\\Windows\\explorer.exe", + "processImageSha1Hash": "sha1_process", + "processIntegrityLevel": "high", + "processIsMalicious": false, + "processIsRedirectedCommandProcessor": "false", + "processIsWow64": "false", + "processName": "explorer.exe", + "processRoot": "C:\\", + "processSessionId": "session_001", + "processStartTime": "2025-10-25T09:00:00Z", + "processSubSystem": "subsystem1", + "processUniqueKey": "unique_001", + "processUserName": "user1", + "protocol": "TCP", + "publisher": "Microsoft", + "registryClassification": "system", + "registryId": "reg_001", + "registryPath": "HKLM\\Software\\Test", + "relatedToThreat": false, + "rpid": "rpid_001", + "sha1": "sha1_sample", + "sha256": "sha256_sample", + "signatureSignedInvalidReason": "None", + "signedStatus": "Signed", + "siteId": "site_001", + "siteName": "SiteA", + "srcIp": "89.160.20.128", + "srcPort": 45678, + "storyline": "storyline1", + "taskName": "task1", + "taskPath": "C:\\Tasks\\task1", + "threatStatus": "clean", + "tid": "tid_001", + "trueContext": "context1", + "user": "user1", + "verifiedStatus": "Verified" + }, + { + "activeContentFileId": "fileid_002", + "activeContentHash": "hash_002", + "activeContentPath": "D:\\content\\file2", + "agentDomain": "domain2", + "agentGroupId": "group_02", + "agentId": "agent_002", + "agentInfected": true, + "agentIp": "89.160.20.156", + "agentIsActive": true, + "agentIsDecommissioned": false, + "agentMachineType": "x86", + "agentName": "Agent_2", + "agentNetworkStatus": "offline", + "agentOs": "Windows Server 2019", + "agentUuid": "uuid_002", + "agentVersion": "1.0.7", + "connectionStatus": "inactive", + "createdAt": "2025-10-24T14:20:00Z", + "direction": "inbound", + "dnsRequest": "test.com", + "dnsResponse": "192.168.0.2", + "dstIp": "127.0.0.1", + "dstPort": 443, + "eventType": "network", + "fileFullName": "C:\\Windows\\svchost.exe", + "fileId": "file_002", + "fileMd5": "md5_002", + "fileSha1": "sha1_002", + "fileSha256": "sha256_002", + "fileSize": "2048", + "fileType": "dll", + "hasActiveContent": false, + "id": "id_002", + "indicatorCategory": "adware", + "indicatorDescription": "suspicious file", + "indicatorMetadata": "meta2", + "indicatorName": "Adware2", + "loginsBaseType": "domain", + "loginsUserName": "user_login2", + "md5": "md5_sample2", + "networkMethod": "POST", + "networkSource": "WAN", + "networkUrl": "https://test.com", + "objectType": "process", + "oldFileMd5": "old_md52", + "oldFileName": "svchost_old.exe", + "oldFileSha1": "old_sha12", + "oldFileSha256": "old_sha2562", + "parentPid": "2001", + "parentProcessGroupId": "group_parent_02", + "parentProcessIsMalicious": true, + "parentProcessName": "explorer.exe", + "parentProcessUniqueKey": "unique_parent_002", + "pid": "2345", + "processCmd": "svchost /run", + "processDisplayName": "Service Host", + "processGroupId": "group_02", + "processImagePath": "C:\\Windows\\svchost.exe", + "processImageSha1Hash": "sha1_process2", + "processIntegrityLevel": "medium", + "processIsMalicious": true, + "processIsRedirectedCommandProcessor": "false", + "processIsWow64": "true", + "processName": "svchost.exe", + "processRoot": "D:\\", + "processSessionId": "session_002", + "processStartTime": "2025-10-24T13:00:00Z", + "processSubSystem": "subsystem2", + "processUniqueKey": "unique_002", + "processUserName": "user2", + "protocol": "UDP", + "publisher": "Adobe", + "registryClassification": "application", + "registryId": "reg_002", + "registryPath": "HKCU\\Software\\Test2", + "relatedToThreat": true, + "rpid": "rpid_002", + "sha1": "sha1_sample2", + "sha256": "sha256_sample2", + "signatureSignedInvalidReason": "Invalid", + "signedStatus": "Unsigned", + "siteId": "site_002", + "siteName": "SiteB", + "srcIp": "89.160.20.156", + "srcPort": 56789, + "storyline": "storyline2", + "taskName": "task2", + "taskPath": "D:\\Tasks\\task2", + "threatStatus": "threat", + "tid": "tid_002", + "trueContext": "context2", + "user": "user2", + "verifiedStatus": "Unverified" + } + ], + "pagination": { + "nextCursor": null, + "totalItems": 0 + } + } + `}} + - path: /web/api/v2.1/threats/1234567890123456789/explore/events + methods: ['GET'] + query_params: + skipCount: "true" + limit: 2 + cursor: abc + request_headers: + Authorization: + - "ApiToken xxxx" + responses: + - status_code: 200 + headers: + Content-Type: + - 'application/json' + body: |- + {{ minify_json ` + { + "data": [], + "pagination": { + "nextCursor": null, + "totalItems": 0 + } + } + `}} + - path: /web/api/v2.1/threats/1234567890123456789/explore/events + methods: ['GET'] + query_params: + skipCount: "true" + limit: 2 + request_headers: + Authorization: + - "ApiToken xxxx" + responses: + - status_code: 200 + headers: + Content-Type: + - 'application/json' + body: |- + {{ minify_json ` + { + "data": [ + { + "activeContentFileId": "fileid_003", + "activeContentHash": "hash_003", + "activeContentPath": "C:\\content\\file3", + "agentDomain": "domain3", + "agentGroupId": "group_03", + "agentId": "agent_003", + "agentInfected": true, + "agentIp": "127.0.0.1", + "agentIsActive": false, + "agentIsDecommissioned": true, + "agentMachineType": "x64", + "agentName": "Agent_3", + "agentNetworkStatus": "online", + "agentOs": "Windows 11", + "agentUuid": "uuid_003", + "agentVersion": "1.2.0", + "connectionStatus": "active", + "createdAt": "2025-10-23T08:45:00Z", + "direction": "outbound", + "dnsRequest": "example.org", + "dnsResponse": "192.168.0.3", + "dstIp": "89.160.20.128", + "dstPort": 8080, + "eventType": "file", + "fileFullName": "C:\\Windows\\notepad.exe", + "fileId": "file_003", + "fileMd5": "md5_003", + "fileSha1": "sha1_003", + "fileSha256": "sha256_003", + "fileSize": "512", + "fileType": "exe", + "hasActiveContent": true, + "id": "id_003", + "indicatorCategory": "ransomware", + "indicatorDescription": "encrypted file", + "indicatorMetadata": "meta3", + "indicatorName": "Ransomware3", + "loginsBaseType": "local", + "loginsUserName": "user_login3", + "md5": "md5_sample3", + "networkMethod": "GET", + "networkSource": "LAN", + "networkUrl": "http://example.org", + "objectType": "process", + "oldFileMd5": "old_md53", + "oldFileName": "notepad_old.exe", + "oldFileSha1": "old_sha13", + "oldFileSha256": "old_sha2563", + "parentPid": "3001", + "parentProcessGroupId": "group_parent_03", + "parentProcessIsMalicious": true, + "parentProcessName": "explorer.exe", + "parentProcessUniqueKey": "unique_parent_003", + "pid": "3456", + "processCmd": "notepad.exe /open", + "processDisplayName": "Notepad", + "processGroupId": "group_03", + "processImagePath": "C:\\Windows\\notepad.exe", + "processImageSha1Hash": "sha1_process3", + "processIntegrityLevel": "low", + "processIsMalicious": true, + "processIsRedirectedCommandProcessor": "false", + "processIsWow64": "false", + "processName": "notepad.exe", + "processRoot": "C:\\", + "processSessionId": "session_003", + "processStartTime": "2025-10-23T08:30:00Z", + "processSubSystem": "subsystem3", + "processUniqueKey": "unique_003", + "processUserName": "user3", + "protocol": "TCP", + "publisher": "Microsoft", + "registryClassification": "system", + "registryId": "reg_003", + "registryPath": "HKLM\\Software\\Test3", + "relatedToThreat": true, + "rpid": "rpid_003", + "sha1": "sha1_sample3", + "sha256": "sha256_sample3", + "signatureSignedInvalidReason": "Expired", + "signedStatus": "Signed", + "siteId": "site_003", + "siteName": "SiteC", + "srcIp": "127.0.0.1", + "srcPort": 23456, + "storyline": "storyline3", + "taskName": "task3", + "taskPath": "C:\\Tasks\\task3", + "threatStatus": "threat", + "tid": "tid_003", + "trueContext": "context3", + "user": "user3", + "verifiedStatus": "Verified" + }, + { + "activeContentFileId": "fileid_004", + "activeContentHash": "hash_004", + "activeContentPath": "D:\\content\\file4", + "agentDomain": "domain4", + "agentGroupId": "group_04", + "agentId": "agent_004", + "agentInfected": false, + "agentIp": "89.160.20.156", + "agentIsActive": true, + "agentIsDecommissioned": false, + "agentMachineType": "x64", + "agentName": "Agent_4", + "agentNetworkStatus": "online", + "agentOs": "Windows 10", + "agentUuid": "uuid_004", + "agentVersion": "1.3.0", + "connectionStatus": "active", + "createdAt": "2025-10-22T11:30:00Z", + "direction": "outbound", + "dnsRequest": "google.com", + "dnsResponse": "8.8.8.8", + "dstIp": "89.160.20.128", + "dstPort": 443, + "eventType": "network", + "fileFullName": "C:\\Program Files\\Chrome\\chrome.exe", + "fileId": "file_004", + "fileMd5": "md5_004", + "fileSha1": "sha1_004", + "fileSha256": "sha256_004", + "fileSize": "4096", + "fileType": "exe", + "hasActiveContent": false, + "id": "id_004", + "indicatorCategory": "spyware", + "indicatorDescription": "tracking software", + "indicatorMetadata": "meta4", + "indicatorName": "Spyware4", + "loginsBaseType": "domain", + "loginsUserName": "user_login4", + "md5": "md5_sample4", + "networkMethod": "GET", + "networkSource": "WAN", + "networkUrl": "https://google.com", + "objectType": "process", + "oldFileMd5": "old_md54", + "oldFileName": "chrome_old.exe", + "oldFileSha1": "old_sha14", + "oldFileSha256": "old_sha2564", + "parentPid": "4001", + "parentProcessGroupId": "group_parent_04", + "parentProcessIsMalicious": false, + "parentProcessName": "explorer.exe", + "parentProcessUniqueKey": "unique_parent_004", + "pid": "4567", + "processCmd": "chrome.exe --new-tab", + "processDisplayName": "Google Chrome", + "processGroupId": "group_04", + "processImagePath": "C:\\Program Files\\Chrome\\chrome.exe", + "processImageSha1Hash": "sha1_process4", + "processIntegrityLevel": "medium", + "processIsMalicious": false, + "processIsRedirectedCommandProcessor": "false", + "processIsWow64": "false", + "processName": "chrome.exe", + "processRoot": "C:\\", + "processSessionId": "session_004", + "processStartTime": "2025-10-22T11:00:00Z", + "processSubSystem": "subsystem4", + "processUniqueKey": "unique_004", + "processUserName": "user4", + "protocol": "TCP", + "publisher": "Google", + "registryClassification": "application", + "registryId": "reg_004", + "registryPath": "HKCU\\Software\\Test4", + "relatedToThreat": false, + "rpid": "rpid_004", + "sha1": "sha1_sample4", + "sha256": "sha256_sample4", + "signatureSignedInvalidReason": "None", + "signedStatus": "Signed", + "siteId": "site_004", + "siteName": "SiteD", + "srcIp": "127.0.0.1", + "srcPort": 34567, + "storyline": "storyline4", + "taskName": "task4", + "taskPath": "C:\\Tasks\\task4", + "threatStatus": "clean", + "tid": "tid_004", + "trueContext": "context4", + "user": "user4", + "verifiedStatus": "Verified" + } + ], + "pagination": { + "nextCursor": "abc", + "totalItems": 0 + } + } + `}} diff --git a/packages/sentinel_one/changelog.yml b/packages/sentinel_one/changelog.yml index 86503ed4d81..5bff0e6d1ff 100644 --- a/packages/sentinel_one/changelog.yml +++ b/packages/sentinel_one/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.42.0" + changes: + - description: Add support for threat event data stream. + type: enhancement + link: https://github.com/elastic/integrations/pull/1 - version: "1.41.0" changes: - description: Add configuration option to filter results by Site IDs in the application data stream, improve UI layout, and readme document. diff --git a/packages/sentinel_one/data_stream/threat_event/_dev/benchmark/pipeline/config.yml b/packages/sentinel_one/data_stream/threat_event/_dev/benchmark/pipeline/config.yml new file mode 100644 index 00000000000..30a2b50cf64 --- /dev/null +++ b/packages/sentinel_one/data_stream/threat_event/_dev/benchmark/pipeline/config.yml @@ -0,0 +1 @@ +num_docs: 10000 diff --git a/packages/sentinel_one/data_stream/threat_event/_dev/benchmark/pipeline/threat-event-sample.log b/packages/sentinel_one/data_stream/threat_event/_dev/benchmark/pipeline/threat-event-sample.log new file mode 100644 index 00000000000..8357ed6b223 --- /dev/null +++ b/packages/sentinel_one/data_stream/threat_event/_dev/benchmark/pipeline/threat-event-sample.log @@ -0,0 +1,3 @@ +{"id":"a1b2c3d4","objectType":"threat","createdAt":"2025-10-23T10:15:30Z","processName":"chrome.exe","agentName":"Agent-WIN10","agentGroupId":"group-01","agentId":"agent-12345","agentIsActive":true,"agentIsDecommissioned":false,"agentMachineType":"workstation","agentNetworkStatus":"connected","agentOs":"Windows 10","agentVersion":"23.2.1.56","agentUuid":"b7f2a5a1-2d4f-48b3-9e4f-c4567890abcd","siteId":"site-001","siteName":"Default Site","pid":"5548","srcIp":"89.160.20.128","srcPort":52345,"dstIp":"127.0.0.1","dstPort":443,"fileSha1":"3b5d5c3712955042212316173ccf37be8009b8a1","fileSha256":"c1b0f222a1b4b2d38c16b2e3cf8a8d4fcb4b1a7a3e1b1b77cf92c9e8f75e8e9a","fileMd5":"e2fc714c4727ee9395f324cd2e7f331f","signatureSignedInvalidReason":"none","verifiedStatus":"verified","signedStatus":"signed","fileFullName":"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe","processCmd":"\"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe\" --type=renderer","processUserName":"john.doe","processStartTime":"2025-10-23T10:00:00Z","processIsMalicious":false,"protocol":"tcp"} +{"id":"b9c8d7e6","objectType":"file_event","createdAt":"2025-10-23T08:12:10Z","processName":"explorer.exe","agentName":"Agent-SVR1","agentGroupId":"group-02","agentId":"agent-67890","agentIsActive":true,"agentIsDecommissioned":false,"agentMachineType":"server","agentNetworkStatus":"connected","agentOs":"Windows Server 2022","agentVersion":"24.1.0.11","agentUuid":"e4c1d333-987a-4bcb-80a2-2aee6c77b999","siteId":"site-002","siteName":"Production Site","pid":"2280","srcIp":"127.0.0.1","srcPort":49872,"dstIp":"89.160.20.156","dstPort":135,"fileSha1":"5d41402abc4b2a76b9719d911017c592","fileSha256":"2c26b46b68ffc68ff99b453c1d30413413422f1640a4b1b1a1a6b6a6b6a6b6a6","fileMd5":"098f6bcd4621d373cade4e832627b4f6","signatureSignedInvalidReason":"expired","verifiedStatus":"failed","signedStatus":"unsigned","fileFullName":"C:\\Temp\\suspicious.dll","processCmd":"rundll32.exe C:\\Temp\\suspicious.dll,EntryPoint","processUserName":"administrator","processStartTime":"2025-10-23T08:00:00Z","processIsMalicious":true,"protocol":"udp"} +{"id":"x9y8z7w6","objectType":"network_connection","createdAt":"2025-10-23T09:45:00Z","processName":"powershell.exe","agentName":"Agent-LINUX1","agentGroupId":"group-03","agentId":"agent-99999","agentIsActive":true,"agentIsDecommissioned":false,"agentMachineType":"workstation","agentNetworkStatus":"disconnected","agentOs":"Ubuntu 22.04","agentVersion":"22.9.3","agentUuid":"9aa3c9b2-fddd-4b51-b3ea-8a7a5b555888","siteId":"site-003","siteName":"Testing Site","pid":"7745","srcIp":"89.160.20.156","srcPort":51514,"dstIp":"89.160.20.128","dstPort":80,"fileSha1":"7c211433f02071597741e6ff5a8ea34789abbf43","fileSha256":"9b74c9897bac770ffc029102a200c5de04c964c0ad3d6c5b7d1b4a4b2c6b8e0e","fileMd5":"d41d8cd98f00b204e9800998ecf8427e","verifiedStatus":"unknown","signedStatus":"n\/a","fileFullName":"\/usr\/bin\/powershell","processCmd":"powershell -ExecutionPolicy Bypass -File \/tmp\/script.ps1","processUserName":"ubuntu","processStartTime":"2025-10-23T09:30:00Z","processIsMalicious":false,"protocol":"http"} diff --git a/packages/sentinel_one/data_stream/threat_event/_dev/test/pipeline/test-common-config.yml b/packages/sentinel_one/data_stream/threat_event/_dev/test/pipeline/test-common-config.yml new file mode 100644 index 00000000000..37e8fa225fd --- /dev/null +++ b/packages/sentinel_one/data_stream/threat_event/_dev/test/pipeline/test-common-config.yml @@ -0,0 +1,3 @@ +fields: + tags: + - preserve_duplicate_custom_fields diff --git a/packages/sentinel_one/data_stream/threat_event/_dev/test/pipeline/test-pipeline-application.log b/packages/sentinel_one/data_stream/threat_event/_dev/test/pipeline/test-pipeline-application.log new file mode 100644 index 00000000000..d761db523c5 --- /dev/null +++ b/packages/sentinel_one/data_stream/threat_event/_dev/test/pipeline/test-pipeline-application.log @@ -0,0 +1,4 @@ +{"activeContentFileId":"fileid_001","activeContentHash":"hash_001","activeContentPath":"C:\\content\\file1","agentDomain":"domain1","agentGroupId":"group_01","agentId":"agent_001","agentInfected":false,"agentIp":"89.160.20.128","agentIsActive":true,"agentIsDecommissioned":false,"agentMachineType":"x64","agentName":"Agent_1","agentNetworkStatus":"online","agentOs":"Windows 10","agentUuid":"uuid_001","agentVersion":"1.0.5","connectionStatus":"active","createdAt":"2025-10-25T10:15:30Z","direction":"outbound","dnsRequest":"example.com","dnsResponse":"192.168.0.1","dstIp":"127.0.0.1","dstPort":80,"eventType":"network","fileFullName":"C:\\Windows\\explorer.exe","fileId":"file_001","fileMd5":"md5_001","fileSha1":"sha1_001","fileSha256":"sha256_001","fileSize":"1024","fileType":"exe","hasActiveContent":true,"id":"id_001","indicatorCategory":"malware","indicatorDescription":"suspicious activity","indicatorMetadata":"meta1","indicatorName":"Malware1","loginsBaseType":"local","loginsUserName":"user_login1","md5":"md5_sample","networkMethod":"GET","networkSource":"LAN","networkUrl":"http:\/\/example.com","objectType":"process","oldFileMd5":"old_md5","oldFileName":"explorer_old.exe","oldFileSha1":"old_sha1","oldFileSha256":"old_sha256","parentPid":"1001","parentProcessGroupId":"group_parent_01","parentProcessIsMalicious":false,"parentProcessName":"cmd.exe","parentProcessUniqueKey":"unique_parent_001","pid":"1234","processCmd":"explorer \/start","processDisplayName":"Windows Explorer","processGroupId":"group_01","processImagePath":"C:\\Windows\\explorer.exe","processImageSha1Hash":"sha1_process","processIntegrityLevel":"high","processIsMalicious":false,"processIsRedirectedCommandProcessor":"false","processIsWow64":"false","processName":"explorer.exe","processRoot":"C:\\","processSessionId":"session_001","processStartTime":"2025-10-25T09:00:00Z","processSubSystem":"subsystem1","processUniqueKey":"unique_001","processUserName":"user1","protocol":"TCP","publisher":"Microsoft","registryClassification":"system","registryId":"reg_001","registryPath":"HKLM\\Software\\Test","relatedToThreat":false,"rpid":"rpid_001","sha1":"sha1_sample","sha256":"sha256_sample","signatureSignedInvalidReason":"None","signedStatus":"Signed","siteId":"site_001","siteName":"SiteA","srcIp":"89.160.20.128","srcPort":45678,"storyline":"storyline1","taskName":"task1","taskPath":"C:\\Tasks\\task1","threatStatus":"clean","tid":"tid_001","trueContext":"context1","user":"user1","verifiedStatus":"Verified"} +{"activeContentFileId":"fileid_002","activeContentHash":"hash_002","activeContentPath":"D:\\content\\file2","agentDomain":"domain2","agentGroupId":"group_02","agentId":"agent_002","agentInfected":true,"agentIp":"89.160.20.156","agentIsActive":true,"agentIsDecommissioned":false,"agentMachineType":"x86","agentName":"Agent_2","agentNetworkStatus":"offline","agentOs":"Windows Server 2019","agentUuid":"uuid_002","agentVersion":"1.0.7","connectionStatus":"inactive","createdAt":"2025-10-24T14:20:00Z","direction":"inbound","dnsRequest":"test.com","dnsResponse":"192.168.0.2","dstIp":"127.0.0.1","dstPort":443,"eventType":"network","fileFullName":"C:\\Windows\\svchost.exe","fileId":"file_002","fileMd5":"md5_002","fileSha1":"sha1_002","fileSha256":"sha256_002","fileSize":"2048","fileType":"dll","hasActiveContent":false,"id":"id_002","indicatorCategory":"adware","indicatorDescription":"suspicious file","indicatorMetadata":"meta2","indicatorName":"Adware2","loginsBaseType":"domain","loginsUserName":"user_login2","md5":"md5_sample2","networkMethod":"POST","networkSource":"WAN","networkUrl":"https:\/\/test.com","objectType":"process","oldFileMd5":"old_md52","oldFileName":"svchost_old.exe","oldFileSha1":"old_sha12","oldFileSha256":"old_sha2562","parentPid":"2001","parentProcessGroupId":"group_parent_02","parentProcessIsMalicious":true,"parentProcessName":"explorer.exe","parentProcessUniqueKey":"unique_parent_002","pid":"2345","processCmd":"svchost \/run","processDisplayName":"Service Host","processGroupId":"group_02","processImagePath":"C:\\Windows\\svchost.exe","processImageSha1Hash":"sha1_process2","processIntegrityLevel":"medium","processIsMalicious":true,"processIsRedirectedCommandProcessor":"false","processIsWow64":"true","processName":"svchost.exe","processRoot":"D:\\","processSessionId":"session_002","processStartTime":"2025-10-24T13:00:00Z","processSubSystem":"subsystem2","processUniqueKey":"unique_002","processUserName":"user2","protocol":"UDP","publisher":"Adobe","registryClassification":"application","registryId":"reg_002","registryPath":"HKCU\\Software\\Test2","relatedToThreat":true,"rpid":"rpid_002","sha1":"sha1_sample2","sha256":"sha256_sample2","signatureSignedInvalidReason":"Invalid","signedStatus":"Unsigned","siteId":"site_002","siteName":"SiteB","srcIp":"89.160.20.156","srcPort":56789,"storyline":"storyline2","taskName":"task2","taskPath":"D:\\Tasks\\task2","threatStatus":"threat","tid":"tid_002","trueContext":"context2","user":"user2","verifiedStatus":"Unverified"} +{"activeContentFileId":"fileid_003","activeContentHash":"hash_003","activeContentPath":"C:\\content\\file3","agentDomain":"domain3","agentGroupId":"group_03","agentId":"agent_003","agentInfected":true,"agentIp":"127.0.0.1","agentIsActive":false,"agentIsDecommissioned":true,"agentMachineType":"x64","agentName":"Agent_3","agentNetworkStatus":"online","agentOs":"Windows 11","agentUuid":"uuid_003","agentVersion":"1.2.0","connectionStatus":"active","createdAt":"2025-10-23T08:45:00Z","direction":"outbound","dnsRequest":"example.org","dnsResponse":"192.168.0.3","dstIp":"89.160.20.128","dstPort":8080,"eventType":"file","fileFullName":"C:\\Windows\\notepad.exe","fileId":"file_003","fileMd5":"md5_003","fileSha1":"sha1_003","fileSha256":"sha256_003","fileSize":"512","fileType":"exe","hasActiveContent":true,"id":"id_003","indicatorCategory":"ransomware","indicatorDescription":"encrypted file","indicatorMetadata":"meta3","indicatorName":"Ransomware3","loginsBaseType":"local","loginsUserName":"user_login3","md5":"md5_sample3","networkMethod":"GET","networkSource":"LAN","networkUrl":"http:\/\/example.org","objectType":"process","oldFileMd5":"old_md53","oldFileName":"notepad_old.exe","oldFileSha1":"old_sha13","oldFileSha256":"old_sha2563","parentPid":"3001","parentProcessGroupId":"group_parent_03","parentProcessIsMalicious":true,"parentProcessName":"explorer.exe","parentProcessUniqueKey":"unique_parent_003","pid":"3456","processCmd":"notepad.exe \/open","processDisplayName":"Notepad","processGroupId":"group_03","processImagePath":"C:\\Windows\\notepad.exe","processImageSha1Hash":"sha1_process3","processIntegrityLevel":"low","processIsMalicious":true,"processIsRedirectedCommandProcessor":"false","processIsWow64":"false","processName":"notepad.exe","processRoot":"C:\\","processSessionId":"session_003","processStartTime":"2025-10-23T08:30:00Z","processSubSystem":"subsystem3","processUniqueKey":"unique_003","processUserName":"user3","protocol":"TCP","publisher":"Microsoft","registryClassification":"system","registryId":"reg_003","registryPath":"HKLM\\Software\\Test3","relatedToThreat":true,"rpid":"rpid_003","sha1":"sha1_sample3","sha256":"sha256_sample3","signatureSignedInvalidReason":"Expired","signedStatus":"Signed","siteId":"site_003","siteName":"SiteC","srcIp":"127.0.0.1","srcPort":23456,"storyline":"storyline3","taskName":"task3","taskPath":"C:\\Tasks\\task3","threatStatus":"threat","tid":"tid_003","trueContext":"context3","user":"user3","verifiedStatus":"Verified"} +{"activeContentFileId":"fileid_004","activeContentHash":"hash_004","activeContentPath":"D:\\content\\file4","agentDomain":"domain4","agentGroupId":"group_04","agentId":"agent_004","agentInfected":false,"agentIp":"89.160.20.156","agentIsActive":true,"agentIsDecommissioned":false,"agentMachineType":"x64","agentName":"Agent_4","agentNetworkStatus":"online","agentOs":"Windows 10","agentUuid":"uuid_004","agentVersion":"1.3.0","connectionStatus":"active","createdAt":"2025-10-22T11:30:00Z","direction":"outbound","dnsRequest":"google.com","dnsResponse":"8.8.8.8","dstIp":"89.160.20.128","dstPort":443,"eventType":"network","fileFullName":"C:\\Program Files\\Chrome\\chrome.exe","fileId":"file_004","fileMd5":"md5_004","fileSha1":"sha1_004","fileSha256":"sha256_004","fileSize":"4096","fileType":"exe","hasActiveContent":false,"id":"id_004","indicatorCategory":"spyware","indicatorDescription":"tracking software","indicatorMetadata":"meta4","indicatorName":"Spyware4","loginsBaseType":"domain","loginsUserName":"user_login4","md5":"md5_sample4","networkMethod":"GET","networkSource":"WAN","networkUrl":"https:\/\/google.com","objectType":"process","oldFileMd5":"old_md54","oldFileName":"chrome_old.exe","oldFileSha1":"old_sha14","oldFileSha256":"old_sha2564","parentPid":"4001","parentProcessGroupId":"group_parent_04","parentProcessIsMalicious":false,"parentProcessName":"explorer.exe","parentProcessUniqueKey":"unique_parent_004","pid":"4567","processCmd":"chrome.exe --new-tab","processDisplayName":"Google Chrome","processGroupId":"group_04","processImagePath":"C:\\Program Files\\Chrome\\chrome.exe","processImageSha1Hash":"sha1_process4","processIntegrityLevel":"medium","processIsMalicious":false,"processIsRedirectedCommandProcessor":"false","processIsWow64":"false","processName":"chrome.exe","processRoot":"C:\\","processSessionId":"session_004","processStartTime":"2025-10-22T11:00:00Z","processSubSystem":"subsystem4","processUniqueKey":"unique_004","processUserName":"user4","protocol":"TCP","publisher":"Google","registryClassification":"application","registryId":"reg_004","registryPath":"HKCU\\Software\\Test4","relatedToThreat":false,"rpid":"rpid_004","sha1":"sha1_sample4","sha256":"sha256_sample4","signatureSignedInvalidReason":"None","signedStatus":"Signed","siteId":"site_004","siteName":"SiteD","srcIp":"127.0.0.1","srcPort":34567,"storyline":"storyline4","taskName":"task4","taskPath":"C:\\Tasks\\task4","threatStatus":"clean","tid":"tid_004","trueContext":"context4","user":"user4","verifiedStatus":"Verified"} diff --git a/packages/sentinel_one/data_stream/threat_event/_dev/test/pipeline/test-pipeline-application.log-expected.json b/packages/sentinel_one/data_stream/threat_event/_dev/test/pipeline/test-pipeline-application.log-expected.json new file mode 100644 index 00000000000..30cb77b3e1a --- /dev/null +++ b/packages/sentinel_one/data_stream/threat_event/_dev/test/pipeline/test-pipeline-application.log-expected.json @@ -0,0 +1,825 @@ +{ + "expected": [ + { + "@timestamp": "2025-10-25T10:15:30.000Z", + "destination": { + "ip": "127.0.0.1", + "port": 80 + }, + "ecs": { + "version": "8.17.0" + }, + "event": { + "created": "2025-10-25T10:15:30.000Z", + "id": "id_001", + "kind": "event", + "original": "{\"activeContentFileId\":\"fileid_001\",\"activeContentHash\":\"hash_001\",\"activeContentPath\":\"C:\\\\content\\\\file1\",\"agentDomain\":\"domain1\",\"agentGroupId\":\"group_01\",\"agentId\":\"agent_001\",\"agentInfected\":false,\"agentIp\":\"89.160.20.128\",\"agentIsActive\":true,\"agentIsDecommissioned\":false,\"agentMachineType\":\"x64\",\"agentName\":\"Agent_1\",\"agentNetworkStatus\":\"online\",\"agentOs\":\"Windows 10\",\"agentUuid\":\"uuid_001\",\"agentVersion\":\"1.0.5\",\"connectionStatus\":\"active\",\"createdAt\":\"2025-10-25T10:15:30Z\",\"direction\":\"outbound\",\"dnsRequest\":\"example.com\",\"dnsResponse\":\"192.168.0.1\",\"dstIp\":\"127.0.0.1\",\"dstPort\":80,\"eventType\":\"network\",\"fileFullName\":\"C:\\\\Windows\\\\explorer.exe\",\"fileId\":\"file_001\",\"fileMd5\":\"md5_001\",\"fileSha1\":\"sha1_001\",\"fileSha256\":\"sha256_001\",\"fileSize\":\"1024\",\"fileType\":\"exe\",\"hasActiveContent\":true,\"id\":\"id_001\",\"indicatorCategory\":\"malware\",\"indicatorDescription\":\"suspicious activity\",\"indicatorMetadata\":\"meta1\",\"indicatorName\":\"Malware1\",\"loginsBaseType\":\"local\",\"loginsUserName\":\"user_login1\",\"md5\":\"md5_sample\",\"networkMethod\":\"GET\",\"networkSource\":\"LAN\",\"networkUrl\":\"http:\\/\\/example.com\",\"objectType\":\"process\",\"oldFileMd5\":\"old_md5\",\"oldFileName\":\"explorer_old.exe\",\"oldFileSha1\":\"old_sha1\",\"oldFileSha256\":\"old_sha256\",\"parentPid\":\"1001\",\"parentProcessGroupId\":\"group_parent_01\",\"parentProcessIsMalicious\":false,\"parentProcessName\":\"cmd.exe\",\"parentProcessUniqueKey\":\"unique_parent_001\",\"pid\":\"1234\",\"processCmd\":\"explorer \\/start\",\"processDisplayName\":\"Windows Explorer\",\"processGroupId\":\"group_01\",\"processImagePath\":\"C:\\\\Windows\\\\explorer.exe\",\"processImageSha1Hash\":\"sha1_process\",\"processIntegrityLevel\":\"high\",\"processIsMalicious\":false,\"processIsRedirectedCommandProcessor\":\"false\",\"processIsWow64\":\"false\",\"processName\":\"explorer.exe\",\"processRoot\":\"C:\\\\\",\"processSessionId\":\"session_001\",\"processStartTime\":\"2025-10-25T09:00:00Z\",\"processSubSystem\":\"subsystem1\",\"processUniqueKey\":\"unique_001\",\"processUserName\":\"user1\",\"protocol\":\"TCP\",\"publisher\":\"Microsoft\",\"registryClassification\":\"system\",\"registryId\":\"reg_001\",\"registryPath\":\"HKLM\\\\Software\\\\Test\",\"relatedToThreat\":false,\"rpid\":\"rpid_001\",\"sha1\":\"sha1_sample\",\"sha256\":\"sha256_sample\",\"signatureSignedInvalidReason\":\"None\",\"signedStatus\":\"Signed\",\"siteId\":\"site_001\",\"siteName\":\"SiteA\",\"srcIp\":\"89.160.20.128\",\"srcPort\":45678,\"storyline\":\"storyline1\",\"taskName\":\"task1\",\"taskPath\":\"C:\\\\Tasks\\\\task1\",\"threatStatus\":\"clean\",\"tid\":\"tid_001\",\"trueContext\":\"context1\",\"user\":\"user1\",\"verifiedStatus\":\"Verified\"}" + }, + "file": { + "hash": { + "md5": "md5_001", + "sha1": "sha1_001", + "sha256": "sha256_001" + }, + "name": "C:\\Windows\\explorer.exe", + "size": 1024, + "type": "exe" + }, + "network": { + "transport": "tcp" + }, + "process": { + "command_line": "explorer /start", + "executable": "C:\\Windows\\explorer.exe", + "hash": { + "sha1": "sha1_process" + }, + "name": "explorer.exe", + "parent": { + "name": "cmd.exe", + "pid": 1001 + }, + "pid": 1234, + "start": "2025-10-25T09:00:00.000Z", + "user": { + "name": "user1" + } + }, + "registry": { + "path": "HKLM\\Software\\Test" + }, + "related": { + "hash": [ + "sha1_001", + "sha256_001", + "md5_001", + "sha1_process" + ], + "ip": [ + "89.160.20.128", + "127.0.0.1" + ], + "user": [ + "user_login1", + "user1" + ] + }, + "sentinel_one": { + "threat_event": { + "active_content": { + "file_id": "fileid_001", + "hash": "hash_001", + "path": "C:\\content\\file1" + }, + "agent": { + "domain": "domain1", + "group_id": "group_01", + "id": "agent_001", + "infected": false, + "ip": "89.160.20.128", + "is_active": true, + "is_decommissioned": false, + "machine_type": "x64", + "name": "Agent_1", + "network_status": "online", + "os": "Windows 10", + "uuid": "uuid_001", + "version": "1.0.5" + }, + "connection_status": "active", + "created_at": "2025-10-25T10:15:30.000Z", + "direction": "outbound", + "dns_request": "example.com", + "dns_response": "192.168.0.1", + "dst": { + "ip": "127.0.0.1", + "port": 80 + }, + "event_type": "network", + "file": { + "full_name": "C:\\Windows\\explorer.exe", + "id": "file_001", + "md5": "md5_001", + "sha1": "sha1_001", + "sha256": "sha256_001", + "size": "1024", + "type": "exe" + }, + "has_active_content": true, + "id": "id_001", + "indicator": { + "category": "malware", + "description": "suspicious activity", + "metadata": "meta1", + "name": "Malware1" + }, + "logins_base_type": "local", + "logins_user_name": "user_login1", + "md5": "md5_sample", + "network": { + "method": "GET", + "source": "LAN", + "url": "http://example.com" + }, + "object_type": "process", + "old_file": { + "md5": "old_md5", + "name": "explorer_old.exe", + "sha1": "old_sha1", + "sha256": "old_sha256" + }, + "parent_pid": "1001", + "parent_process": { + "group_id": "group_parent_01", + "is_malicious": false, + "name": "cmd.exe", + "unique_key": "unique_parent_001" + }, + "pid": "1234", + "process": { + "cmd": "explorer /start", + "display_name": "Windows Explorer", + "group_id": "group_01", + "image_path": "C:\\Windows\\explorer.exe", + "image_sha1_hash": "sha1_process", + "integrity_level": "high", + "is_malicious": false, + "is_redirected_command_processor": "false", + "is_wow64": "false", + "name": "explorer.exe", + "root": "C:\\", + "session_id": "session_001", + "start_time": "2025-10-25T09:00:00.000Z", + "sub_system": "subsystem1", + "unique_key": "unique_001", + "user_name": "user1" + }, + "protocol": "TCP", + "publisher": "Microsoft", + "registry": { + "classification": "system", + "id": "reg_001", + "path": "HKLM\\Software\\Test" + }, + "related_to_threat": false, + "rpid": "rpid_001", + "sha1": "sha1_sample", + "sha256": "sha256_sample", + "signature_signed_invalid_reason": "None", + "signed_status": "Signed", + "site": { + "id": "site_001", + "name": "SiteA" + }, + "src": { + "ip": "89.160.20.128", + "port": 45678 + }, + "storyline": "storyline1", + "task_name": "task1", + "task_path": "C:\\Tasks\\task1", + "threat_status": "clean", + "tid": "tid_001", + "true_context": "context1", + "user": "user1", + "verified_status": "Verified" + } + }, + "source": { + "ip": "89.160.20.128", + "port": 45678 + }, + "tags": [ + "preserve_duplicate_custom_fields" + ], + "threat": { + "indicator": { + "description": "suspicious activity", + "name": "Malware1" + } + }, + "url": { + "full": "http://example.com" + }, + "user": { + "name": "user1" + } + }, + { + "@timestamp": "2025-10-24T14:20:00.000Z", + "destination": { + "ip": "127.0.0.1", + "port": 443 + }, + "ecs": { + "version": "8.17.0" + }, + "event": { + "created": "2025-10-24T14:20:00.000Z", + "id": "id_002", + "kind": "event", + "original": "{\"activeContentFileId\":\"fileid_002\",\"activeContentHash\":\"hash_002\",\"activeContentPath\":\"D:\\\\content\\\\file2\",\"agentDomain\":\"domain2\",\"agentGroupId\":\"group_02\",\"agentId\":\"agent_002\",\"agentInfected\":true,\"agentIp\":\"89.160.20.156\",\"agentIsActive\":true,\"agentIsDecommissioned\":false,\"agentMachineType\":\"x86\",\"agentName\":\"Agent_2\",\"agentNetworkStatus\":\"offline\",\"agentOs\":\"Windows Server 2019\",\"agentUuid\":\"uuid_002\",\"agentVersion\":\"1.0.7\",\"connectionStatus\":\"inactive\",\"createdAt\":\"2025-10-24T14:20:00Z\",\"direction\":\"inbound\",\"dnsRequest\":\"test.com\",\"dnsResponse\":\"192.168.0.2\",\"dstIp\":\"127.0.0.1\",\"dstPort\":443,\"eventType\":\"network\",\"fileFullName\":\"C:\\\\Windows\\\\svchost.exe\",\"fileId\":\"file_002\",\"fileMd5\":\"md5_002\",\"fileSha1\":\"sha1_002\",\"fileSha256\":\"sha256_002\",\"fileSize\":\"2048\",\"fileType\":\"dll\",\"hasActiveContent\":false,\"id\":\"id_002\",\"indicatorCategory\":\"adware\",\"indicatorDescription\":\"suspicious file\",\"indicatorMetadata\":\"meta2\",\"indicatorName\":\"Adware2\",\"loginsBaseType\":\"domain\",\"loginsUserName\":\"user_login2\",\"md5\":\"md5_sample2\",\"networkMethod\":\"POST\",\"networkSource\":\"WAN\",\"networkUrl\":\"https:\\/\\/test.com\",\"objectType\":\"process\",\"oldFileMd5\":\"old_md52\",\"oldFileName\":\"svchost_old.exe\",\"oldFileSha1\":\"old_sha12\",\"oldFileSha256\":\"old_sha2562\",\"parentPid\":\"2001\",\"parentProcessGroupId\":\"group_parent_02\",\"parentProcessIsMalicious\":true,\"parentProcessName\":\"explorer.exe\",\"parentProcessUniqueKey\":\"unique_parent_002\",\"pid\":\"2345\",\"processCmd\":\"svchost \\/run\",\"processDisplayName\":\"Service Host\",\"processGroupId\":\"group_02\",\"processImagePath\":\"C:\\\\Windows\\\\svchost.exe\",\"processImageSha1Hash\":\"sha1_process2\",\"processIntegrityLevel\":\"medium\",\"processIsMalicious\":true,\"processIsRedirectedCommandProcessor\":\"false\",\"processIsWow64\":\"true\",\"processName\":\"svchost.exe\",\"processRoot\":\"D:\\\\\",\"processSessionId\":\"session_002\",\"processStartTime\":\"2025-10-24T13:00:00Z\",\"processSubSystem\":\"subsystem2\",\"processUniqueKey\":\"unique_002\",\"processUserName\":\"user2\",\"protocol\":\"UDP\",\"publisher\":\"Adobe\",\"registryClassification\":\"application\",\"registryId\":\"reg_002\",\"registryPath\":\"HKCU\\\\Software\\\\Test2\",\"relatedToThreat\":true,\"rpid\":\"rpid_002\",\"sha1\":\"sha1_sample2\",\"sha256\":\"sha256_sample2\",\"signatureSignedInvalidReason\":\"Invalid\",\"signedStatus\":\"Unsigned\",\"siteId\":\"site_002\",\"siteName\":\"SiteB\",\"srcIp\":\"89.160.20.156\",\"srcPort\":56789,\"storyline\":\"storyline2\",\"taskName\":\"task2\",\"taskPath\":\"D:\\\\Tasks\\\\task2\",\"threatStatus\":\"threat\",\"tid\":\"tid_002\",\"trueContext\":\"context2\",\"user\":\"user2\",\"verifiedStatus\":\"Unverified\"}" + }, + "file": { + "hash": { + "md5": "md5_002", + "sha1": "sha1_002", + "sha256": "sha256_002" + }, + "name": "C:\\Windows\\svchost.exe", + "size": 2048, + "type": "dll" + }, + "network": { + "transport": "udp" + }, + "process": { + "command_line": "svchost /run", + "executable": "C:\\Windows\\svchost.exe", + "hash": { + "sha1": "sha1_process2" + }, + "name": "svchost.exe", + "parent": { + "name": "explorer.exe", + "pid": 2001 + }, + "pid": 2345, + "start": "2025-10-24T13:00:00.000Z", + "user": { + "name": "user2" + } + }, + "registry": { + "path": "HKCU\\Software\\Test2" + }, + "related": { + "hash": [ + "sha1_002", + "sha256_002", + "md5_002", + "sha1_process2" + ], + "ip": [ + "89.160.20.156", + "127.0.0.1" + ], + "user": [ + "user_login2", + "user2" + ] + }, + "sentinel_one": { + "threat_event": { + "active_content": { + "file_id": "fileid_002", + "hash": "hash_002", + "path": "D:\\content\\file2" + }, + "agent": { + "domain": "domain2", + "group_id": "group_02", + "id": "agent_002", + "infected": true, + "ip": "89.160.20.156", + "is_active": true, + "is_decommissioned": false, + "machine_type": "x86", + "name": "Agent_2", + "network_status": "offline", + "os": "Windows Server 2019", + "uuid": "uuid_002", + "version": "1.0.7" + }, + "connection_status": "inactive", + "created_at": "2025-10-24T14:20:00.000Z", + "direction": "inbound", + "dns_request": "test.com", + "dns_response": "192.168.0.2", + "dst": { + "ip": "127.0.0.1", + "port": 443 + }, + "event_type": "network", + "file": { + "full_name": "C:\\Windows\\svchost.exe", + "id": "file_002", + "md5": "md5_002", + "sha1": "sha1_002", + "sha256": "sha256_002", + "size": "2048", + "type": "dll" + }, + "has_active_content": false, + "id": "id_002", + "indicator": { + "category": "adware", + "description": "suspicious file", + "metadata": "meta2", + "name": "Adware2" + }, + "logins_base_type": "domain", + "logins_user_name": "user_login2", + "md5": "md5_sample2", + "network": { + "method": "POST", + "source": "WAN", + "url": "https://test.com" + }, + "object_type": "process", + "old_file": { + "md5": "old_md52", + "name": "svchost_old.exe", + "sha1": "old_sha12", + "sha256": "old_sha2562" + }, + "parent_pid": "2001", + "parent_process": { + "group_id": "group_parent_02", + "is_malicious": true, + "name": "explorer.exe", + "unique_key": "unique_parent_002" + }, + "pid": "2345", + "process": { + "cmd": "svchost /run", + "display_name": "Service Host", + "group_id": "group_02", + "image_path": "C:\\Windows\\svchost.exe", + "image_sha1_hash": "sha1_process2", + "integrity_level": "medium", + "is_malicious": true, + "is_redirected_command_processor": "false", + "is_wow64": "true", + "name": "svchost.exe", + "root": "D:\\", + "session_id": "session_002", + "start_time": "2025-10-24T13:00:00.000Z", + "sub_system": "subsystem2", + "unique_key": "unique_002", + "user_name": "user2" + }, + "protocol": "UDP", + "publisher": "Adobe", + "registry": { + "classification": "application", + "id": "reg_002", + "path": "HKCU\\Software\\Test2" + }, + "related_to_threat": true, + "rpid": "rpid_002", + "sha1": "sha1_sample2", + "sha256": "sha256_sample2", + "signature_signed_invalid_reason": "Invalid", + "signed_status": "Unsigned", + "site": { + "id": "site_002", + "name": "SiteB" + }, + "src": { + "ip": "89.160.20.156", + "port": 56789 + }, + "storyline": "storyline2", + "task_name": "task2", + "task_path": "D:\\Tasks\\task2", + "threat_status": "threat", + "tid": "tid_002", + "true_context": "context2", + "user": "user2", + "verified_status": "Unverified" + } + }, + "source": { + "ip": "89.160.20.156", + "port": 56789 + }, + "tags": [ + "preserve_duplicate_custom_fields" + ], + "threat": { + "indicator": { + "description": "suspicious file", + "name": "Adware2" + } + }, + "url": { + "full": "https://test.com" + }, + "user": { + "name": "user2" + } + }, + { + "@timestamp": "2025-10-23T08:45:00.000Z", + "destination": { + "ip": "89.160.20.128", + "port": 8080 + }, + "ecs": { + "version": "8.17.0" + }, + "event": { + "created": "2025-10-23T08:45:00.000Z", + "id": "id_003", + "kind": "event", + "original": "{\"activeContentFileId\":\"fileid_003\",\"activeContentHash\":\"hash_003\",\"activeContentPath\":\"C:\\\\content\\\\file3\",\"agentDomain\":\"domain3\",\"agentGroupId\":\"group_03\",\"agentId\":\"agent_003\",\"agentInfected\":true,\"agentIp\":\"127.0.0.1\",\"agentIsActive\":false,\"agentIsDecommissioned\":true,\"agentMachineType\":\"x64\",\"agentName\":\"Agent_3\",\"agentNetworkStatus\":\"online\",\"agentOs\":\"Windows 11\",\"agentUuid\":\"uuid_003\",\"agentVersion\":\"1.2.0\",\"connectionStatus\":\"active\",\"createdAt\":\"2025-10-23T08:45:00Z\",\"direction\":\"outbound\",\"dnsRequest\":\"example.org\",\"dnsResponse\":\"192.168.0.3\",\"dstIp\":\"89.160.20.128\",\"dstPort\":8080,\"eventType\":\"file\",\"fileFullName\":\"C:\\\\Windows\\\\notepad.exe\",\"fileId\":\"file_003\",\"fileMd5\":\"md5_003\",\"fileSha1\":\"sha1_003\",\"fileSha256\":\"sha256_003\",\"fileSize\":\"512\",\"fileType\":\"exe\",\"hasActiveContent\":true,\"id\":\"id_003\",\"indicatorCategory\":\"ransomware\",\"indicatorDescription\":\"encrypted file\",\"indicatorMetadata\":\"meta3\",\"indicatorName\":\"Ransomware3\",\"loginsBaseType\":\"local\",\"loginsUserName\":\"user_login3\",\"md5\":\"md5_sample3\",\"networkMethod\":\"GET\",\"networkSource\":\"LAN\",\"networkUrl\":\"http:\\/\\/example.org\",\"objectType\":\"process\",\"oldFileMd5\":\"old_md53\",\"oldFileName\":\"notepad_old.exe\",\"oldFileSha1\":\"old_sha13\",\"oldFileSha256\":\"old_sha2563\",\"parentPid\":\"3001\",\"parentProcessGroupId\":\"group_parent_03\",\"parentProcessIsMalicious\":true,\"parentProcessName\":\"explorer.exe\",\"parentProcessUniqueKey\":\"unique_parent_003\",\"pid\":\"3456\",\"processCmd\":\"notepad.exe \\/open\",\"processDisplayName\":\"Notepad\",\"processGroupId\":\"group_03\",\"processImagePath\":\"C:\\\\Windows\\\\notepad.exe\",\"processImageSha1Hash\":\"sha1_process3\",\"processIntegrityLevel\":\"low\",\"processIsMalicious\":true,\"processIsRedirectedCommandProcessor\":\"false\",\"processIsWow64\":\"false\",\"processName\":\"notepad.exe\",\"processRoot\":\"C:\\\\\",\"processSessionId\":\"session_003\",\"processStartTime\":\"2025-10-23T08:30:00Z\",\"processSubSystem\":\"subsystem3\",\"processUniqueKey\":\"unique_003\",\"processUserName\":\"user3\",\"protocol\":\"TCP\",\"publisher\":\"Microsoft\",\"registryClassification\":\"system\",\"registryId\":\"reg_003\",\"registryPath\":\"HKLM\\\\Software\\\\Test3\",\"relatedToThreat\":true,\"rpid\":\"rpid_003\",\"sha1\":\"sha1_sample3\",\"sha256\":\"sha256_sample3\",\"signatureSignedInvalidReason\":\"Expired\",\"signedStatus\":\"Signed\",\"siteId\":\"site_003\",\"siteName\":\"SiteC\",\"srcIp\":\"127.0.0.1\",\"srcPort\":23456,\"storyline\":\"storyline3\",\"taskName\":\"task3\",\"taskPath\":\"C:\\\\Tasks\\\\task3\",\"threatStatus\":\"threat\",\"tid\":\"tid_003\",\"trueContext\":\"context3\",\"user\":\"user3\",\"verifiedStatus\":\"Verified\"}" + }, + "file": { + "hash": { + "md5": "md5_003", + "sha1": "sha1_003", + "sha256": "sha256_003" + }, + "name": "C:\\Windows\\notepad.exe", + "size": 512, + "type": "exe" + }, + "network": { + "transport": "tcp" + }, + "process": { + "command_line": "notepad.exe /open", + "executable": "C:\\Windows\\notepad.exe", + "hash": { + "sha1": "sha1_process3" + }, + "name": "notepad.exe", + "parent": { + "name": "explorer.exe", + "pid": 3001 + }, + "pid": 3456, + "start": "2025-10-23T08:30:00.000Z", + "user": { + "name": "user3" + } + }, + "registry": { + "path": "HKLM\\Software\\Test3" + }, + "related": { + "hash": [ + "sha1_003", + "sha256_003", + "md5_003", + "sha1_process3" + ], + "ip": [ + "127.0.0.1", + "89.160.20.128" + ], + "user": [ + "user_login3", + "user3" + ] + }, + "sentinel_one": { + "threat_event": { + "active_content": { + "file_id": "fileid_003", + "hash": "hash_003", + "path": "C:\\content\\file3" + }, + "agent": { + "domain": "domain3", + "group_id": "group_03", + "id": "agent_003", + "infected": true, + "ip": "127.0.0.1", + "is_active": false, + "is_decommissioned": true, + "machine_type": "x64", + "name": "Agent_3", + "network_status": "online", + "os": "Windows 11", + "uuid": "uuid_003", + "version": "1.2.0" + }, + "connection_status": "active", + "created_at": "2025-10-23T08:45:00.000Z", + "direction": "outbound", + "dns_request": "example.org", + "dns_response": "192.168.0.3", + "dst": { + "ip": "89.160.20.128", + "port": 8080 + }, + "event_type": "file", + "file": { + "full_name": "C:\\Windows\\notepad.exe", + "id": "file_003", + "md5": "md5_003", + "sha1": "sha1_003", + "sha256": "sha256_003", + "size": "512", + "type": "exe" + }, + "has_active_content": true, + "id": "id_003", + "indicator": { + "category": "ransomware", + "description": "encrypted file", + "metadata": "meta3", + "name": "Ransomware3" + }, + "logins_base_type": "local", + "logins_user_name": "user_login3", + "md5": "md5_sample3", + "network": { + "method": "GET", + "source": "LAN", + "url": "http://example.org" + }, + "object_type": "process", + "old_file": { + "md5": "old_md53", + "name": "notepad_old.exe", + "sha1": "old_sha13", + "sha256": "old_sha2563" + }, + "parent_pid": "3001", + "parent_process": { + "group_id": "group_parent_03", + "is_malicious": true, + "name": "explorer.exe", + "unique_key": "unique_parent_003" + }, + "pid": "3456", + "process": { + "cmd": "notepad.exe /open", + "display_name": "Notepad", + "group_id": "group_03", + "image_path": "C:\\Windows\\notepad.exe", + "image_sha1_hash": "sha1_process3", + "integrity_level": "low", + "is_malicious": true, + "is_redirected_command_processor": "false", + "is_wow64": "false", + "name": "notepad.exe", + "root": "C:\\", + "session_id": "session_003", + "start_time": "2025-10-23T08:30:00.000Z", + "sub_system": "subsystem3", + "unique_key": "unique_003", + "user_name": "user3" + }, + "protocol": "TCP", + "publisher": "Microsoft", + "registry": { + "classification": "system", + "id": "reg_003", + "path": "HKLM\\Software\\Test3" + }, + "related_to_threat": true, + "rpid": "rpid_003", + "sha1": "sha1_sample3", + "sha256": "sha256_sample3", + "signature_signed_invalid_reason": "Expired", + "signed_status": "Signed", + "site": { + "id": "site_003", + "name": "SiteC" + }, + "src": { + "ip": "127.0.0.1", + "port": 23456 + }, + "storyline": "storyline3", + "task_name": "task3", + "task_path": "C:\\Tasks\\task3", + "threat_status": "threat", + "tid": "tid_003", + "true_context": "context3", + "user": "user3", + "verified_status": "Verified" + } + }, + "source": { + "ip": "127.0.0.1", + "port": 23456 + }, + "tags": [ + "preserve_duplicate_custom_fields" + ], + "threat": { + "indicator": { + "description": "encrypted file", + "name": "Ransomware3" + } + }, + "url": { + "full": "http://example.org" + }, + "user": { + "name": "user3" + } + }, + { + "@timestamp": "2025-10-22T11:30:00.000Z", + "destination": { + "ip": "89.160.20.128", + "port": 443 + }, + "ecs": { + "version": "8.17.0" + }, + "event": { + "created": "2025-10-22T11:30:00.000Z", + "id": "id_004", + "kind": "event", + "original": "{\"activeContentFileId\":\"fileid_004\",\"activeContentHash\":\"hash_004\",\"activeContentPath\":\"D:\\\\content\\\\file4\",\"agentDomain\":\"domain4\",\"agentGroupId\":\"group_04\",\"agentId\":\"agent_004\",\"agentInfected\":false,\"agentIp\":\"89.160.20.156\",\"agentIsActive\":true,\"agentIsDecommissioned\":false,\"agentMachineType\":\"x64\",\"agentName\":\"Agent_4\",\"agentNetworkStatus\":\"online\",\"agentOs\":\"Windows 10\",\"agentUuid\":\"uuid_004\",\"agentVersion\":\"1.3.0\",\"connectionStatus\":\"active\",\"createdAt\":\"2025-10-22T11:30:00Z\",\"direction\":\"outbound\",\"dnsRequest\":\"google.com\",\"dnsResponse\":\"8.8.8.8\",\"dstIp\":\"89.160.20.128\",\"dstPort\":443,\"eventType\":\"network\",\"fileFullName\":\"C:\\\\Program Files\\\\Chrome\\\\chrome.exe\",\"fileId\":\"file_004\",\"fileMd5\":\"md5_004\",\"fileSha1\":\"sha1_004\",\"fileSha256\":\"sha256_004\",\"fileSize\":\"4096\",\"fileType\":\"exe\",\"hasActiveContent\":false,\"id\":\"id_004\",\"indicatorCategory\":\"spyware\",\"indicatorDescription\":\"tracking software\",\"indicatorMetadata\":\"meta4\",\"indicatorName\":\"Spyware4\",\"loginsBaseType\":\"domain\",\"loginsUserName\":\"user_login4\",\"md5\":\"md5_sample4\",\"networkMethod\":\"GET\",\"networkSource\":\"WAN\",\"networkUrl\":\"https:\\/\\/google.com\",\"objectType\":\"process\",\"oldFileMd5\":\"old_md54\",\"oldFileName\":\"chrome_old.exe\",\"oldFileSha1\":\"old_sha14\",\"oldFileSha256\":\"old_sha2564\",\"parentPid\":\"4001\",\"parentProcessGroupId\":\"group_parent_04\",\"parentProcessIsMalicious\":false,\"parentProcessName\":\"explorer.exe\",\"parentProcessUniqueKey\":\"unique_parent_004\",\"pid\":\"4567\",\"processCmd\":\"chrome.exe --new-tab\",\"processDisplayName\":\"Google Chrome\",\"processGroupId\":\"group_04\",\"processImagePath\":\"C:\\\\Program Files\\\\Chrome\\\\chrome.exe\",\"processImageSha1Hash\":\"sha1_process4\",\"processIntegrityLevel\":\"medium\",\"processIsMalicious\":false,\"processIsRedirectedCommandProcessor\":\"false\",\"processIsWow64\":\"false\",\"processName\":\"chrome.exe\",\"processRoot\":\"C:\\\\\",\"processSessionId\":\"session_004\",\"processStartTime\":\"2025-10-22T11:00:00Z\",\"processSubSystem\":\"subsystem4\",\"processUniqueKey\":\"unique_004\",\"processUserName\":\"user4\",\"protocol\":\"TCP\",\"publisher\":\"Google\",\"registryClassification\":\"application\",\"registryId\":\"reg_004\",\"registryPath\":\"HKCU\\\\Software\\\\Test4\",\"relatedToThreat\":false,\"rpid\":\"rpid_004\",\"sha1\":\"sha1_sample4\",\"sha256\":\"sha256_sample4\",\"signatureSignedInvalidReason\":\"None\",\"signedStatus\":\"Signed\",\"siteId\":\"site_004\",\"siteName\":\"SiteD\",\"srcIp\":\"127.0.0.1\",\"srcPort\":34567,\"storyline\":\"storyline4\",\"taskName\":\"task4\",\"taskPath\":\"C:\\\\Tasks\\\\task4\",\"threatStatus\":\"clean\",\"tid\":\"tid_004\",\"trueContext\":\"context4\",\"user\":\"user4\",\"verifiedStatus\":\"Verified\"}" + }, + "file": { + "hash": { + "md5": "md5_004", + "sha1": "sha1_004", + "sha256": "sha256_004" + }, + "name": "C:\\Program Files\\Chrome\\chrome.exe", + "size": 4096, + "type": "exe" + }, + "network": { + "transport": "tcp" + }, + "process": { + "command_line": "chrome.exe --new-tab", + "executable": "C:\\Program Files\\Chrome\\chrome.exe", + "hash": { + "sha1": "sha1_process4" + }, + "name": "chrome.exe", + "parent": { + "name": "explorer.exe", + "pid": 4001 + }, + "pid": 4567, + "start": "2025-10-22T11:00:00.000Z", + "user": { + "name": "user4" + } + }, + "registry": { + "path": "HKCU\\Software\\Test4" + }, + "related": { + "hash": [ + "sha1_004", + "sha256_004", + "md5_004", + "sha1_process4" + ], + "ip": [ + "89.160.20.156", + "127.0.0.1", + "89.160.20.128" + ], + "user": [ + "user_login4", + "user4" + ] + }, + "sentinel_one": { + "threat_event": { + "active_content": { + "file_id": "fileid_004", + "hash": "hash_004", + "path": "D:\\content\\file4" + }, + "agent": { + "domain": "domain4", + "group_id": "group_04", + "id": "agent_004", + "infected": false, + "ip": "89.160.20.156", + "is_active": true, + "is_decommissioned": false, + "machine_type": "x64", + "name": "Agent_4", + "network_status": "online", + "os": "Windows 10", + "uuid": "uuid_004", + "version": "1.3.0" + }, + "connection_status": "active", + "created_at": "2025-10-22T11:30:00.000Z", + "direction": "outbound", + "dns_request": "google.com", + "dns_response": "8.8.8.8", + "dst": { + "ip": "89.160.20.128", + "port": 443 + }, + "event_type": "network", + "file": { + "full_name": "C:\\Program Files\\Chrome\\chrome.exe", + "id": "file_004", + "md5": "md5_004", + "sha1": "sha1_004", + "sha256": "sha256_004", + "size": "4096", + "type": "exe" + }, + "has_active_content": false, + "id": "id_004", + "indicator": { + "category": "spyware", + "description": "tracking software", + "metadata": "meta4", + "name": "Spyware4" + }, + "logins_base_type": "domain", + "logins_user_name": "user_login4", + "md5": "md5_sample4", + "network": { + "method": "GET", + "source": "WAN", + "url": "https://google.com" + }, + "object_type": "process", + "old_file": { + "md5": "old_md54", + "name": "chrome_old.exe", + "sha1": "old_sha14", + "sha256": "old_sha2564" + }, + "parent_pid": "4001", + "parent_process": { + "group_id": "group_parent_04", + "is_malicious": false, + "name": "explorer.exe", + "unique_key": "unique_parent_004" + }, + "pid": "4567", + "process": { + "cmd": "chrome.exe --new-tab", + "display_name": "Google Chrome", + "group_id": "group_04", + "image_path": "C:\\Program Files\\Chrome\\chrome.exe", + "image_sha1_hash": "sha1_process4", + "integrity_level": "medium", + "is_malicious": false, + "is_redirected_command_processor": "false", + "is_wow64": "false", + "name": "chrome.exe", + "root": "C:\\", + "session_id": "session_004", + "start_time": "2025-10-22T11:00:00.000Z", + "sub_system": "subsystem4", + "unique_key": "unique_004", + "user_name": "user4" + }, + "protocol": "TCP", + "publisher": "Google", + "registry": { + "classification": "application", + "id": "reg_004", + "path": "HKCU\\Software\\Test4" + }, + "related_to_threat": false, + "rpid": "rpid_004", + "sha1": "sha1_sample4", + "sha256": "sha256_sample4", + "signature_signed_invalid_reason": "None", + "signed_status": "Signed", + "site": { + "id": "site_004", + "name": "SiteD" + }, + "src": { + "ip": "127.0.0.1", + "port": 34567 + }, + "storyline": "storyline4", + "task_name": "task4", + "task_path": "C:\\Tasks\\task4", + "threat_status": "clean", + "tid": "tid_004", + "true_context": "context4", + "user": "user4", + "verified_status": "Verified" + } + }, + "source": { + "ip": "127.0.0.1", + "port": 34567 + }, + "tags": [ + "preserve_duplicate_custom_fields" + ], + "threat": { + "indicator": { + "description": "tracking software", + "name": "Spyware4" + } + }, + "url": { + "full": "https://google.com" + }, + "user": { + "name": "user4" + } + } + ] +} diff --git a/packages/sentinel_one/data_stream/threat_event/_dev/test/policy/test-all.expected b/packages/sentinel_one/data_stream/threat_event/_dev/test/policy/test-all.expected new file mode 100644 index 00000000000..f2911c3de01 --- /dev/null +++ b/packages/sentinel_one/data_stream/threat_event/_dev/test/policy/test-all.expected @@ -0,0 +1,252 @@ +inputs: + - data_stream: + namespace: ep + meta: + package: + name: sentinel_one + name: test-all-sentinel_one + streams: + - config_version: 2 + data_stream: + dataset: sentinel_one.threat_event + interval: 30s + processors: + - add_fields: + fields: + id: "574734885120952459" + name: myproject + target: project + - add_tags: + tags: + - web + - production + target: environment + program: |- + ( + (has(state.?worklist.data) && size(state.worklist.data) > 0) ? + state + : + state.with( + request( + "GET", + state.url.trim_right("/") + "/web/api/v2.1/threats?" + { + "skipCount": ["true"], + "limit": [string(state.batch_size)], + ?"siteIds": state.?site_ids.optMap(v, [string(v)]), + ?"cursor": state.?next_page.token.optMap(v, [v]), + }.format_query() + ).with( + { + "Header": { + "Authorization": ["ApiToken " + state.api_token], + }, + } + ).do_request().as(resp, (resp.StatusCode == 200) ? + resp.Body.decode_json().as(body, + { + "worklist": body, + "next_page": { + ?"token": (body.?pagination.nextCursor.orValue(null) != null) ? optional.of(body.pagination.nextCursor) : optional.none(), + }, + "fetch_more": body.?pagination.nextCursor.orValue(null) != null, + } + ) + : + { + "events": { + "error": { + "code": string(resp.StatusCode), + "id": string(resp.Status), + "message": "GET " + state.url.trim_right("/") + "/web/api/v2.1/threats: " + ( + (size(resp.Body) != 0) ? + string(resp.Body) + : + string(resp.Status) + " (" + string(resp.StatusCode) + ")" + ), + }, + }, + "want_more": false, + "offset": 0, + } + ) + ) + ).as(state, + state.with( + !has(state.worklist) ? // Exit early due to GET failure. + state + : (has(state.worklist.data) && size(state.worklist.data) > 0) ? + request( + "GET", + state.url.trim_right("/") + "/web/api/v2.1/threats/" + string(state.worklist.data[0].id) + "/explore/events?" + { + "skipCount": ["true"], + "limit": [string(state.batch_size)], + ?"cursor": state.?next_chain.token.optMap(v, [v]), + }.format_query() + ).with( + { + "Header": { + "Authorization": ["ApiToken " + state.api_token], + }, + } + ).do_request().as(resp, (resp.StatusCode == 200) ? + resp.Body.decode_json().as(body, + { + "events": (has(body.data) && body.data.size() > 0) ? + body.data.map(e, + { + "message": e.encode_json(), + } + ) + : + [{"message": "retry"}], + "next_chain": { + ?"token": (body.?pagination.nextCursor.orValue(null) != null) ? optional.of(body.pagination.nextCursor) : optional.none(), + }, + "worklist": { + "data": (body.?pagination.nextCursor.orValue(null) != null) ? state.worklist.data : tail(state.worklist.data), + }, + "want_more": state.?fetch_more.orValue(false) ? state.fetch_more : (body.?pagination.nextCursor.orValue(null) != null), + } + ) + : + { + "events": { + "error": { + "code": string(resp.StatusCode), + "id": string(resp.Status), + "message": "GET " + state.url.trim_right("/") + "/web/api/v2.1/threats/" + string(state.worklist.data[0].id) + "/explore/events: " + ( + (size(resp.Body) != 0) ? + string(resp.Body) + : + string(resp.Status) + " (" + string(resp.StatusCode) + ")" + ), + }, + }, + "want_more": false, + } + ) + : + { + "events": [], + "want_more": false, + } + ) + ) + publisher_pipeline.disable_host: true + redact: + fields: + - api_token + resource.proxy_url: https://user:P%40ssword%23@0.0.0.0:0000 + resource.ssl: + certificate: | + -----BEGIN CERTIFICATE----- + MIIDCjCCAfKgAwIBAgITJ706Mu2wJlKckpIvkWxEHvEyijANBgkqhkiG9w0BAQsF + ADAUMRIwEAYDVQQDDAlsb2NhbGhvc3QwIBcNMTkwNzIyMTkyOTA0WhgPMjExOTA2 + MjgxOTI5MDRaMBQxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEB + BQADggEPADCCAQoCggEBANce58Y/JykI58iyOXpxGfw0/gMvF0hUQAcUrSMxEO6n + fZRA49b4OV4SwWmA3395uL2eB2NB8y8qdQ9muXUdPBWE4l9rMZ6gmfu90N5B5uEl + 94NcfBfYOKi1fJQ9i7WKhTjlRkMCgBkWPkUokvBZFRt8RtF7zI77BSEorHGQCk9t + /D7BS0GJyfVEhftbWcFEAG3VRcoMhF7kUzYwp+qESoriFRYLeDWv68ZOvG7eoWnP + PsvZStEVEimjvK5NSESEQa9xWyJOmlOKXhkdymtcUd/nXnx6UTCFgnkgzSdTWV41 + CI6B6aJ9svCTI2QuoIq2HxX/ix7OvW1huVmcyHVxyUECAwEAAaNTMFEwHQYDVR0O + BBYEFPwN1OceFGm9v6ux8G+DZ3TUDYxqMB8GA1UdIwQYMBaAFPwN1OceFGm9v6ux + 8G+DZ3TUDYxqMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAG5D + 874A4YI7YUwOVsVAdbWtgp1d0zKcPRR+r2OdSbTAV5/gcS3jgBJ3i1BN34JuDVFw + 3DeJSYT3nxy2Y56lLnxDeF8CUTUtVQx3CuGkRg1ouGAHpO/6OqOhwLLorEmxi7tA + H2O8mtT0poX5AnOAhzVy7QW0D/k4WaoLyckM5hUa6RtvgvLxOwA0U+VGurCDoctu + 8F4QOgTAWyh8EZIwaKCliFRSynDpv3JTUwtfZkxo6K6nce1RhCWFAsMvDZL8Dgc0 + yvgJ38BRsFOtkRuAGSf6ZUwTO8JJRRIFnpUzXflAnGivK9M13D5GEQMmIl6U9Pvk + sxSmbIUfc2SGJGCJD4I= + -----END CERTIFICATE----- + certificate_authorities: + - | + -----BEGIN CERTIFICATE----- + MIIDCjCCAfKgAwIBAgITJ706Mu2wJlKckpIvkWxEHvEyijANBgkqhkiG9w0BAQsF + ADAUMRIwEAYDVQQDDAlsb2NhbGhvc3QwIBcNMTkwNzIyMTkyOTA0WhgPMjExOTA2 + MjgxOTI5MDRaMBQxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEB + BQADggEPADCCAQoCggEBANce58Y/JykI58iyOXpxGfw0/gMvF0hUQAcUrSMxEO6n + fZRA49b4OV4SwWmA3395uL2eB2NB8y8qdQ9muXUdPBWE4l9rMZ6gmfu90N5B5uEl + 94NcfBfYOKi1fJQ9i7WKhTjlRkMCgBkWPkUokvBZFRt8RtF7zI77BSEorHGQCk9t + /D7BS0GJyfVEhftbWcFEAG3VRcoMhF7kUzYwp+qESoriFRYLeDWv68ZOvG7eoWnP + PsvZStEVEimjvK5NSESEQa9xWyJOmlOKXhkdymtcUd/nXnx6UTCFgnkgzSdTWV41 + CI6B6aJ9svCTI2QuoIq2HxX/ix7OvW1huVmcyHVxyUECAwEAAaNTMFEwHQYDVR0O + BBYEFPwN1OceFGm9v6ux8G+DZ3TUDYxqMB8GA1UdIwQYMBaAFPwN1OceFGm9v6ux + 8G+DZ3TUDYxqMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAG5D + 874A4YI7YUwOVsVAdbWtgp1d0zKcPRR+r2OdSbTAV5/gcS3jgBJ3i1BN34JuDVFw + 3DeJSYT3nxy2Y56lLnxDeF8CUTUtVQx3CuGkRg1ouGAHpO/6OqOhwLLorEmxi7tA + H2O8mtT0poX5AnOAhzVy7QW0D/k4WaoLyckM5hUa6RtvgvLxOwA0U+VGurCDoctu + 8F4QOgTAWyh8EZIwaKCliFRSynDpv3JTUwtfZkxo6K6nce1RhCWFAsMvDZL8Dgc0 + yvgJ38BRsFOtkRuAGSf6ZUwTO8JJRRIFnpUzXflAnGivK9M13D5GEQMmIl6U9Pvk + sxSmbIUfc2SGJGCJD4I= + -----END CERTIFICATE----- + cipher_suites: + - ECDHE-ECDSA-AES-128-CBC-SHA + - ECDHE-ECDSA-AES-256-GCM-SHA384 + curve_types: + - P-256 + enabled: true + key: | + -----BEGIN PRIVATE KEY----- + MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDXHufGPycpCOfI + sjl6cRn8NP4DLxdIVEAHFK0jMRDup32UQOPW+DleEsFpgN9/ebi9ngdjQfMvKnUP + Zrl1HTwVhOJfazGeoJn7vdDeQebhJfeDXHwX2DiotXyUPYu1ioU45UZDAoAZFj5F + KJLwWRUbfEbRe8yO+wUhKKxxkApPbfw+wUtBicn1RIX7W1nBRABt1UXKDIRe5FM2 + MKfqhEqK4hUWC3g1r+vGTrxu3qFpzz7L2UrRFRIpo7yuTUhEhEGvcVsiTppTil4Z + HcprXFHf5158elEwhYJ5IM0nU1leNQiOgemifbLwkyNkLqCKth8V/4sezr1tYblZ + nMh1cclBAgMBAAECggEBAKdP5jyOicqknoG9/G564RcDsDyRt64NuO7I6hBg7SZx + Jn7UKWDdFuFP/RYtoabn6QOxkVVlydp5Typ3Xu7zmfOyss479Q/HIXxmmbkD0Kp0 + eRm2KN3y0b6FySsS40KDRjKGQCuGGlNotW3crMw6vOvvsLTlcKgUHF054UVCHoK/ + Piz7igkDU7NjvJeha53vXL4hIjb10UtJNaGPxIyFLYRZdRPyyBJX7Yt3w8dgz8WM + epOPu0dq3bUrY3WQXcxKZo6sQjE1h7kdl4TNji5jaFlvD01Y8LnyG0oThOzf0tve + Gaw+kuy17gTGZGMIfGVcdeb+SlioXMAAfOps+mNIwTECgYEA/gTO8W0hgYpOQJzn + BpWkic3LAoBXWNpvsQkkC3uba8Fcps7iiEzotXGfwYcb5Ewf5O3Lrz1EwLj7GTW8 + VNhB3gb7bGOvuwI/6vYk2/dwo84bwW9qRWP5hqPhNZ2AWl8kxmZgHns6WTTxpkRU + zrfZ5eUrBDWjRU2R8uppgRImsxMCgYEA2MxuL/C/Ko0d7XsSX1kM4JHJiGpQDvb5 + GUrlKjP/qVyUysNF92B9xAZZHxxfPWpdfGGBynhw7X6s+YeIoxTzFPZVV9hlkpAA + 5igma0n8ZpZEqzttjVdpOQZK8o/Oni/Q2S10WGftQOOGw5Is8+LY30XnLvHBJhO7 + TKMurJ4KCNsCgYAe5TDSVmaj3dGEtFC5EUxQ4nHVnQyCpxa8npL+vor5wSvmsfUF + hO0s3GQE4sz2qHecnXuPldEd66HGwC1m2GKygYDk/v7prO1fQ47aHi9aDQB9N3Li + e7Vmtdn3bm+lDjtn0h3Qt0YygWj+wwLZnazn9EaWHXv9OuEMfYxVgYKpdwKBgEze + Zy8+WDm5IWRjn8cI5wT1DBT/RPWZYgcyxABrwXmGZwdhp3wnzU/kxFLAl5BKF22T + kRZ+D+RVZvVutebE9c937BiilJkb0AXLNJwT9pdVLnHcN2LHHHronUhV7vetkop+ + kGMMLlY0lkLfoGq1AxpfSbIea9KZam6o6VKxEnPDAoGAFDCJm+ZtsJK9nE5GEMav + NHy+PwkYsHhbrPl4dgStTNXLenJLIJ+Ke0Pcld4ZPfYdSyu/Tv4rNswZBNpNsW9K + 0NwJlyMBfayoPNcJKXrH/csJY7hbKviAHr1eYy9/8OL0dHf85FV+9uY5YndLcsDc + nygO9KTJuUiBrLr0AHEnqko= + -----END PRIVATE KEY----- + supported_protocols: + - TLSv1.2 + resource.timeout: 10s + resource.tracer: + enabled: true + filename: ../../logs/cel/http-request-trace-*.ndjson + maxbackups: 5 + resource.url: http://host.tld + state: + api_token: ${SECRET_0} + batch_size: 100 + site_ids: "123" + tags: + - preserve_original_event + - preserve_duplicate_custom_fields + - forwarded + - sentinel_one-threat_event + - test-policy + type: cel + use_output: default +output_permissions: + default: + _elastic_agent_checks: + cluster: + - monitor + _elastic_agent_monitoring: + indices: [] + uuid-for-permissions-on-related-indices: + indices: + - names: + - logs-sentinel_one.threat_event-ep + privileges: + - auto_configure + - create_doc +secret_references: + - {} diff --git a/packages/sentinel_one/data_stream/threat_event/_dev/test/policy/test-all.yml b/packages/sentinel_one/data_stream/threat_event/_dev/test/policy/test-all.yml new file mode 100644 index 00000000000..4cb397913a8 --- /dev/null +++ b/packages/sentinel_one/data_stream/threat_event/_dev/test/policy/test-all.yml @@ -0,0 +1,105 @@ +vars: + url: http://host.tld + api_token: test_api_token + proxy_url: https://user:P%40ssword%23@0.0.0.0:0000 + ssl: | + enabled: true + supported_protocols: + - TLSv1.2 + cipher_suites: + - ECDHE-ECDSA-AES-128-CBC-SHA + - ECDHE-ECDSA-AES-256-GCM-SHA384 + curve_types: + - P-256 + certificate_authorities: + - | + -----BEGIN CERTIFICATE----- + MIIDCjCCAfKgAwIBAgITJ706Mu2wJlKckpIvkWxEHvEyijANBgkqhkiG9w0BAQsF + ADAUMRIwEAYDVQQDDAlsb2NhbGhvc3QwIBcNMTkwNzIyMTkyOTA0WhgPMjExOTA2 + MjgxOTI5MDRaMBQxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEB + BQADggEPADCCAQoCggEBANce58Y/JykI58iyOXpxGfw0/gMvF0hUQAcUrSMxEO6n + fZRA49b4OV4SwWmA3395uL2eB2NB8y8qdQ9muXUdPBWE4l9rMZ6gmfu90N5B5uEl + 94NcfBfYOKi1fJQ9i7WKhTjlRkMCgBkWPkUokvBZFRt8RtF7zI77BSEorHGQCk9t + /D7BS0GJyfVEhftbWcFEAG3VRcoMhF7kUzYwp+qESoriFRYLeDWv68ZOvG7eoWnP + PsvZStEVEimjvK5NSESEQa9xWyJOmlOKXhkdymtcUd/nXnx6UTCFgnkgzSdTWV41 + CI6B6aJ9svCTI2QuoIq2HxX/ix7OvW1huVmcyHVxyUECAwEAAaNTMFEwHQYDVR0O + BBYEFPwN1OceFGm9v6ux8G+DZ3TUDYxqMB8GA1UdIwQYMBaAFPwN1OceFGm9v6ux + 8G+DZ3TUDYxqMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAG5D + 874A4YI7YUwOVsVAdbWtgp1d0zKcPRR+r2OdSbTAV5/gcS3jgBJ3i1BN34JuDVFw + 3DeJSYT3nxy2Y56lLnxDeF8CUTUtVQx3CuGkRg1ouGAHpO/6OqOhwLLorEmxi7tA + H2O8mtT0poX5AnOAhzVy7QW0D/k4WaoLyckM5hUa6RtvgvLxOwA0U+VGurCDoctu + 8F4QOgTAWyh8EZIwaKCliFRSynDpv3JTUwtfZkxo6K6nce1RhCWFAsMvDZL8Dgc0 + yvgJ38BRsFOtkRuAGSf6ZUwTO8JJRRIFnpUzXflAnGivK9M13D5GEQMmIl6U9Pvk + sxSmbIUfc2SGJGCJD4I= + -----END CERTIFICATE----- + certificate: | + -----BEGIN CERTIFICATE----- + MIIDCjCCAfKgAwIBAgITJ706Mu2wJlKckpIvkWxEHvEyijANBgkqhkiG9w0BAQsF + ADAUMRIwEAYDVQQDDAlsb2NhbGhvc3QwIBcNMTkwNzIyMTkyOTA0WhgPMjExOTA2 + MjgxOTI5MDRaMBQxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEB + BQADggEPADCCAQoCggEBANce58Y/JykI58iyOXpxGfw0/gMvF0hUQAcUrSMxEO6n + fZRA49b4OV4SwWmA3395uL2eB2NB8y8qdQ9muXUdPBWE4l9rMZ6gmfu90N5B5uEl + 94NcfBfYOKi1fJQ9i7WKhTjlRkMCgBkWPkUokvBZFRt8RtF7zI77BSEorHGQCk9t + /D7BS0GJyfVEhftbWcFEAG3VRcoMhF7kUzYwp+qESoriFRYLeDWv68ZOvG7eoWnP + PsvZStEVEimjvK5NSESEQa9xWyJOmlOKXhkdymtcUd/nXnx6UTCFgnkgzSdTWV41 + CI6B6aJ9svCTI2QuoIq2HxX/ix7OvW1huVmcyHVxyUECAwEAAaNTMFEwHQYDVR0O + BBYEFPwN1OceFGm9v6ux8G+DZ3TUDYxqMB8GA1UdIwQYMBaAFPwN1OceFGm9v6ux + 8G+DZ3TUDYxqMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAG5D + 874A4YI7YUwOVsVAdbWtgp1d0zKcPRR+r2OdSbTAV5/gcS3jgBJ3i1BN34JuDVFw + 3DeJSYT3nxy2Y56lLnxDeF8CUTUtVQx3CuGkRg1ouGAHpO/6OqOhwLLorEmxi7tA + H2O8mtT0poX5AnOAhzVy7QW0D/k4WaoLyckM5hUa6RtvgvLxOwA0U+VGurCDoctu + 8F4QOgTAWyh8EZIwaKCliFRSynDpv3JTUwtfZkxo6K6nce1RhCWFAsMvDZL8Dgc0 + yvgJ38BRsFOtkRuAGSf6ZUwTO8JJRRIFnpUzXflAnGivK9M13D5GEQMmIl6U9Pvk + sxSmbIUfc2SGJGCJD4I= + -----END CERTIFICATE----- + key: | + -----BEGIN PRIVATE KEY----- + MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDXHufGPycpCOfI + sjl6cRn8NP4DLxdIVEAHFK0jMRDup32UQOPW+DleEsFpgN9/ebi9ngdjQfMvKnUP + Zrl1HTwVhOJfazGeoJn7vdDeQebhJfeDXHwX2DiotXyUPYu1ioU45UZDAoAZFj5F + KJLwWRUbfEbRe8yO+wUhKKxxkApPbfw+wUtBicn1RIX7W1nBRABt1UXKDIRe5FM2 + MKfqhEqK4hUWC3g1r+vGTrxu3qFpzz7L2UrRFRIpo7yuTUhEhEGvcVsiTppTil4Z + HcprXFHf5158elEwhYJ5IM0nU1leNQiOgemifbLwkyNkLqCKth8V/4sezr1tYblZ + nMh1cclBAgMBAAECggEBAKdP5jyOicqknoG9/G564RcDsDyRt64NuO7I6hBg7SZx + Jn7UKWDdFuFP/RYtoabn6QOxkVVlydp5Typ3Xu7zmfOyss479Q/HIXxmmbkD0Kp0 + eRm2KN3y0b6FySsS40KDRjKGQCuGGlNotW3crMw6vOvvsLTlcKgUHF054UVCHoK/ + Piz7igkDU7NjvJeha53vXL4hIjb10UtJNaGPxIyFLYRZdRPyyBJX7Yt3w8dgz8WM + epOPu0dq3bUrY3WQXcxKZo6sQjE1h7kdl4TNji5jaFlvD01Y8LnyG0oThOzf0tve + Gaw+kuy17gTGZGMIfGVcdeb+SlioXMAAfOps+mNIwTECgYEA/gTO8W0hgYpOQJzn + BpWkic3LAoBXWNpvsQkkC3uba8Fcps7iiEzotXGfwYcb5Ewf5O3Lrz1EwLj7GTW8 + VNhB3gb7bGOvuwI/6vYk2/dwo84bwW9qRWP5hqPhNZ2AWl8kxmZgHns6WTTxpkRU + zrfZ5eUrBDWjRU2R8uppgRImsxMCgYEA2MxuL/C/Ko0d7XsSX1kM4JHJiGpQDvb5 + GUrlKjP/qVyUysNF92B9xAZZHxxfPWpdfGGBynhw7X6s+YeIoxTzFPZVV9hlkpAA + 5igma0n8ZpZEqzttjVdpOQZK8o/Oni/Q2S10WGftQOOGw5Is8+LY30XnLvHBJhO7 + TKMurJ4KCNsCgYAe5TDSVmaj3dGEtFC5EUxQ4nHVnQyCpxa8npL+vor5wSvmsfUF + hO0s3GQE4sz2qHecnXuPldEd66HGwC1m2GKygYDk/v7prO1fQ47aHi9aDQB9N3Li + e7Vmtdn3bm+lDjtn0h3Qt0YygWj+wwLZnazn9EaWHXv9OuEMfYxVgYKpdwKBgEze + Zy8+WDm5IWRjn8cI5wT1DBT/RPWZYgcyxABrwXmGZwdhp3wnzU/kxFLAl5BKF22T + kRZ+D+RVZvVutebE9c937BiilJkb0AXLNJwT9pdVLnHcN2LHHHronUhV7vetkop+ + kGMMLlY0lkLfoGq1AxpfSbIea9KZam6o6VKxEnPDAoGAFDCJm+ZtsJK9nE5GEMav + NHy+PwkYsHhbrPl4dgStTNXLenJLIJ+Ke0Pcld4ZPfYdSyu/Tv4rNswZBNpNsW9K + 0NwJlyMBfayoPNcJKXrH/csJY7hbKviAHr1eYy9/8OL0dHf85FV+9uY5YndLcsDc + nygO9KTJuUiBrLr0AHEnqko= + -----END PRIVATE KEY----- +data_stream: + vars: + interval: 30s + batch_size: 100 + site_ids: 123 + tags: + - forwarded + - sentinel_one-threat_event + - test-policy + enable_request_tracer: true + preserve_original_event: true + preserve_duplicate_custom_fields: true + http_client_timeout: 10s + processors: | + - add_fields: + target: project + fields: + name: myproject + id: '574734885120952459' + - add_tags: + tags: [web, production] + target: "environment" diff --git a/packages/sentinel_one/data_stream/threat_event/_dev/test/policy/test-default.expected b/packages/sentinel_one/data_stream/threat_event/_dev/test/policy/test-default.expected new file mode 100644 index 00000000000..69e08468376 --- /dev/null +++ b/packages/sentinel_one/data_stream/threat_event/_dev/test/policy/test-default.expected @@ -0,0 +1,158 @@ +inputs: + - data_stream: + namespace: ep + meta: + package: + name: sentinel_one + name: test-default-sentinel_one + streams: + - config_version: 2 + data_stream: + dataset: sentinel_one.threat_event + interval: 24h + program: |- + ( + (has(state.?worklist.data) && size(state.worklist.data) > 0) ? + state + : + state.with( + request( + "GET", + state.url.trim_right("/") + "/web/api/v2.1/threats?" + { + "skipCount": ["true"], + "limit": [string(state.batch_size)], + ?"siteIds": state.?site_ids.optMap(v, [string(v)]), + ?"cursor": state.?next_page.token.optMap(v, [v]), + }.format_query() + ).with( + { + "Header": { + "Authorization": ["ApiToken " + state.api_token], + }, + } + ).do_request().as(resp, (resp.StatusCode == 200) ? + resp.Body.decode_json().as(body, + { + "worklist": body, + "next_page": { + ?"token": (body.?pagination.nextCursor.orValue(null) != null) ? optional.of(body.pagination.nextCursor) : optional.none(), + }, + "fetch_more": body.?pagination.nextCursor.orValue(null) != null, + } + ) + : + { + "events": { + "error": { + "code": string(resp.StatusCode), + "id": string(resp.Status), + "message": "GET " + state.url.trim_right("/") + "/web/api/v2.1/threats: " + ( + (size(resp.Body) != 0) ? + string(resp.Body) + : + string(resp.Status) + " (" + string(resp.StatusCode) + ")" + ), + }, + }, + "want_more": false, + "offset": 0, + } + ) + ) + ).as(state, + state.with( + !has(state.worklist) ? // Exit early due to GET failure. + state + : (has(state.worklist.data) && size(state.worklist.data) > 0) ? + request( + "GET", + state.url.trim_right("/") + "/web/api/v2.1/threats/" + string(state.worklist.data[0].id) + "/explore/events?" + { + "skipCount": ["true"], + "limit": [string(state.batch_size)], + ?"cursor": state.?next_chain.token.optMap(v, [v]), + }.format_query() + ).with( + { + "Header": { + "Authorization": ["ApiToken " + state.api_token], + }, + } + ).do_request().as(resp, (resp.StatusCode == 200) ? + resp.Body.decode_json().as(body, + { + "events": (has(body.data) && body.data.size() > 0) ? + body.data.map(e, + { + "message": e.encode_json(), + } + ) + : + [{"message": "retry"}], + "next_chain": { + ?"token": (body.?pagination.nextCursor.orValue(null) != null) ? optional.of(body.pagination.nextCursor) : optional.none(), + }, + "worklist": { + "data": (body.?pagination.nextCursor.orValue(null) != null) ? state.worklist.data : tail(state.worklist.data), + }, + "want_more": state.?fetch_more.orValue(false) ? state.fetch_more : (body.?pagination.nextCursor.orValue(null) != null), + } + ) + : + { + "events": { + "error": { + "code": string(resp.StatusCode), + "id": string(resp.Status), + "message": "GET " + state.url.trim_right("/") + "/web/api/v2.1/threats/" + string(state.worklist.data[0].id) + "/explore/events: " + ( + (size(resp.Body) != 0) ? + string(resp.Body) + : + string(resp.Status) + " (" + string(resp.StatusCode) + ")" + ), + }, + }, + "want_more": false, + } + ) + : + { + "events": [], + "want_more": false, + } + ) + ) + publisher_pipeline.disable_host: true + redact: + fields: + - api_token + resource.ssl: null + resource.timeout: 30s + resource.tracer: + enabled: false + filename: ../../logs/cel/http-request-trace-*.ndjson + maxbackups: 5 + resource.url: http://host.tld + state: + api_token: ${SECRET_0} + batch_size: 1000 + tags: + - forwarded + - sentinel_one-threat_event + type: cel + use_output: default +output_permissions: + default: + _elastic_agent_checks: + cluster: + - monitor + _elastic_agent_monitoring: + indices: [] + uuid-for-permissions-on-related-indices: + indices: + - names: + - logs-sentinel_one.threat_event-ep + privileges: + - auto_configure + - create_doc +secret_references: + - {} diff --git a/packages/sentinel_one/data_stream/threat_event/_dev/test/policy/test-default.yml b/packages/sentinel_one/data_stream/threat_event/_dev/test/policy/test-default.yml new file mode 100644 index 00000000000..e7e4437e204 --- /dev/null +++ b/packages/sentinel_one/data_stream/threat_event/_dev/test/policy/test-default.yml @@ -0,0 +1,13 @@ +vars: + url: http://host.tld + api_token: test_api_token +data_stream: + vars: + interval: 24h + batch_size: 1000 + enable_request_tracer: false + preserve_original_event: false + http_client_timeout: 30s + tags: + - forwarded + - sentinel_one-threat_event diff --git a/packages/sentinel_one/data_stream/threat_event/_dev/test/system/test-default-config.yml b/packages/sentinel_one/data_stream/threat_event/_dev/test/system/test-default-config.yml new file mode 100644 index 00000000000..15e4f63bdeb --- /dev/null +++ b/packages/sentinel_one/data_stream/threat_event/_dev/test/system/test-default-config.yml @@ -0,0 +1,12 @@ +input: cel +service: sentinel_one +vars: + url: http://{{Hostname}}:{{Port}} + api_token: xxxx +data_stream: + vars: + batch_size: 2 + preserve_original_event: true + preserve_duplicate_custom_fields: true +assert: + hit_count: 4 diff --git a/packages/sentinel_one/data_stream/threat_event/agent/stream/cel.yml.hbs b/packages/sentinel_one/data_stream/threat_event/agent/stream/cel.yml.hbs new file mode 100644 index 00000000000..5342adbd0c1 --- /dev/null +++ b/packages/sentinel_one/data_stream/threat_event/agent/stream/cel.yml.hbs @@ -0,0 +1,156 @@ +config_version: 2 +interval: {{interval}} +resource.tracer: + enabled: {{enable_request_tracer}} + filename: "../../logs/cel/http-request-trace-*.ndjson" + maxbackups: 5 +{{#if proxy_url}} +resource.proxy_url: {{proxy_url}} +{{/if}} +{{#if ssl}} +resource.ssl: {{ssl}} +{{/if}} +{{#if http_client_timeout}} +resource.timeout: {{http_client_timeout}} +{{/if}} +resource.url: {{url}} +state: + api_token: {{api_token}} + batch_size: {{batch_size}} +{{#if site_ids }} + site_ids: !!str {{site_ids}} +{{/if}} +redact: + fields: + - api_token +program: |- + ( + (has(state.?worklist.data) && size(state.worklist.data) > 0) ? + state + : + state.with( + request( + "GET", + state.url.trim_right("/") + "/web/api/v2.1/threats?" + { + "skipCount": ["true"], + "limit": [string(state.batch_size)], + ?"siteIds": state.?site_ids.optMap(v, [string(v)]), + ?"cursor": state.?next_page.token.optMap(v, [v]), + }.format_query() + ).with( + { + "Header": { + "Authorization": ["ApiToken " + state.api_token], + }, + } + ).do_request().as(resp, (resp.StatusCode == 200) ? + resp.Body.decode_json().as(body, + { + "worklist": body, + "next_page": { + ?"token": (body.?pagination.nextCursor.orValue(null) != null) ? optional.of(body.pagination.nextCursor) : optional.none(), + }, + "fetch_more": body.?pagination.nextCursor.orValue(null) != null, + } + ) + : + { + "events": { + "error": { + "code": string(resp.StatusCode), + "id": string(resp.Status), + "message": "GET " + state.url.trim_right("/") + "/web/api/v2.1/threats: " + ( + (size(resp.Body) != 0) ? + string(resp.Body) + : + string(resp.Status) + " (" + string(resp.StatusCode) + ")" + ), + }, + }, + "want_more": false, + "offset": 0, + } + ) + ) + ).as(state, + state.with( + !has(state.worklist) ? // Exit early due to GET failure. + state + : (has(state.worklist.data) && size(state.worklist.data) > 0) ? + request( + "GET", + state.url.trim_right("/") + "/web/api/v2.1/threats/" + string(state.worklist.data[0].id) + "/explore/events?" + { + "skipCount": ["true"], + "limit": [string(state.batch_size)], + ?"cursor": state.?next_chain.token.optMap(v, [v]), + }.format_query() + ).with( + { + "Header": { + "Authorization": ["ApiToken " + state.api_token], + }, + } + ).do_request().as(resp, (resp.StatusCode == 200) ? + resp.Body.decode_json().as(body, + { + "events": (has(body.data) && body.data.size() > 0) ? + body.data.map(e, + { + "message": e.encode_json(), + } + ) + : + [{"message": "retry"}], + "next_chain": { + ?"token": (body.?pagination.nextCursor.orValue(null) != null) ? optional.of(body.pagination.nextCursor) : optional.none(), + }, + "worklist": { + "data": (body.?pagination.nextCursor.orValue(null) != null) ? state.worklist.data : tail(state.worklist.data), + }, + "want_more": state.?fetch_more.orValue(false) ? + state.fetch_more + : + size(state.worklist.data) > 1 || (body.?pagination.nextCursor.orValue(null) != null), + } + ) + : + { + "events": { + "error": { + "code": string(resp.StatusCode), + "id": string(resp.Status), + "message": "GET " + state.url.trim_right("/") + "/web/api/v2.1/threats/" + string(state.worklist.data[0].id) + "/explore/events: " + ( + (size(resp.Body) != 0) ? + string(resp.Body) + : + string(resp.Status) + " (" + string(resp.StatusCode) + ")" + ), + }, + }, + "want_more": false, + } + ) + : + { + "events": [], + "want_more": false, + } + ) + ) +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#if preserve_duplicate_custom_fields}} + - preserve_duplicate_custom_fields +{{/if}} +{{#each tags as |tag|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +{{#if processors}} +processors: +{{processors}} +{{/if}} diff --git a/packages/sentinel_one/data_stream/threat_event/elasticsearch/ilm/default_policy.json b/packages/sentinel_one/data_stream/threat_event/elasticsearch/ilm/default_policy.json new file mode 100644 index 00000000000..24bbfc79405 --- /dev/null +++ b/packages/sentinel_one/data_stream/threat_event/elasticsearch/ilm/default_policy.json @@ -0,0 +1,20 @@ +{ + "policy": { + "phases": { + "hot": { + "actions": { + "rollover": { + "max_age": "30d", + "max_primary_shard_size": "50gb" + } + } + }, + "delete": { + "min_age": "30d", + "actions": { + "delete": {} + } + } + } + } +} diff --git a/packages/sentinel_one/data_stream/threat_event/elasticsearch/ingest_pipeline/default.yml b/packages/sentinel_one/data_stream/threat_event/elasticsearch/ingest_pipeline/default.yml new file mode 100644 index 00000000000..75502a61ee3 --- /dev/null +++ b/packages/sentinel_one/data_stream/threat_event/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,889 @@ +--- +description: Pipeline for processing threat_event logs. +processors: + - drop: + description: Ignore retry placeholder message. + if: ctx.message == "retry" + - set: + field: ecs.version + tag: set_ecs_version + value: 8.17.0 + - terminate: + tag: data_collection_error + if: ctx.error?.message != null && ctx.message == null && ctx.event?.original == null + description: error message set and no data to process. + - set: + field: event.kind + tag: set_event_kind + value: event + - rename: + field: message + tag: rename_message_to_event_original + target_field: event.original + ignore_missing: true + description: Renames the original `message` field to `event.original` to store a copy of the original message. The `event.original` field is not touched if the document already has one; it may happen when Logstash sends the document. + if: ctx.event?.original == null + - remove: + field: message + tag: remove_message + ignore_missing: true + description: The `message` field is no longer required if the document has an `event.original` field. + if: ctx.event?.original != null + - remove: + field: + - organization + - division + - team + ignore_missing: true + if: ctx.organization instanceof String && ctx.division instanceof String && ctx.team instanceof String + tag: remove_agentless_tags + description: >- + Removes the fields added by Agentless as metadata, + as they can collide with ECS fields. + - json: + field: event.original + tag: json_event_original + target_field: json + - rename: + field: json.id + tag: rename_id + target_field: sentinel_one.threat_event.id + ignore_missing: true + - rename: + field: json.objectType + tag: rename_objectType + target_field: sentinel_one.threat_event.object_type + ignore_missing: true + - date: + field: json.createdAt + tag: date_createdAt + target_field: sentinel_one.threat_event.created_at + formats: + - ISO8601 + if: ctx.json?.createdAt != null && ctx.json.createdAt != '' + on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - rename: + field: json.processName + tag: rename_processName + target_field: sentinel_one.threat_event.process.name + ignore_missing: true + - rename: + field: json.agentName + tag: rename_agentName + target_field: sentinel_one.threat_event.agent.name + ignore_missing: true + - rename: + field: json.agentGroupId + tag: rename_agentGroupId + target_field: sentinel_one.threat_event.agent.group_id + ignore_missing: true + - rename: + field: json.agentId + tag: rename_agentId + target_field: sentinel_one.threat_event.agent.id + ignore_missing: true + - convert: + field: json.agentIsActive + tag: convert_agentIsActive_to_boolean + target_field: sentinel_one.threat_event.agent.is_active + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - convert: + field: json.agentIsDecommissioned + tag: convert_agentIsDecommissioned_to_boolean + target_field: sentinel_one.threat_event.agent.is_decommissioned + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - rename: + field: json.agentMachineType + tag: rename_agentMachineType + target_field: sentinel_one.threat_event.agent.machine_type + ignore_missing: true + - rename: + field: json.agentNetworkStatus + tag: rename_agentNetworkStatus + target_field: sentinel_one.threat_event.agent.network_status + ignore_missing: true + - rename: + field: json.agentOs + tag: rename_agentOs + target_field: sentinel_one.threat_event.agent.os + ignore_missing: true + - rename: + field: json.agentVersion + tag: rename_agentVersion + target_field: sentinel_one.threat_event.agent.version + ignore_missing: true + - rename: + field: json.agentUuid + tag: rename_agentUuid + target_field: sentinel_one.threat_event.agent.uuid + ignore_missing: true + - rename: + field: json.siteId + tag: rename_siteId + target_field: sentinel_one.threat_event.site.id + ignore_missing: true + - rename: + field: json.siteName + tag: rename_siteName + target_field: sentinel_one.threat_event.site.name + ignore_missing: true + - rename: + field: json.pid + tag: rename_pid + target_field: sentinel_one.threat_event.pid + ignore_missing: true + - convert: + field: json.srcIp + tag: convert_srcIp_to_ip + target_field: sentinel_one.threat_event.src.ip + type: ip + if: ctx.json?.srcIp != '' + ignore_missing: true + on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - convert: + field: json.srcPort + tag: convert_srcPort_to_long + target_field: sentinel_one.threat_event.src.port + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - convert: + field: json.dstIp + tag: convert_dstIp_to_ip + target_field: sentinel_one.threat_event.dst.ip + type: ip + if: ctx.json?.dstIp != '' + ignore_missing: true + on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - convert: + field: json.dstPort + tag: convert_dstPort_to_long + target_field: sentinel_one.threat_event.dst.port + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - rename: + field: json.fileSha1 + tag: rename_fileSha1 + target_field: sentinel_one.threat_event.file.sha1 + ignore_missing: true + - rename: + field: json.fileSha256 + tag: rename_fileSha256 + target_field: sentinel_one.threat_event.file.sha256 + ignore_missing: true + - rename: + field: json.fileMd5 + tag: rename_fileMd5 + target_field: sentinel_one.threat_event.file.md5 + ignore_missing: true + - rename: + field: json.oldFileSha1 + tag: rename_oldFileSha1 + target_field: sentinel_one.threat_event.old_file.sha1 + ignore_missing: true + - rename: + field: json.oldFileSha256 + tag: rename_oldFileSha256 + target_field: sentinel_one.threat_event.old_file.sha256 + ignore_missing: true + - rename: + field: json.oldFileMd5 + tag: rename_oldFileMd5 + target_field: sentinel_one.threat_event.old_file.md5 + ignore_missing: true + - rename: + field: json.signatureSignedInvalidReason + tag: rename_signatureSignedInvalidReason + target_field: sentinel_one.threat_event.signature_signed_invalid_reason + ignore_missing: true + - rename: + field: json.verifiedStatus + tag: rename_verifiedStatus + target_field: sentinel_one.threat_event.verified_status + ignore_missing: true + - rename: + field: json.signedStatus + tag: rename_signedStatus + target_field: sentinel_one.threat_event.signed_status + ignore_missing: true + - rename: + field: json.sha256 + tag: rename_sha256 + target_field: sentinel_one.threat_event.sha256 + ignore_missing: true + - rename: + field: json.sha1 + tag: rename_sha1 + target_field: sentinel_one.threat_event.sha1 + ignore_missing: true + - rename: + field: json.md5 + tag: rename_md5 + target_field: sentinel_one.threat_event.md5 + ignore_missing: true + - rename: + field: json.fileFullName + tag: rename_fileFullName + target_field: sentinel_one.threat_event.file.full_name + ignore_missing: true + - rename: + field: json.oldFileName + tag: rename_oldFileName + target_field: sentinel_one.threat_event.old_file.name + ignore_missing: true + - rename: + field: json.tid + tag: rename_tid + target_field: sentinel_one.threat_event.tid + ignore_missing: true + - rename: + field: json.rpid + tag: rename_rpid + target_field: sentinel_one.threat_event.rpid + ignore_missing: true + - rename: + field: json.dnsRequest + tag: rename_dnsRequest + target_field: sentinel_one.threat_event.dns_request + ignore_missing: true + - rename: + field: json.dnsResponse + tag: rename_dnsResponse + target_field: sentinel_one.threat_event.dns_response + ignore_missing: true + - rename: + field: json.processCmd + tag: rename_processCmd + target_field: sentinel_one.threat_event.process.cmd + ignore_missing: true + - rename: + field: json.processGroupId + tag: rename_processGroupId + target_field: sentinel_one.threat_event.process.group_id + ignore_missing: true + - rename: + field: json.processImagePath + tag: rename_processImagePath + target_field: sentinel_one.threat_event.process.image_path + ignore_missing: true + - rename: + field: json.processUserName + tag: rename_processUserName + target_field: sentinel_one.threat_event.process.user_name + ignore_missing: true + - rename: + field: json.processImageSha1Hash + tag: rename_processImageSha1Hash + target_field: sentinel_one.threat_event.process.image_sha1_hash + ignore_missing: true + - rename: + field: json.processUniqueKey + tag: rename_processUniqueKey + target_field: sentinel_one.threat_event.process.unique_key + ignore_missing: true + - date: + field: json.processStartTime + tag: date_processStartTime + target_field: sentinel_one.threat_event.process.start_time + formats: + - ISO8601 + if: ctx.json?.processStartTime != null && ctx.json.processStartTime != '' + on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - rename: + field: json.processSubSystem + tag: rename_processSubSystem + target_field: sentinel_one.threat_event.process.sub_system + ignore_missing: true + - rename: + field: json.processSessionId + tag: rename_processSessionId + target_field: sentinel_one.threat_event.process.session_id + ignore_missing: true + - rename: + field: json.processIntegrityLevel + tag: rename_processIntegrityLevel + target_field: sentinel_one.threat_event.process.integrity_level + ignore_missing: true + - rename: + field: json.processDisplayName + tag: rename_processDisplayName + target_field: sentinel_one.threat_event.process.display_name + ignore_missing: true + - rename: + field: json.processIsWow64 + tag: rename_processIsWow64 + target_field: sentinel_one.threat_event.process.is_wow64 + ignore_missing: true + - rename: + field: json.processIsRedirectedCommandProcessor + tag: rename_processIsRedirectedCommandProcessor + target_field: sentinel_one.threat_event.process.is_redirected_command_processor + ignore_missing: true + - rename: + field: json.processRoot + tag: rename_processRoot + target_field: sentinel_one.threat_event.process.root + ignore_missing: true + - rename: + field: json.parentProcessName + tag: rename_parentProcessName + target_field: sentinel_one.threat_event.parent_process.name + ignore_missing: true + - rename: + field: json.parentPid + tag: rename_parentPid + target_field: sentinel_one.threat_event.parent_pid + ignore_missing: true + - rename: + field: json.parentProcessUniqueKey + tag: rename_parentProcessUniqueKey + target_field: sentinel_one.threat_event.parent_process.unique_key + ignore_missing: true + - rename: + field: json.networkSource + tag: rename_networkSource + target_field: sentinel_one.threat_event.network.source + ignore_missing: true + - rename: + field: json.networkUrl + tag: rename_networkUrl + target_field: sentinel_one.threat_event.network.url + ignore_missing: true + - rename: + field: json.networkMethod + tag: rename_networkMethod + target_field: sentinel_one.threat_event.network.method + ignore_missing: true + - rename: + field: json.direction + tag: rename_direction + target_field: sentinel_one.threat_event.direction + ignore_missing: true + - rename: + field: json.eventType + tag: rename_eventType + target_field: sentinel_one.threat_event.event_type + ignore_missing: true + - rename: + field: json.registryPath + tag: rename_registryPath + target_field: sentinel_one.threat_event.registry.path + ignore_missing: true + - rename: + field: json.registryId + tag: rename_registryId + target_field: sentinel_one.threat_event.registry.id + ignore_missing: true + - rename: + field: json.registryClassification + tag: rename_registryClassification + target_field: sentinel_one.threat_event.registry.classification + ignore_missing: true + - rename: + field: json.taskName + tag: rename_taskName + target_field: sentinel_one.threat_event.task_name + ignore_missing: true + - rename: + field: json.taskPath + tag: rename_taskPath + target_field: sentinel_one.threat_event.task_path + ignore_missing: true + - rename: + field: json.trueContext + tag: rename_trueContext + target_field: sentinel_one.threat_event.true_context + ignore_missing: true + - rename: + field: json.storyline + tag: rename_storyline + target_field: sentinel_one.threat_event.storyline + ignore_missing: true + - rename: + field: json.fileId + tag: rename_fileId + target_field: sentinel_one.threat_event.file.id + ignore_missing: true + - rename: + field: json.loginsUserName + tag: rename_loginsUserName + target_field: sentinel_one.threat_event.logins_user_name + ignore_missing: true + - append: + field: related.user + tag: append_logins_user_name_into_related_user + value: '{{{sentinel_one.threat_event.logins_user_name}}}' + if: ctx.sentinel_one?.threat_event?.logins_user_name != null + allow_duplicates: false + - rename: + field: json.loginsBaseType + tag: rename_loginsBaseType + target_field: sentinel_one.threat_event.logins_base_type + ignore_missing: true + - rename: + field: json.indicatorCategory + tag: rename_indicatorCategory + target_field: sentinel_one.threat_event.indicator.category + ignore_missing: true + - rename: + field: json.indicatorDescription + tag: rename_indicatorDescription + target_field: sentinel_one.threat_event.indicator.description + ignore_missing: true + - rename: + field: json.indicatorMetadata + tag: rename_indicatorMetadata + target_field: sentinel_one.threat_event.indicator.metadata + ignore_missing: true + - rename: + field: json.indicatorName + tag: rename_indicatorName + target_field: sentinel_one.threat_event.indicator.name + ignore_missing: true + - rename: + field: json.connectionStatus + tag: rename_connectionStatus + target_field: sentinel_one.threat_event.connection_status + ignore_missing: true + - rename: + field: json.publisher + tag: rename_publisher + target_field: sentinel_one.threat_event.publisher + ignore_missing: true + - convert: + field: json.agentInfected + tag: convert_agentInfected_to_boolean + target_field: sentinel_one.threat_event.agent.infected + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - rename: + field: json.agentDomain + tag: rename_agentDomain + target_field: sentinel_one.threat_event.agent.domain + ignore_missing: true + - convert: + field: json.agentIp + tag: convert_agentIp_to_ip + target_field: sentinel_one.threat_event.agent.ip + type: ip + if: ctx.json?.agentIp != '' + ignore_missing: true + on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - append: + field: related.ip + tag: append_agent_ip_into_related_ip + value: '{{{sentinel_one.threat_event.agent.ip}}}' + if: ctx.sentinel_one?.threat_event?.agent?.ip != null + allow_duplicates: false + - rename: + field: json.user + tag: rename_user + target_field: sentinel_one.threat_event.user + ignore_missing: true + - convert: + field: json.relatedToThreat + tag: convert_relatedToThreat_to_boolean + target_field: sentinel_one.threat_event.related_to_threat + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - rename: + field: json.threatStatus + tag: rename_threatStatus + target_field: sentinel_one.threat_event.threat_status + ignore_missing: true + - rename: + field: json.protocol + tag: rename_protocol + target_field: sentinel_one.threat_event.protocol + ignore_missing: true + - convert: + field: json.hasActiveContent + tag: convert_hasActiveContent_to_boolean + target_field: sentinel_one.threat_event.has_active_content + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - rename: + field: json.activeContentFileId + tag: rename_activeContentFileId + target_field: sentinel_one.threat_event.active_content.file_id + ignore_missing: true + - rename: + field: json.activeContentPath + tag: rename_activeContentPath + target_field: sentinel_one.threat_event.active_content.path + ignore_missing: true + - rename: + field: json.activeContentHash + tag: rename_activeContentHash + target_field: sentinel_one.threat_event.active_content.hash + ignore_missing: true + - convert: + field: json.processIsMalicious + tag: convert_processIsMalicious_to_boolean + target_field: sentinel_one.threat_event.process.is_malicious + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - rename: + field: json.parentProcessGroupId + tag: rename_parentProcessGroupId + target_field: sentinel_one.threat_event.parent_process.group_id + ignore_missing: true + - convert: + field: json.parentProcessIsMalicious + tag: convert_parentProcessIsMalicious_to_boolean + target_field: sentinel_one.threat_event.parent_process.is_malicious + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - rename: + field: json.fileSize + tag: rename_fileSize + target_field: sentinel_one.threat_event.file.size + ignore_missing: true + - rename: + field: json.fileType + tag: rename_fileType + target_field: sentinel_one.threat_event.file.type + ignore_missing: true + - set: + field: '@timestamp' + tag: set_timestamp + copy_from: sentinel_one.threat_event.created_at + ignore_empty_value: true + - set: + field: event.id + tag: set_event_id + copy_from: sentinel_one.threat_event.id + ignore_empty_value: true + - set: + field: event.created + tag: set_event_created + copy_from: sentinel_one.threat_event.created_at + ignore_empty_value: true + - set: + field: process.name + tag: set_process_name + copy_from: sentinel_one.threat_event.process.name + ignore_empty_value: true + - convert: + field: sentinel_one.threat_event.pid + tag: convert_event_pid_to_long + target_field: process.pid + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - set: + field: source.ip + tag: set_source_ip + copy_from: sentinel_one.threat_event.src.ip + ignore_empty_value: true + - append: + field: related.ip + tag: append_source_ip_into_related_ip + value: '{{{source.ip}}}' + if: ctx.source?.ip != null + allow_duplicates: false + - set: + field: source.port + tag: set_source_port + copy_from: sentinel_one.threat_event.src.port + ignore_empty_value: true + - set: + field: destination.ip + tag: set_destination_ip + copy_from: sentinel_one.threat_event.dst.ip + ignore_empty_value: true + - append: + field: related.ip + tag: append_destination_ip_into_related_ip + value: '{{{destination.ip}}}' + if: ctx.destination?.ip != null + allow_duplicates: false + - set: + field: destination.port + tag: set_destination_port + copy_from: sentinel_one.threat_event.dst.port + ignore_empty_value: true + - set: + field: file.hash.sha1 + tag: set_file_hash_sha1 + copy_from: sentinel_one.threat_event.file.sha1 + ignore_empty_value: true + - append: + field: related.hash + tag: append_file_hash_sha1_into_related_hash + value: '{{{file.hash.sha1}}}' + if: ctx.file?.hash?.sha1 != null + allow_duplicates: false + - set: + field: file.hash.sha256 + tag: set_file_hash_sha256 + copy_from: sentinel_one.threat_event.file.sha256 + ignore_empty_value: true + - append: + field: related.hash + tag: append_file_hash_sha256_into_related_hash + value: '{{{file.hash.sha256}}}' + if: ctx.file?.hash?.sha256 != null + allow_duplicates: false + - set: + field: file.hash.md5 + tag: set_file_hash_md5 + copy_from: sentinel_one.threat_event.file.md5 + ignore_empty_value: true + - append: + field: related.hash + tag: append_file_hash_md5_into_related_hash + value: '{{{file.hash.md5}}}' + if: ctx.file?.hash?.md5 != null + allow_duplicates: false + - set: + field: file.name + tag: set_file_name + copy_from: sentinel_one.threat_event.file.full_name + ignore_empty_value: true + - set: + field: process.command_line + tag: set_process_command_line + copy_from: sentinel_one.threat_event.process.cmd + ignore_empty_value: true + - set: + field: process.executable + tag: set_process_executable + copy_from: sentinel_one.threat_event.process.image_path + ignore_empty_value: true + - set: + field: process.user.name + tag: set_process_user_name + copy_from: sentinel_one.threat_event.process.user_name + ignore_empty_value: true + - append: + field: related.user + tag: append_process_user_name_into_related_user + value: '{{{process.user.name}}}' + if: ctx.process?.user?.name != null + allow_duplicates: false + - set: + field: process.hash.sha1 + tag: set_process_hash_sha1 + copy_from: sentinel_one.threat_event.process.image_sha1_hash + ignore_empty_value: true + - append: + field: related.hash + tag: append_process_hash_sha1_into_related_hash + value: '{{{process.hash.sha1}}}' + if: ctx.process?.hash?.sha1 != null + allow_duplicates: false + - set: + field: process.start + tag: set_process_start + copy_from: sentinel_one.threat_event.process.start_time + ignore_empty_value: true + - set: + field: process.parent.name + tag: set_process_parent_name + copy_from: sentinel_one.threat_event.parent_process.name + ignore_empty_value: true + - convert: + field: sentinel_one.threat_event.parent_pid + tag: convert_event_parent_pid_to_long + target_field: process.parent.pid + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - set: + field: url.full + tag: set_url_full + copy_from: sentinel_one.threat_event.network.url + ignore_empty_value: true + - set: + field: registry.path + tag: set_registry_path + copy_from: sentinel_one.threat_event.registry.path + ignore_empty_value: true + - set: + field: threat.indicator.description + tag: set_threat_indicator_description + copy_from: sentinel_one.threat_event.indicator.description + ignore_empty_value: true + - set: + field: threat.indicator.name + tag: set_threat_indicator_name + copy_from: sentinel_one.threat_event.indicator.name + ignore_empty_value: true + - set: + field: user.name + tag: set_user_name + copy_from: sentinel_one.threat_event.user + ignore_empty_value: true + - append: + field: related.user + tag: append_user_name_into_related_user + value: '{{{user.name}}}' + if: ctx.user?.name != null + allow_duplicates: false + - lowercase: + field: sentinel_one.threat_event.protocol + tag: lowercase_network_transport + target_field: network.transport + ignore_missing: true + - convert: + field: sentinel_one.threat_event.file.size + tag: convert_file_size_to_long + target_field: file.size + type: long + if: ctx.sentinel_one?.threat_event?.file.size != '' + ignore_missing: true + on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - set: + field: file.type + tag: set_file_type + copy_from: sentinel_one.threat_event.file.type + ignore_empty_value: true + - remove: + field: + - sentinel_one.threat_event.created_at + - sentinel_one.threat_event.dst.ip + - sentinel_one.threat_event.dst.port + - sentinel_one.threat_event.file.full_name + - sentinel_one.threat_event.file.md5 + - sentinel_one.threat_event.file.sha1 + - sentinel_one.threat_event.file.sha256 + - sentinel_one.threat_event.file.size + - sentinel_one.threat_event.file.type + - sentinel_one.threat_event.id + - sentinel_one.threat_event.indicator.description + - sentinel_one.threat_event.indicator.name + - sentinel_one.threat_event.network.url + - sentinel_one.threat_event.parent_pid + - sentinel_one.threat_event.parent_process.name + - sentinel_one.threat_event.pid + - sentinel_one.threat_event.process.cmd + - sentinel_one.threat_event.process.image_path + - sentinel_one.threat_event.process.image_sha1_hash + - sentinel_one.threat_event.process.name + - sentinel_one.threat_event.process.start_time + - sentinel_one.threat_event.process.user_name + - sentinel_one.threat_event.protocol + - sentinel_one.threat_event.registry.path + - sentinel_one.threat_event.src.ip + - sentinel_one.threat_event.src.port + - sentinel_one.threat_event.user + tag: remove_custom_duplicate_fields + ignore_missing: true + if: ctx.tags == null || !(ctx.tags.contains('preserve_duplicate_custom_fields')) + - remove: + field: json + tag: remove_json + ignore_missing: true + - script: + tag: script_to_drop_null_values + lang: painless + description: This script processor iterates over the whole document to remove fields with null values. + source: |- + void handleMap(Map map) { + map.values().removeIf(v -> { + if (v instanceof Map) { + handleMap(v); + } else if (v instanceof List) { + handleList(v); + } + return v == null || v == '' || (v instanceof Map && v.size() == 0) || (v instanceof List && v.size() == 0) + }); + } + void handleList(List list) { + list.removeIf(v -> { + if (v instanceof Map) { + handleMap(v); + } else if (v instanceof List) { + handleList(v); + } + return v == null || v == '' || (v instanceof Map && v.size() == 0) || (v instanceof List && v.size() == 0) + }); + } + handleMap(ctx); + - set: + field: event.kind + tag: set_pipeline_error_into_event_kind + value: pipeline_error + if: ctx.error?.message != null + - append: + field: tags + value: preserve_original_event + allow_duplicates: false + if: ctx.error?.message != null +on_failure: + - append: + field: error.message + value: |- + Processor '{{{ _ingest.on_failure_processor_type }}}' + {{{#_ingest.on_failure_processor_tag}}}with tag '{{{ _ingest.on_failure_processor_tag }}}' + {{{/_ingest.on_failure_processor_tag}}}failed with message '{{{ _ingest.on_failure_message }}}' + - set: + field: event.kind + tag: set_pipeline_error_to_event_kind + value: pipeline_error + - append: + field: tags + value: preserve_original_event + allow_duplicates: false diff --git a/packages/sentinel_one/data_stream/threat_event/fields/base-fields.yml b/packages/sentinel_one/data_stream/threat_event/fields/base-fields.yml new file mode 100644 index 00000000000..b70a66fc311 --- /dev/null +++ b/packages/sentinel_one/data_stream/threat_event/fields/base-fields.yml @@ -0,0 +1,16 @@ +- name: data_stream.type + external: ecs +- name: data_stream.dataset + external: ecs +- name: data_stream.namespace + external: ecs +- name: event.module + type: constant_keyword + external: ecs + value: sentinel_one +- name: event.dataset + type: constant_keyword + external: ecs + value: sentinel_one.threat_event +- name: '@timestamp' + external: ecs diff --git a/packages/sentinel_one/data_stream/threat_event/fields/beats.yml b/packages/sentinel_one/data_stream/threat_event/fields/beats.yml new file mode 100644 index 00000000000..4084f1dc7f5 --- /dev/null +++ b/packages/sentinel_one/data_stream/threat_event/fields/beats.yml @@ -0,0 +1,6 @@ +- name: input.type + type: keyword + description: Type of filebeat input. +- name: log.offset + type: long + description: Log offset. diff --git a/packages/sentinel_one/data_stream/threat_event/fields/fields.yml b/packages/sentinel_one/data_stream/threat_event/fields/fields.yml new file mode 100644 index 00000000000..6e0f674146a --- /dev/null +++ b/packages/sentinel_one/data_stream/threat_event/fields/fields.yml @@ -0,0 +1,228 @@ +- name: sentinel_one + type: group + fields: + - name: threat_event + type: group + fields: + - name: id + type: keyword + - name: object_type + type: keyword + - name: created_at + type: date + - name: process + type: group + fields: + - name: name + type: keyword + - name: cmd + type: keyword + - name: group_id + type: keyword + - name: image_path + type: keyword + - name: user_name + type: keyword + - name: image_sha1_hash + type: keyword + - name: unique_key + type: keyword + - name: start_time + type: date + - name: sub_system + type: keyword + - name: session_id + type: keyword + - name: integrity_level + type: keyword + - name: display_name + type: keyword + - name: is_wow64 + type: keyword + - name: is_redirected_command_processor + type: keyword + - name: root + type: keyword + - name: is_malicious + type: boolean + - name: agent + type: group + fields: + - name: name + type: keyword + - name: group_id + type: keyword + - name: id + type: keyword + - name: is_active + type: boolean + - name: is_decommissioned + type: boolean + - name: machine_type + type: keyword + - name: network_status + type: keyword + - name: os + type: keyword + - name: version + type: keyword + - name: uuid + type: keyword + - name: infected + type: boolean + - name: domain + type: keyword + - name: ip + type: ip + - name: site + type: group + fields: + - name: id + type: keyword + - name: name + type: keyword + - name: pid + type: keyword + - name: src + type: group + fields: + - name: ip + type: ip + - name: port + type: long + - name: dst + type: group + fields: + - name: ip + type: ip + - name: port + type: long + - name: file + type: group + fields: + - name: sha1 + type: keyword + - name: sha256 + type: keyword + - name: md5 + type: keyword + - name: full_name + type: keyword + - name: id + type: keyword + - name: size + type: keyword + - name: type + type: keyword + - name: old_file + type: group + fields: + - name: sha1 + type: keyword + - name: sha256 + type: keyword + - name: md5 + type: keyword + - name: name + type: keyword + - name: signature_signed_invalid_reason + type: keyword + - name: verified_status + type: keyword + - name: signed_status + type: keyword + - name: sha256 + type: keyword + - name: sha1 + type: keyword + - name: md5 + type: keyword + - name: tid + type: keyword + - name: rpid + type: keyword + - name: dns_request + type: keyword + - name: dns_response + type: keyword + - name: parent_process + type: group + fields: + - name: name + type: keyword + - name: unique_key + type: keyword + - name: group_id + type: keyword + - name: is_malicious + type: boolean + - name: parent_pid + type: keyword + - name: network + type: group + fields: + - name: source + type: keyword + - name: url + type: keyword + - name: method + type: keyword + - name: direction + type: keyword + - name: event_type + type: keyword + - name: registry + type: group + fields: + - name: path + type: keyword + - name: id + type: keyword + - name: classification + type: keyword + - name: task_name + type: keyword + - name: task_path + type: keyword + - name: true_context + type: keyword + - name: storyline + type: keyword + - name: logins_user_name + type: keyword + - name: logins_base_type + type: keyword + - name: indicator + type: group + fields: + - name: category + type: keyword + - name: description + type: keyword + - name: metadata + type: keyword + - name: name + type: keyword + - name: connection_status + type: keyword + - name: publisher + type: keyword + - name: user + type: keyword + - name: related_to_threat + type: boolean + - name: threat_status + type: keyword + - name: protocol + type: keyword + - name: has_active_content + type: boolean + - name: active_content + type: group + fields: + - name: file_id + type: keyword + - name: path + type: keyword + - name: hash + type: keyword diff --git a/packages/sentinel_one/data_stream/threat_event/lifecycle.yml b/packages/sentinel_one/data_stream/threat_event/lifecycle.yml new file mode 100644 index 00000000000..b56a81e81d7 --- /dev/null +++ b/packages/sentinel_one/data_stream/threat_event/lifecycle.yml @@ -0,0 +1 @@ +data_retention: "30d" diff --git a/packages/sentinel_one/data_stream/threat_event/manifest.yml b/packages/sentinel_one/data_stream/threat_event/manifest.yml new file mode 100644 index 00000000000..0ede5556415 --- /dev/null +++ b/packages/sentinel_one/data_stream/threat_event/manifest.yml @@ -0,0 +1,81 @@ +title: Collect Threat Event logs from SentinelOne +type: logs +ilm_policy: logs-sentinel_one.threat_event-default_policy +streams: + - input: cel + title: Threat Event logs + description: Collect threat event logs from SentinelOne. + enabled: false + template_path: cel.yml.hbs + vars: + - name: interval + type: text + title: Interval + description: Duration between requests to the Sentinel One API. Supported units for this parameter are h/m/s. + default: 24h + multi: false + required: true + show_user: true + - name: batch_size + type: integer + title: Batch Size + description: Batch size for the response of the Sentinel One API. The maximum supported page size value is 1000. + default: 1000 + multi: false + required: true + show_user: false + - name: site_ids + type: text + title: Site IDs + multi: false + required: false + show_user: false + description: Comma separated list of Site IDs to filter by. Example - "225494730938493804,225494730938493915". + - name: http_client_timeout + type: text + title: HTTP Client Timeout + description: Duration before declaring that the HTTP client connection has timed out. Supported time units are ns, us, ms, s, m, h. + multi: false + required: true + show_user: false + default: 30s + - name: enable_request_tracer + type: bool + title: Enable request tracing + default: false + multi: false + required: false + show_user: false + description: The request tracer logs requests and responses to the agent's local file-system for debugging configurations. Enabling this request tracing compromises security and should only be used for debugging. See [documentation](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-cel.html#_resource_tracer_filename) for details. + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - sentinel_one-threat_event + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original`. + type: bool + multi: false + default: false + - name: preserve_duplicate_custom_fields + required: false + show_user: false + title: Preserve duplicate custom fields + description: Preserve sentinel_one.threat_event fields that were copied to Elastic Common Schema (ECS) fields. + type: bool + multi: false + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: >- + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. diff --git a/packages/sentinel_one/data_stream/threat_event/sample_event.json b/packages/sentinel_one/data_stream/threat_event/sample_event.json new file mode 100644 index 00000000000..ac10de66e7e --- /dev/null +++ b/packages/sentinel_one/data_stream/threat_event/sample_event.json @@ -0,0 +1,232 @@ +{ + "@timestamp": "2025-10-22T11:30:00.000Z", + "agent": { + "ephemeral_id": "cb480124-a03c-47cc-9451-f52e3e80bc47", + "id": "0d5383c7-da8f-4e33-a9c8-ea303876fbd9", + "name": "elastic-agent-26678", + "type": "filebeat", + "version": "8.18.7" + }, + "data_stream": { + "dataset": "sentinel_one.threat_event", + "namespace": "82630", + "type": "logs" + }, + "destination": { + "ip": "89.160.20.128", + "port": 443 + }, + "ecs": { + "version": "8.17.0" + }, + "elastic_agent": { + "id": "0d5383c7-da8f-4e33-a9c8-ea303876fbd9", + "snapshot": false, + "version": "8.18.7" + }, + "event": { + "agent_id_status": "verified", + "created": "2025-10-22T11:30:00.000Z", + "dataset": "sentinel_one.threat_event", + "id": "id_004", + "ingested": "2025-10-27T07:44:21Z", + "kind": "event", + "original": "{\"activeContentFileId\":\"fileid_004\",\"activeContentHash\":\"hash_004\",\"activeContentPath\":\"D:\\\\content\\\\file4\",\"agentDomain\":\"domain4\",\"agentGroupId\":\"group_04\",\"agentId\":\"agent_004\",\"agentInfected\":false,\"agentIp\":\"89.160.20.156\",\"agentIsActive\":true,\"agentIsDecommissioned\":false,\"agentMachineType\":\"x64\",\"agentName\":\"Agent_4\",\"agentNetworkStatus\":\"online\",\"agentOs\":\"Windows 10\",\"agentUuid\":\"uuid_004\",\"agentVersion\":\"1.3.0\",\"connectionStatus\":\"active\",\"createdAt\":\"2025-10-22T11:30:00Z\",\"direction\":\"outbound\",\"dnsRequest\":\"google.com\",\"dnsResponse\":\"8.8.8.8\",\"dstIp\":\"89.160.20.128\",\"dstPort\":443,\"eventType\":\"network\",\"fileFullName\":\"C:\\\\Program Files\\\\Chrome\\\\chrome.exe\",\"fileId\":\"file_004\",\"fileMd5\":\"md5_004\",\"fileSha1\":\"sha1_004\",\"fileSha256\":\"sha256_004\",\"fileSize\":\"4096\",\"fileType\":\"exe\",\"hasActiveContent\":false,\"id\":\"id_004\",\"indicatorCategory\":\"spyware\",\"indicatorDescription\":\"tracking software\",\"indicatorMetadata\":\"meta4\",\"indicatorName\":\"Spyware4\",\"loginsBaseType\":\"domain\",\"loginsUserName\":\"user_login4\",\"md5\":\"md5_sample4\",\"networkMethod\":\"GET\",\"networkSource\":\"WAN\",\"networkUrl\":\"https://google.com\",\"objectType\":\"process\",\"oldFileMd5\":\"old_md54\",\"oldFileName\":\"chrome_old.exe\",\"oldFileSha1\":\"old_sha14\",\"oldFileSha256\":\"old_sha2564\",\"parentPid\":\"4001\",\"parentProcessGroupId\":\"group_parent_04\",\"parentProcessIsMalicious\":false,\"parentProcessName\":\"explorer.exe\",\"parentProcessUniqueKey\":\"unique_parent_004\",\"pid\":\"4567\",\"processCmd\":\"chrome.exe --new-tab\",\"processDisplayName\":\"Google Chrome\",\"processGroupId\":\"group_04\",\"processImagePath\":\"C:\\\\Program Files\\\\Chrome\\\\chrome.exe\",\"processImageSha1Hash\":\"sha1_process4\",\"processIntegrityLevel\":\"medium\",\"processIsMalicious\":false,\"processIsRedirectedCommandProcessor\":\"false\",\"processIsWow64\":\"false\",\"processName\":\"chrome.exe\",\"processRoot\":\"C:\\\\\",\"processSessionId\":\"session_004\",\"processStartTime\":\"2025-10-22T11:00:00Z\",\"processSubSystem\":\"subsystem4\",\"processUniqueKey\":\"unique_004\",\"processUserName\":\"user4\",\"protocol\":\"TCP\",\"publisher\":\"Google\",\"registryClassification\":\"application\",\"registryId\":\"reg_004\",\"registryPath\":\"HKCU\\\\Software\\\\Test4\",\"relatedToThreat\":false,\"rpid\":\"rpid_004\",\"sha1\":\"sha1_sample4\",\"sha256\":\"sha256_sample4\",\"signatureSignedInvalidReason\":\"None\",\"signedStatus\":\"Signed\",\"siteId\":\"site_004\",\"siteName\":\"SiteD\",\"srcIp\":\"127.0.0.1\",\"srcPort\":34567,\"storyline\":\"storyline4\",\"taskName\":\"task4\",\"taskPath\":\"C:\\\\Tasks\\\\task4\",\"threatStatus\":\"clean\",\"tid\":\"tid_004\",\"trueContext\":\"context4\",\"user\":\"user4\",\"verifiedStatus\":\"Verified\"}" + }, + "file": { + "hash": { + "md5": "md5_004", + "sha1": "sha1_004", + "sha256": "sha256_004" + }, + "name": "C:\\Program Files\\Chrome\\chrome.exe", + "size": 4096, + "type": "exe" + }, + "input": { + "type": "cel" + }, + "network": { + "transport": "tcp" + }, + "process": { + "command_line": "chrome.exe --new-tab", + "executable": "C:\\Program Files\\Chrome\\chrome.exe", + "hash": { + "sha1": "sha1_process4" + }, + "name": "chrome.exe", + "parent": { + "name": "explorer.exe", + "pid": 4001 + }, + "pid": 4567, + "start": "2025-10-22T11:00:00.000Z", + "user": { + "name": "user4" + } + }, + "registry": { + "path": "HKCU\\Software\\Test4" + }, + "related": { + "hash": [ + "sha1_004", + "sha256_004", + "md5_004", + "sha1_process4" + ], + "ip": [ + "89.160.20.156", + "127.0.0.1", + "89.160.20.128" + ], + "user": [ + "user_login4", + "user4" + ] + }, + "sentinel_one": { + "threat_event": { + "active_content": { + "file_id": "fileid_004", + "hash": "hash_004", + "path": "D:\\content\\file4" + }, + "agent": { + "domain": "domain4", + "group_id": "group_04", + "id": "agent_004", + "infected": false, + "ip": "89.160.20.156", + "is_active": true, + "is_decommissioned": false, + "machine_type": "x64", + "name": "Agent_4", + "network_status": "online", + "os": "Windows 10", + "uuid": "uuid_004", + "version": "1.3.0" + }, + "connection_status": "active", + "created_at": "2025-10-22T11:30:00.000Z", + "direction": "outbound", + "dns_request": "google.com", + "dns_response": "8.8.8.8", + "dst": { + "ip": "89.160.20.128", + "port": 443 + }, + "event_type": "network", + "file": { + "full_name": "C:\\Program Files\\Chrome\\chrome.exe", + "id": "file_004", + "md5": "md5_004", + "sha1": "sha1_004", + "sha256": "sha256_004", + "size": "4096", + "type": "exe" + }, + "has_active_content": false, + "id": "id_004", + "indicator": { + "category": "spyware", + "description": "tracking software", + "metadata": "meta4", + "name": "Spyware4" + }, + "logins_base_type": "domain", + "logins_user_name": "user_login4", + "md5": "md5_sample4", + "network": { + "method": "GET", + "source": "WAN", + "url": "https://google.com" + }, + "object_type": "process", + "old_file": { + "md5": "old_md54", + "name": "chrome_old.exe", + "sha1": "old_sha14", + "sha256": "old_sha2564" + }, + "parent_pid": "4001", + "parent_process": { + "group_id": "group_parent_04", + "is_malicious": false, + "name": "explorer.exe", + "unique_key": "unique_parent_004" + }, + "pid": "4567", + "process": { + "cmd": "chrome.exe --new-tab", + "display_name": "Google Chrome", + "group_id": "group_04", + "image_path": "C:\\Program Files\\Chrome\\chrome.exe", + "image_sha1_hash": "sha1_process4", + "integrity_level": "medium", + "is_malicious": false, + "is_redirected_command_processor": "false", + "is_wow64": "false", + "name": "chrome.exe", + "root": "C:\\", + "session_id": "session_004", + "start_time": "2025-10-22T11:00:00.000Z", + "sub_system": "subsystem4", + "unique_key": "unique_004", + "user_name": "user4" + }, + "protocol": "TCP", + "publisher": "Google", + "registry": { + "classification": "application", + "id": "reg_004", + "path": "HKCU\\Software\\Test4" + }, + "related_to_threat": false, + "rpid": "rpid_004", + "sha1": "sha1_sample4", + "sha256": "sha256_sample4", + "signature_signed_invalid_reason": "None", + "signed_status": "Signed", + "site": { + "id": "site_004", + "name": "SiteD" + }, + "src": { + "ip": "127.0.0.1", + "port": 34567 + }, + "storyline": "storyline4", + "task_name": "task4", + "task_path": "C:\\Tasks\\task4", + "threat_status": "clean", + "tid": "tid_004", + "true_context": "context4", + "user": "user4", + "verified_status": "Verified" + } + }, + "source": { + "ip": "127.0.0.1", + "port": 34567 + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields", + "forwarded", + "sentinel_one-threat_event" + ], + "threat": { + "indicator": { + "description": "tracking software", + "name": "Spyware4" + } + }, + "url": { + "full": "https://google.com" + }, + "user": { + "name": "user4" + } +} diff --git a/packages/sentinel_one/docs/README.md b/packages/sentinel_one/docs/README.md index 96f18bc9714..3c65a1c247e 100644 --- a/packages/sentinel_one/docs/README.md +++ b/packages/sentinel_one/docs/README.md @@ -1,17 +1,36 @@ -# SentinelOne +# SentinelOne Integration for Elastic + +## Overview The [SentinelOne](https://www.sentinelone.com/) integration collects and parses data from SentinelOne REST APIs. This integration also offers the capability to perform response actions on SentinelOne hosts directly through the Elastic Security interface (introduced with v8.12.0). Additional configuration is required; for detailed guidance, refer to [documentation](https://www.elastic.co/guide/en/security/current/response-actions-config.html). -## Agentless Enabled Integration -Agentless integrations allow you to collect data without having to manage Elastic Agent in your cloud. They make manual agent deployment unnecessary, so you can focus on your data instead of the agent that collects it. For more information, refer to [Agentless integrations](https://www.elastic.co/guide/en/serverless/current/security-agentless-integrations.html) and the [Agentless integrations FAQ](https://www.elastic.co/guide/en/serverless/current/agentless-integration-troubleshooting.html). +### Compatibility -Agentless deployments are only supported in Elastic Serverless and Elastic Cloud environments. This functionality is in beta and is subject to change. Beta features are not subject to the support SLA of official GA features. +This module has been tested against `SentinelOne Management Console API version 2.1`. -## Compatibility +### How it works -This module has been tested against `SentinelOne Management Console API version 2.1`. +This integration periodically queries the SentinelOne REST API to retrieve Activity, Agent, Alert, Application, Application Risk, Group, Threat and Threat Event logs. + +## What data does this integration collect? + +This integration collects log messages of the following types: + +- `Activity`: Captures general actions or events occurring within the SentinelOne environment, such as policy updates or administrative operations. +- `Agent`: Provides details about endpoint agents, including their status, configuration, and activity on protected devices. +- `Alert`: Represents security notifications triggered by detected suspicious or malicious activity requiring attention. +- `Application`: Logs information about installed or executed applications identified on endpoints. +- `Application Risk`: Assesses and records the risk level or reputation of discovered applications based on behavior and source. +- `Group`: Contains configuration and status information for endpoint groups within a site or tenant. +- `Threat`: Logs confirmed malicious detections, such as malware, exploits, or ransomware identified by SentinelOne. +- `Threat Event`: Provides detailed event-level information related to a specific threat, including process, file, and network indicators. + +### Supported use cases +Integrating SentinelOne Activity, Agent, Alert, Application, Application Risk, Group, Threat, and Threat Event logs with Elastic SIEM provides centralized visibility across endpoint operations and security events. Dashboards deliver insights into agent status, detections, application behavior, and threat lifecycle, helping SOC teams quickly identify malicious activity, enforce policy compliance, and accelerate investigation and response efforts. + +## What do I need to use this integration? -## API token +### From SentinelOne To collect data from SentinelOne APIs, you must have an API token. To create an API token, follow these steps: @@ -36,29 +55,63 @@ To collect data from SentinelOne APIs, you must have an API token. To create an | Application Risk | Applications -> viewRisks | | Group | Groups -> view | | Threat | Threats -> view | +| Threat Event | Threats -> view | ## Note The **alert** data stream depends on STAR Custom Rules. STAR Custom Rules are supported in Cloud environments, but are not supported in on-premises environments. Because of this, the **alert** data stream is not supported in on-premises environments. +## How do I deploy this integration? + +This integration supports both Elastic Agentless-based and Agent-based installations. + +### Agentless-based installation + +Agentless integrations allow you to collect data without having to manage Elastic Agent in your cloud. They make manual agent deployment unnecessary, so you can focus on your data instead of the agent that collects it. For more information, refer to [Agentless integrations](https://www.elastic.co/guide/en/serverless/current/security-agentless-integrations.html) and the [Agentless integrations FAQ](https://www.elastic.co/guide/en/serverless/current/agentless-integration-troubleshooting.html). + +Agentless deployments are only supported in Elastic Serverless and Elastic Cloud environments. This functionality is in beta and is subject to change. Beta features are not subject to the support SLA of official GA features. + +### Agent-based installation + +Elastic Agent must be installed. For more details, check the Elastic Agent [installation instructions](docs-content://reference/fleet/install-elastic-agents.md). You can install only one Elastic Agent per host. + ## Troubleshooting - The API token generated by the user is time-limited. The user must reconfigure a new API token before it expires. - For console users, the default expiration time limit is 30 days. - For service users, the expiration time limit is the same as the duration specified while generating the API token. -## Alert severity mapping +## Setup -The values used in `event.severity` are consistent with Elastic Detection Rules. +1. In the top search bar in Kibana, search for **Integrations**. +2. In the search bar, type **SentinelOne**. +3. Select the **SentinelOne** integration from the search results. +4. Select **Add SentinelOne** to add the integration. +5. Enable and configure only the collection methods which you will use. -| Severity Name | `event.severity` | -|---------------|:----------------:| -| Low | 21 | -| Medium | 47 | -| High | 73 | -| Critical | 99 | + * To **Collect SentinelOne logs via API**, you'll need to: -## Logs + - Configure **URL** and **API Token**. + - Enable/Disable the required datasets. + - For each dataset, adjust the integration configuration parameters if required, including the Interval, Preserve original event etc. to enable data collection. + +6. Select **Save and continue** to save the integration. + +### Validation + +#### Dashboards populated + +1. In the top search bar in Kibana, search for **Dashboards**. +2. In the search bar, type **SentinelOne**. +3. Select a dashboard for the dataset you are collecting, and verify the dashboard information is populated. + +## Performance and scaling + +For more information on architectures that can be used for scaling this integration, check the [Ingest Architectures](https://www.elastic.co/docs/manage-data/ingest/ingest-reference-architectures) documentation. + +## Reference + +### Logs reference ### activity @@ -1732,3 +1785,351 @@ An example event for `threat` looks as following: | sentinel_one.threat.threat_id | Threat id. | keyword | | sentinel_one.threat.whitening_option | Whitening options. | keyword | + +### threat event + +This is the `threat event` dataset. + +An example event for `threat_event` looks as following: + +```json +{ + "@timestamp": "2025-10-22T11:30:00.000Z", + "agent": { + "ephemeral_id": "cb480124-a03c-47cc-9451-f52e3e80bc47", + "id": "0d5383c7-da8f-4e33-a9c8-ea303876fbd9", + "name": "elastic-agent-26678", + "type": "filebeat", + "version": "8.18.7" + }, + "data_stream": { + "dataset": "sentinel_one.threat_event", + "namespace": "82630", + "type": "logs" + }, + "destination": { + "ip": "89.160.20.128", + "port": 443 + }, + "ecs": { + "version": "8.17.0" + }, + "elastic_agent": { + "id": "0d5383c7-da8f-4e33-a9c8-ea303876fbd9", + "snapshot": false, + "version": "8.18.7" + }, + "event": { + "agent_id_status": "verified", + "created": "2025-10-22T11:30:00.000Z", + "dataset": "sentinel_one.threat_event", + "id": "id_004", + "ingested": "2025-10-27T07:44:21Z", + "kind": "event", + "original": "{\"activeContentFileId\":\"fileid_004\",\"activeContentHash\":\"hash_004\",\"activeContentPath\":\"D:\\\\content\\\\file4\",\"agentDomain\":\"domain4\",\"agentGroupId\":\"group_04\",\"agentId\":\"agent_004\",\"agentInfected\":false,\"agentIp\":\"89.160.20.156\",\"agentIsActive\":true,\"agentIsDecommissioned\":false,\"agentMachineType\":\"x64\",\"agentName\":\"Agent_4\",\"agentNetworkStatus\":\"online\",\"agentOs\":\"Windows 10\",\"agentUuid\":\"uuid_004\",\"agentVersion\":\"1.3.0\",\"connectionStatus\":\"active\",\"createdAt\":\"2025-10-22T11:30:00Z\",\"direction\":\"outbound\",\"dnsRequest\":\"google.com\",\"dnsResponse\":\"8.8.8.8\",\"dstIp\":\"89.160.20.128\",\"dstPort\":443,\"eventType\":\"network\",\"fileFullName\":\"C:\\\\Program Files\\\\Chrome\\\\chrome.exe\",\"fileId\":\"file_004\",\"fileMd5\":\"md5_004\",\"fileSha1\":\"sha1_004\",\"fileSha256\":\"sha256_004\",\"fileSize\":\"4096\",\"fileType\":\"exe\",\"hasActiveContent\":false,\"id\":\"id_004\",\"indicatorCategory\":\"spyware\",\"indicatorDescription\":\"tracking software\",\"indicatorMetadata\":\"meta4\",\"indicatorName\":\"Spyware4\",\"loginsBaseType\":\"domain\",\"loginsUserName\":\"user_login4\",\"md5\":\"md5_sample4\",\"networkMethod\":\"GET\",\"networkSource\":\"WAN\",\"networkUrl\":\"https://google.com\",\"objectType\":\"process\",\"oldFileMd5\":\"old_md54\",\"oldFileName\":\"chrome_old.exe\",\"oldFileSha1\":\"old_sha14\",\"oldFileSha256\":\"old_sha2564\",\"parentPid\":\"4001\",\"parentProcessGroupId\":\"group_parent_04\",\"parentProcessIsMalicious\":false,\"parentProcessName\":\"explorer.exe\",\"parentProcessUniqueKey\":\"unique_parent_004\",\"pid\":\"4567\",\"processCmd\":\"chrome.exe --new-tab\",\"processDisplayName\":\"Google Chrome\",\"processGroupId\":\"group_04\",\"processImagePath\":\"C:\\\\Program Files\\\\Chrome\\\\chrome.exe\",\"processImageSha1Hash\":\"sha1_process4\",\"processIntegrityLevel\":\"medium\",\"processIsMalicious\":false,\"processIsRedirectedCommandProcessor\":\"false\",\"processIsWow64\":\"false\",\"processName\":\"chrome.exe\",\"processRoot\":\"C:\\\\\",\"processSessionId\":\"session_004\",\"processStartTime\":\"2025-10-22T11:00:00Z\",\"processSubSystem\":\"subsystem4\",\"processUniqueKey\":\"unique_004\",\"processUserName\":\"user4\",\"protocol\":\"TCP\",\"publisher\":\"Google\",\"registryClassification\":\"application\",\"registryId\":\"reg_004\",\"registryPath\":\"HKCU\\\\Software\\\\Test4\",\"relatedToThreat\":false,\"rpid\":\"rpid_004\",\"sha1\":\"sha1_sample4\",\"sha256\":\"sha256_sample4\",\"signatureSignedInvalidReason\":\"None\",\"signedStatus\":\"Signed\",\"siteId\":\"site_004\",\"siteName\":\"SiteD\",\"srcIp\":\"127.0.0.1\",\"srcPort\":34567,\"storyline\":\"storyline4\",\"taskName\":\"task4\",\"taskPath\":\"C:\\\\Tasks\\\\task4\",\"threatStatus\":\"clean\",\"tid\":\"tid_004\",\"trueContext\":\"context4\",\"user\":\"user4\",\"verifiedStatus\":\"Verified\"}" + }, + "file": { + "hash": { + "md5": "md5_004", + "sha1": "sha1_004", + "sha256": "sha256_004" + }, + "name": "C:\\Program Files\\Chrome\\chrome.exe", + "size": 4096, + "type": "exe" + }, + "input": { + "type": "cel" + }, + "network": { + "transport": "tcp" + }, + "process": { + "command_line": "chrome.exe --new-tab", + "executable": "C:\\Program Files\\Chrome\\chrome.exe", + "hash": { + "sha1": "sha1_process4" + }, + "name": "chrome.exe", + "parent": { + "name": "explorer.exe", + "pid": 4001 + }, + "pid": 4567, + "start": "2025-10-22T11:00:00.000Z", + "user": { + "name": "user4" + } + }, + "registry": { + "path": "HKCU\\Software\\Test4" + }, + "related": { + "hash": [ + "sha1_004", + "sha256_004", + "md5_004", + "sha1_process4" + ], + "ip": [ + "89.160.20.156", + "127.0.0.1", + "89.160.20.128" + ], + "user": [ + "user_login4", + "user4" + ] + }, + "sentinel_one": { + "threat_event": { + "active_content": { + "file_id": "fileid_004", + "hash": "hash_004", + "path": "D:\\content\\file4" + }, + "agent": { + "domain": "domain4", + "group_id": "group_04", + "id": "agent_004", + "infected": false, + "ip": "89.160.20.156", + "is_active": true, + "is_decommissioned": false, + "machine_type": "x64", + "name": "Agent_4", + "network_status": "online", + "os": "Windows 10", + "uuid": "uuid_004", + "version": "1.3.0" + }, + "connection_status": "active", + "created_at": "2025-10-22T11:30:00.000Z", + "direction": "outbound", + "dns_request": "google.com", + "dns_response": "8.8.8.8", + "dst": { + "ip": "89.160.20.128", + "port": 443 + }, + "event_type": "network", + "file": { + "full_name": "C:\\Program Files\\Chrome\\chrome.exe", + "id": "file_004", + "md5": "md5_004", + "sha1": "sha1_004", + "sha256": "sha256_004", + "size": "4096", + "type": "exe" + }, + "has_active_content": false, + "id": "id_004", + "indicator": { + "category": "spyware", + "description": "tracking software", + "metadata": "meta4", + "name": "Spyware4" + }, + "logins_base_type": "domain", + "logins_user_name": "user_login4", + "md5": "md5_sample4", + "network": { + "method": "GET", + "source": "WAN", + "url": "https://google.com" + }, + "object_type": "process", + "old_file": { + "md5": "old_md54", + "name": "chrome_old.exe", + "sha1": "old_sha14", + "sha256": "old_sha2564" + }, + "parent_pid": "4001", + "parent_process": { + "group_id": "group_parent_04", + "is_malicious": false, + "name": "explorer.exe", + "unique_key": "unique_parent_004" + }, + "pid": "4567", + "process": { + "cmd": "chrome.exe --new-tab", + "display_name": "Google Chrome", + "group_id": "group_04", + "image_path": "C:\\Program Files\\Chrome\\chrome.exe", + "image_sha1_hash": "sha1_process4", + "integrity_level": "medium", + "is_malicious": false, + "is_redirected_command_processor": "false", + "is_wow64": "false", + "name": "chrome.exe", + "root": "C:\\", + "session_id": "session_004", + "start_time": "2025-10-22T11:00:00.000Z", + "sub_system": "subsystem4", + "unique_key": "unique_004", + "user_name": "user4" + }, + "protocol": "TCP", + "publisher": "Google", + "registry": { + "classification": "application", + "id": "reg_004", + "path": "HKCU\\Software\\Test4" + }, + "related_to_threat": false, + "rpid": "rpid_004", + "sha1": "sha1_sample4", + "sha256": "sha256_sample4", + "signature_signed_invalid_reason": "None", + "signed_status": "Signed", + "site": { + "id": "site_004", + "name": "SiteD" + }, + "src": { + "ip": "127.0.0.1", + "port": 34567 + }, + "storyline": "storyline4", + "task_name": "task4", + "task_path": "C:\\Tasks\\task4", + "threat_status": "clean", + "tid": "tid_004", + "true_context": "context4", + "user": "user4", + "verified_status": "Verified" + } + }, + "source": { + "ip": "127.0.0.1", + "port": 34567 + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields", + "forwarded", + "sentinel_one-threat_event" + ], + "threat": { + "indicator": { + "description": "tracking software", + "name": "Spyware4" + } + }, + "url": { + "full": "https://google.com" + }, + "user": { + "name": "user4" + } +} +``` + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Date/time when the event originated. This is the date/time extracted from the event, typically representing when the event was generated by the source. If the event source has no original timestamp, this value is typically populated by the first time the event was received by the pipeline. Required field for all events. | date | +| data_stream.dataset | The field can contain anything that makes sense to signify the source of the data. Examples include `nginx.access`, `prometheus`, `endpoint` etc. For data streams that otherwise fit, but that do not have dataset set we use the value "generic" for the dataset value. `event.dataset` should have the same value as `data_stream.dataset`. Beyond the Elasticsearch data stream naming criteria noted above, the `dataset` value has additional restrictions: \* Must not contain `-` \* No longer than 100 characters | constant_keyword | +| data_stream.namespace | A user defined namespace. Namespaces are useful to allow grouping of data. Many users already organize their indices this way, and the data stream naming scheme now provides this best practice as a default. Many users will populate this field with `default`. If no value is used, it falls back to `default`. Beyond the Elasticsearch index naming criteria noted above, `namespace` value has the additional restrictions: \* Must not contain `-` \* No longer than 100 characters | constant_keyword | +| data_stream.type | An overarching type for the data stream. Currently allowed values are "logs" and "metrics". We expect to also add "traces" and "synthetics" in the near future. | constant_keyword | +| event.dataset | Name of the dataset. If an event source publishes more than one type of log or events (e.g. access log, error log), the dataset is used to specify which one the event comes from. It's recommended but not required to start the dataset name with the module name, followed by a dot, then the dataset name. | constant_keyword | +| event.module | Name of the module this data is coming from. If your monitoring agent supports the concept of modules or plugins to process events of a given source (e.g. Apache logs), `event.module` should contain the name of this module. | constant_keyword | +| input.type | Type of filebeat input. | keyword | +| log.offset | Log offset. | long | +| sentinel_one.threat_event.active_content.file_id | | keyword | +| sentinel_one.threat_event.active_content.hash | | keyword | +| sentinel_one.threat_event.active_content.path | | keyword | +| sentinel_one.threat_event.agent.domain | | keyword | +| sentinel_one.threat_event.agent.group_id | | keyword | +| sentinel_one.threat_event.agent.id | | keyword | +| sentinel_one.threat_event.agent.infected | | boolean | +| sentinel_one.threat_event.agent.ip | | ip | +| sentinel_one.threat_event.agent.is_active | | boolean | +| sentinel_one.threat_event.agent.is_decommissioned | | boolean | +| sentinel_one.threat_event.agent.machine_type | | keyword | +| sentinel_one.threat_event.agent.name | | keyword | +| sentinel_one.threat_event.agent.network_status | | keyword | +| sentinel_one.threat_event.agent.os | | keyword | +| sentinel_one.threat_event.agent.uuid | | keyword | +| sentinel_one.threat_event.agent.version | | keyword | +| sentinel_one.threat_event.connection_status | | keyword | +| sentinel_one.threat_event.created_at | | date | +| sentinel_one.threat_event.direction | | keyword | +| sentinel_one.threat_event.dns_request | | keyword | +| sentinel_one.threat_event.dns_response | | keyword | +| sentinel_one.threat_event.dst.ip | | ip | +| sentinel_one.threat_event.dst.port | | long | +| sentinel_one.threat_event.event_type | | keyword | +| sentinel_one.threat_event.file.full_name | | keyword | +| sentinel_one.threat_event.file.id | | keyword | +| sentinel_one.threat_event.file.md5 | | keyword | +| sentinel_one.threat_event.file.sha1 | | keyword | +| sentinel_one.threat_event.file.sha256 | | keyword | +| sentinel_one.threat_event.file.size | | keyword | +| sentinel_one.threat_event.file.type | | keyword | +| sentinel_one.threat_event.has_active_content | | boolean | +| sentinel_one.threat_event.id | | keyword | +| sentinel_one.threat_event.indicator.category | | keyword | +| sentinel_one.threat_event.indicator.description | | keyword | +| sentinel_one.threat_event.indicator.metadata | | keyword | +| sentinel_one.threat_event.indicator.name | | keyword | +| sentinel_one.threat_event.logins_base_type | | keyword | +| sentinel_one.threat_event.logins_user_name | | keyword | +| sentinel_one.threat_event.md5 | | keyword | +| sentinel_one.threat_event.network.method | | keyword | +| sentinel_one.threat_event.network.source | | keyword | +| sentinel_one.threat_event.network.url | | keyword | +| sentinel_one.threat_event.object_type | | keyword | +| sentinel_one.threat_event.old_file.md5 | | keyword | +| sentinel_one.threat_event.old_file.name | | keyword | +| sentinel_one.threat_event.old_file.sha1 | | keyword | +| sentinel_one.threat_event.old_file.sha256 | | keyword | +| sentinel_one.threat_event.parent_pid | | keyword | +| sentinel_one.threat_event.parent_process.group_id | | keyword | +| sentinel_one.threat_event.parent_process.is_malicious | | boolean | +| sentinel_one.threat_event.parent_process.name | | keyword | +| sentinel_one.threat_event.parent_process.unique_key | | keyword | +| sentinel_one.threat_event.pid | | keyword | +| sentinel_one.threat_event.process.cmd | | keyword | +| sentinel_one.threat_event.process.display_name | | keyword | +| sentinel_one.threat_event.process.group_id | | keyword | +| sentinel_one.threat_event.process.image_path | | keyword | +| sentinel_one.threat_event.process.image_sha1_hash | | keyword | +| sentinel_one.threat_event.process.integrity_level | | keyword | +| sentinel_one.threat_event.process.is_malicious | | boolean | +| sentinel_one.threat_event.process.is_redirected_command_processor | | keyword | +| sentinel_one.threat_event.process.is_wow64 | | keyword | +| sentinel_one.threat_event.process.name | | keyword | +| sentinel_one.threat_event.process.root | | keyword | +| sentinel_one.threat_event.process.session_id | | keyword | +| sentinel_one.threat_event.process.start_time | | date | +| sentinel_one.threat_event.process.sub_system | | keyword | +| sentinel_one.threat_event.process.unique_key | | keyword | +| sentinel_one.threat_event.process.user_name | | keyword | +| sentinel_one.threat_event.protocol | | keyword | +| sentinel_one.threat_event.publisher | | keyword | +| sentinel_one.threat_event.registry.classification | | keyword | +| sentinel_one.threat_event.registry.id | | keyword | +| sentinel_one.threat_event.registry.path | | keyword | +| sentinel_one.threat_event.related_to_threat | | boolean | +| sentinel_one.threat_event.rpid | | keyword | +| sentinel_one.threat_event.sha1 | | keyword | +| sentinel_one.threat_event.sha256 | | keyword | +| sentinel_one.threat_event.signature_signed_invalid_reason | | keyword | +| sentinel_one.threat_event.signed_status | | keyword | +| sentinel_one.threat_event.site.id | | keyword | +| sentinel_one.threat_event.site.name | | keyword | +| sentinel_one.threat_event.src.ip | | ip | +| sentinel_one.threat_event.src.port | | long | +| sentinel_one.threat_event.storyline | | keyword | +| sentinel_one.threat_event.task_name | | keyword | +| sentinel_one.threat_event.task_path | | keyword | +| sentinel_one.threat_event.threat_status | | keyword | +| sentinel_one.threat_event.tid | | keyword | +| sentinel_one.threat_event.true_context | | keyword | +| sentinel_one.threat_event.user | | keyword | +| sentinel_one.threat_event.verified_status | | keyword | + diff --git a/packages/sentinel_one/elasticsearch/transform/latest_threat_event/fields/base-fields.yml b/packages/sentinel_one/elasticsearch/transform/latest_threat_event/fields/base-fields.yml new file mode 100644 index 00000000000..41d0c4dac0d --- /dev/null +++ b/packages/sentinel_one/elasticsearch/transform/latest_threat_event/fields/base-fields.yml @@ -0,0 +1,16 @@ +- name: data_stream.type + external: ecs +- name: data_stream.dataset + external: ecs +- name: data_stream.namespace + external: ecs +- name: "@timestamp" + external: ecs +- name: event.module + type: constant_keyword + external: ecs + value: sentinel_one +- name: event.dataset + type: constant_keyword + external: ecs + value: sentinel_one.threat_event diff --git a/packages/sentinel_one/elasticsearch/transform/latest_threat_event/fields/beats.yml b/packages/sentinel_one/elasticsearch/transform/latest_threat_event/fields/beats.yml new file mode 100644 index 00000000000..d5fd38748ba --- /dev/null +++ b/packages/sentinel_one/elasticsearch/transform/latest_threat_event/fields/beats.yml @@ -0,0 +1,6 @@ +- name: input.type + type: keyword + description: Type of Filebeat input. +- name: log.offset + type: long + description: Log offset. diff --git a/packages/sentinel_one/elasticsearch/transform/latest_threat_event/fields/ecs.yml b/packages/sentinel_one/elasticsearch/transform/latest_threat_event/fields/ecs.yml new file mode 100644 index 00000000000..eb8a0e1c2c2 --- /dev/null +++ b/packages/sentinel_one/elasticsearch/transform/latest_threat_event/fields/ecs.yml @@ -0,0 +1,54 @@ +- name: destination.ip + external: ecs +- name: destination.port + external: ecs +- name: event.created + external: ecs +- name: event.id + external: ecs +- name: file.hash.md5 + external: ecs +- name: file.hash.sha1 + external: ecs +- name: file.hash.sha256 + external: ecs +- name: file.name + external: ecs +- name: file.size + external: ecs +- name: file.type + external: ecs +- name: network.transport + external: ecs +- name: process.command_line + external: ecs +- name: process.executable + external: ecs +- name: process.hash.sha1 + external: ecs +- name: process.name + external: ecs +- name: process.parent.name + external: ecs +- name: process.parent.pid + external: ecs +- name: process.pid + external: ecs +- name: process.start + external: ecs +- name: process.user.name + external: ecs +- name: registry.path + external: ecs +- name: source.ip + external: ecs +- name: source.port + external: ecs +- name: threat.indicator.description + external: ecs +- name: threat.indicator.name + external: ecs +- name: url.full + external: ecs +- name: user.name + external: ecs diff --git a/packages/sentinel_one/elasticsearch/transform/latest_threat_event/fields/fields.yml b/packages/sentinel_one/elasticsearch/transform/latest_threat_event/fields/fields.yml new file mode 100644 index 00000000000..6e0f674146a --- /dev/null +++ b/packages/sentinel_one/elasticsearch/transform/latest_threat_event/fields/fields.yml @@ -0,0 +1,228 @@ +- name: sentinel_one + type: group + fields: + - name: threat_event + type: group + fields: + - name: id + type: keyword + - name: object_type + type: keyword + - name: created_at + type: date + - name: process + type: group + fields: + - name: name + type: keyword + - name: cmd + type: keyword + - name: group_id + type: keyword + - name: image_path + type: keyword + - name: user_name + type: keyword + - name: image_sha1_hash + type: keyword + - name: unique_key + type: keyword + - name: start_time + type: date + - name: sub_system + type: keyword + - name: session_id + type: keyword + - name: integrity_level + type: keyword + - name: display_name + type: keyword + - name: is_wow64 + type: keyword + - name: is_redirected_command_processor + type: keyword + - name: root + type: keyword + - name: is_malicious + type: boolean + - name: agent + type: group + fields: + - name: name + type: keyword + - name: group_id + type: keyword + - name: id + type: keyword + - name: is_active + type: boolean + - name: is_decommissioned + type: boolean + - name: machine_type + type: keyword + - name: network_status + type: keyword + - name: os + type: keyword + - name: version + type: keyword + - name: uuid + type: keyword + - name: infected + type: boolean + - name: domain + type: keyword + - name: ip + type: ip + - name: site + type: group + fields: + - name: id + type: keyword + - name: name + type: keyword + - name: pid + type: keyword + - name: src + type: group + fields: + - name: ip + type: ip + - name: port + type: long + - name: dst + type: group + fields: + - name: ip + type: ip + - name: port + type: long + - name: file + type: group + fields: + - name: sha1 + type: keyword + - name: sha256 + type: keyword + - name: md5 + type: keyword + - name: full_name + type: keyword + - name: id + type: keyword + - name: size + type: keyword + - name: type + type: keyword + - name: old_file + type: group + fields: + - name: sha1 + type: keyword + - name: sha256 + type: keyword + - name: md5 + type: keyword + - name: name + type: keyword + - name: signature_signed_invalid_reason + type: keyword + - name: verified_status + type: keyword + - name: signed_status + type: keyword + - name: sha256 + type: keyword + - name: sha1 + type: keyword + - name: md5 + type: keyword + - name: tid + type: keyword + - name: rpid + type: keyword + - name: dns_request + type: keyword + - name: dns_response + type: keyword + - name: parent_process + type: group + fields: + - name: name + type: keyword + - name: unique_key + type: keyword + - name: group_id + type: keyword + - name: is_malicious + type: boolean + - name: parent_pid + type: keyword + - name: network + type: group + fields: + - name: source + type: keyword + - name: url + type: keyword + - name: method + type: keyword + - name: direction + type: keyword + - name: event_type + type: keyword + - name: registry + type: group + fields: + - name: path + type: keyword + - name: id + type: keyword + - name: classification + type: keyword + - name: task_name + type: keyword + - name: task_path + type: keyword + - name: true_context + type: keyword + - name: storyline + type: keyword + - name: logins_user_name + type: keyword + - name: logins_base_type + type: keyword + - name: indicator + type: group + fields: + - name: category + type: keyword + - name: description + type: keyword + - name: metadata + type: keyword + - name: name + type: keyword + - name: connection_status + type: keyword + - name: publisher + type: keyword + - name: user + type: keyword + - name: related_to_threat + type: boolean + - name: threat_status + type: keyword + - name: protocol + type: keyword + - name: has_active_content + type: boolean + - name: active_content + type: group + fields: + - name: file_id + type: keyword + - name: path + type: keyword + - name: hash + type: keyword diff --git a/packages/sentinel_one/elasticsearch/transform/latest_threat_event/fields/is-transform-source-false.yml b/packages/sentinel_one/elasticsearch/transform/latest_threat_event/fields/is-transform-source-false.yml new file mode 100644 index 00000000000..490a079e7a7 --- /dev/null +++ b/packages/sentinel_one/elasticsearch/transform/latest_threat_event/fields/is-transform-source-false.yml @@ -0,0 +1,4 @@ +- name: labels.is_transform_source + type: constant_keyword + description: Distinguishes between documents that are a source for a transform and documents that are an output of a transform, to facilitate easier filtering. + value: "false" diff --git a/packages/sentinel_one/elasticsearch/transform/latest_threat_event/manifest.yml b/packages/sentinel_one/elasticsearch/transform/latest_threat_event/manifest.yml new file mode 100644 index 00000000000..24e9e926793 --- /dev/null +++ b/packages/sentinel_one/elasticsearch/transform/latest_threat_event/manifest.yml @@ -0,0 +1,11 @@ +start: true +destination_index_template: + mappings: + dynamic: true + dynamic_templates: + - strings_as_keyword: + match_mapping_type: string + mapping: + ignore_above: 1024 + type: keyword + date_detection: true diff --git a/packages/sentinel_one/elasticsearch/transform/latest_threat_event/transform.yml b/packages/sentinel_one/elasticsearch/transform/latest_threat_event/transform.yml new file mode 100644 index 00000000000..b217f5243e3 --- /dev/null +++ b/packages/sentinel_one/elasticsearch/transform/latest_threat_event/transform.yml @@ -0,0 +1,37 @@ +# Use of "*" to use all namespaces defined. +source: + index: + - "logs-sentinel_one.threat_event-*" +dest: + index: "logs-sentinel_one_latest.dest_threat_event-1" + aliases: + - alias: "logs-sentinel_one_latest.threat_event" + move_on_creation: true +latest: + unique_key: + - event.dataset + - event.id + sort: "@timestamp" +description: >- + Latest threat event from SentinelOne. As threat event get updated and deleted, this transform stores only the latest state of each threat event inside the destination index. Thus the transform's destination index contains only the latest state of the threat event. +frequency: 30s +settings: + # This is required to prevent the transform from clobbering the Fleet-managed mappings. + deduce_mappings: false + unattended: true +sync: + time: + field: "event.ingested" + # Updated to 120s because of refresh delay in Serverless. With default 60s, + # sometimes transform wouldn't process all documents. + delay: 120s +retention_policy: + time: + field: "event.ingested" + max_age: 30d +_meta: + managed: false + # Bump this version to delete, reinstall, and restart the transform during + # package installation. + fleet_transform_version: 0.1.0 + run_as_kibana_system: false diff --git a/packages/sentinel_one/img/sentinel-one-dashboard.png b/packages/sentinel_one/img/sentinel-one-dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..ed1b2bbb1456fc6238bd95e403a9a980aa47f55a GIT binary patch literal 77451 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≪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

H2Eke(~r!IfefAYM1^Q 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"BCeOsMB> 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 Wb5k3#yXbnCR|x&U8r1o(6aNeT^3^^7 literal 0 HcmV?d00001 diff --git a/packages/sentinel_one/kibana/dashboard/sentinel_one-0dd17490-bbb8-11ec-82b7-8fcb232e9538.json b/packages/sentinel_one/kibana/dashboard/sentinel_one-0dd17490-bbb8-11ec-82b7-8fcb232e9538.json index efe1fa706ba..54ea2048b10 100644 --- a/packages/sentinel_one/kibana/dashboard/sentinel_one-0dd17490-bbb8-11ec-82b7-8fcb232e9538.json +++ b/packages/sentinel_one/kibana/dashboard/sentinel_one-0dd17490-bbb8-11ec-82b7-8fcb232e9538.json @@ -232,7 +232,7 @@ "i": "b8f90700-ca73-40c7-9257-8612aa86cc9f", "w": 24, "x": 0, - "y": 57 + "y": 59 }, "panelIndex": "b8f90700-ca73-40c7-9257-8612aa86cc9f", "type": "lens" @@ -403,7 +403,7 @@ "i": "9bdf752f-f767-44a4-bf05-51e0a27b7bbf", "w": 24, "x": 24, - "y": 57 + "y": 59 }, "panelIndex": "9bdf752f-f767-44a4-bf05-51e0a27b7bbf", "type": "lens" @@ -561,7 +561,7 @@ "i": "ed9a7061-e640-41f3-a838-3772f86e4be4", "w": 24, "x": 0, - "y": 72 + "y": 74 }, "panelIndex": "ed9a7061-e640-41f3-a838-3772f86e4be4", "type": "lens" @@ -734,7 +734,7 @@ "i": "e17f8b5f-d5de-4921-bb3a-9d3e7ef58ae4", "w": 24, "x": 24, - "y": 72 + "y": 74 }, "panelIndex": "e17f8b5f-d5de-4921-bb3a-9d3e7ef58ae4", "title": "Distribution of Threats by Incident Status", @@ -909,7 +909,7 @@ "i": "3e6f6367-85e2-45ee-a9c2-a14d5739f952", "w": 24, "x": 0, - "y": 87 + "y": 89 }, "panelIndex": "3e6f6367-85e2-45ee-a9c2-a14d5739f952", "title": "Top 10 Threat Techniques", @@ -1123,7 +1123,7 @@ "i": "1888de07-0e2f-4fc4-80e9-f3102e8b97b3", "w": 24, "x": 24, - "y": 87 + "y": 89 }, "panelIndex": "1888de07-0e2f-4fc4-80e9-f3102e8b97b3", "title": "Distribution of Threats by Infected Agents", @@ -1282,7 +1282,7 @@ "i": "6080a8f0-54d7-4fae-884f-f34dbed69ea8", "w": 24, "x": 0, - "y": 102 + "y": 104 }, "panelIndex": "6080a8f0-54d7-4fae-884f-f34dbed69ea8", "title": "Distribution of Threats by Detection Engine ", @@ -1456,116 +1456,12 @@ "i": "f7c0e875-f75f-4d06-b4dd-a8e50965eabe", "w": 24, "x": 24, - "y": 102 + "y": 104 }, "panelIndex": "f7c0e875-f75f-4d06-b4dd-a8e50965eabe", "title": "Top 10 Threats by Classification", "type": "lens" }, - { - "embeddableConfig": { - "attributes": { - "layout": "vertical", - "links": [ - { - "destinationRefName": "link_f4098683-cf5c-4602-9b24-9aea15918578_dashboard", - "id": "f4098683-cf5c-4602-9b24-9aea15918578", - "label": "Activities", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 0, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_8deb9939-2ec5-4132-ba5f-b1df63e439b7_dashboard", - "id": "8deb9939-2ec5-4132-ba5f-b1df63e439b7", - "label": "Agents", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 1, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_87aa4d55-d0ff-4287-aa67-de9fd33bdcaf_dashboard", - "id": "87aa4d55-d0ff-4287-aa67-de9fd33bdcaf", - "label": "Alerts", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 2, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_255c3f86-ba80-43a5-b1c9-077b54a35cae_dashboard", - "id": "255c3f86-ba80-43a5-b1c9-077b54a35cae", - "label": "Application", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 3, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_e4098063-4b72-4076-9062-e0ec2cbaacdd_dashboard", - "id": "e4098063-4b72-4076-9062-e0ec2cbaacdd", - "label": "Application Risk", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 4, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_a6a5c107-3f8e-48bd-b142-6aa46defabd2_dashboard", - "id": "a6a5c107-3f8e-48bd-b142-6aa46defabd2", - "label": "Groups", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 5, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_8cbb5cad-64bb-48fc-a682-8083e3b46f94_dashboard", - "id": "8cbb5cad-64bb-48fc-a682-8083e3b46f94", - "label": "Threats", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 6, - "type": "dashboardLink" - } - ] - }, - "enhancements": {} - }, - "gridData": { - "h": 11, - "i": "96d47662-1411-4c98-a33d-8eccf5f23307", - "w": 10, - "x": 0, - "y": 0 - }, - "panelIndex": "96d47662-1411-4c98-a33d-8eccf5f23307", - "title": "Navigation", - "type": "links" - }, { "embeddableConfig": { "attributes": { @@ -3248,7 +3144,7 @@ "i": "049f4aed-442b-4fd9-b46a-4ae161ec46d6", "w": 10, "x": 0, - "y": 11 + "y": 13 }, "panelIndex": "049f4aed-442b-4fd9-b46a-4ae161ec46d6", "title": "Table of Contents", @@ -3261,12 +3157,12 @@ "references": [ { "id": "logs-*", - "name": "indexpattern-datasource-layer-a64559b1-90c9-4859-9d5f-2585172bcda4", + "name": "indexpattern-datasource-layer-c5e5c6f0-5d4d-48f4-9ad4-727d5f1c0ebd", "type": "index-pattern" }, { "id": "logs-*", - "name": "6f8ea6e2-8a4c-45ec-aa08-b533cc8e6ac4", + "name": "af63bf2a-f185-4472-99fa-9c42ffadb4bc", "type": "index-pattern" } ], @@ -3275,39 +3171,39 @@ "datasourceStates": { "formBased": { "layers": { - "a64559b1-90c9-4859-9d5f-2585172bcda4": { + "c5e5c6f0-5d4d-48f4-9ad4-727d5f1c0ebd": { "columnOrder": [ - "e8b50532-e3ed-47d7-a0d4-7aaced47afa3", - "ad08fd36-cbe4-4baa-ac1d-9454a3fd297b" + "039a2941-5111-4bf1-a02a-af4a8fe09609", + "86f6d3c9-4b8b-4d98-afae-df8ba9fd0e43" ], "columns": { - "ad08fd36-cbe4-4baa-ac1d-9454a3fd297b": { - "customLabel": true, - "dataType": "number", - "isBucketed": false, - "label": "Count", - "operationType": "unique_count", - "scale": "ratio", - "sourceField": "sentinel_one.threat.id" - }, - "e8b50532-e3ed-47d7-a0d4-7aaced47afa3": { + "039a2941-5111-4bf1-a02a-af4a8fe09609": { "customLabel": true, "dataType": "string", "isBucketed": true, - "label": "Mitigation Mode", + "label": "Mitigation Status", "operationType": "terms", "params": { "missingBucket": false, "orderBy": { - "columnId": "ad08fd36-cbe4-4baa-ac1d-9454a3fd297b", + "columnId": "86f6d3c9-4b8b-4d98-afae-df8ba9fd0e43", "type": "column" }, "orderDirection": "desc", "otherBucket": true, - "size": 10 + "size": 5 }, "scale": "ordinal", - "sourceField": "sentinel_one.threat.agent.mitigation_mode" + "sourceField": "sentinel_one.threat.mitigation_status.status" + }, + "86f6d3c9-4b8b-4d98-afae-df8ba9fd0e43": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Count", + "operationType": "unique_count", + "scale": "ratio", + "sourceField": "sentinel_one.threat.id" } }, "incompleteColumns": {} @@ -3324,7 +3220,7 @@ "alias": null, "disabled": false, "field": "data_stream.dataset", - "index": "6f8ea6e2-8a4c-45ec-aa08-b533cc8e6ac4", + "index": "af63bf2a-f185-4472-99fa-9c42ffadb4bc", "key": "data_stream.dataset", "negate": false, "params": { @@ -3347,37 +3243,28 @@ "visualization": { "layers": [ { - "accessors": [ - "ad08fd36-cbe4-4baa-ac1d-9454a3fd297b" - ], - "layerId": "a64559b1-90c9-4859-9d5f-2585172bcda4", + "categoryDisplay": "default", + "layerId": "c5e5c6f0-5d4d-48f4-9ad4-727d5f1c0ebd", "layerType": "data", - "position": "top", - "seriesType": "bar_stacked", - "showGridlines": false, - "xAccessor": "e8b50532-e3ed-47d7-a0d4-7aaced47afa3" + "legendDisplay": "show", + "legendSize": "auto", + "metrics": [ + "86f6d3c9-4b8b-4d98-afae-df8ba9fd0e43" + ], + "nestedLegend": false, + "numberDisplay": "percent", + "primaryGroups": [ + "039a2941-5111-4bf1-a02a-af4a8fe09609" + ], + "truncateLegend": false } ], - "legend": { - "isVisible": true, - "legendSize": "auto", - "position": "right", - "shouldTruncate": false - }, - "preferredSeriesType": "bar_stacked", - "title": "Empty XY chart", - "valueLabels": "hide", - "yLeftExtent": { - "mode": "full" - }, - "yRightExtent": { - "mode": "full" - } + "shape": "pie" } }, - "title": "Distribution of Threats by Agent Mitigation Mode", + "title": "Distribution of Threats by Mitigation Status", "type": "lens", - "visualizationType": "lnsXY" + "visualizationType": "lnsPie" }, "enhancements": { "dynamicActions": { @@ -3393,7 +3280,7 @@ "alias": null, "disabled": false, "field": "data_stream.dataset", - "index": "6f8ea6e2-8a4c-45ec-aa08-b533cc8e6ac4", + "index": "af63bf2a-f185-4472-99fa-9c42ffadb4bc", "key": "data_stream.dataset", "negate": false, "params": { @@ -3417,13 +3304,13 @@ "syncTooltips": false }, "gridData": { - "h": 14, - "i": "301b13f1-59c8-40e0-80f8-ecc1892b938d", - "w": 20, - "x": 28, - "y": 28 + "h": 15, + "i": "accf3797-c215-44a4-829d-c9ff30758f7b", + "w": 15, + "x": 0, + "y": 44 }, - "panelIndex": "301b13f1-59c8-40e0-80f8-ecc1892b938d", + "panelIndex": "accf3797-c215-44a4-829d-c9ff30758f7b", "type": "lens" }, { @@ -3433,17 +3320,17 @@ "references": [ { "id": "logs-*", - "name": "indexpattern-datasource-layer-f83c655e-003c-4cc5-a2e3-789acb23b691", + "name": "indexpattern-datasource-layer-9d8d04b8-42e9-488a-9c18-39f38153e46a", "type": "index-pattern" }, { "id": "logs-*", - "name": "eabcac79-7f09-4f55-8d66-0df00a4f4358", + "name": "5eccfc13-a814-49f3-9b20-9be2db6b75a9", "type": "index-pattern" }, { "id": "logs-*", - "name": "33030a53-9eef-4416-9030-de2b09f3100f", + "name": "2dfeb86f-904e-4f76-bd4a-502859e3ffa4", "type": "index-pattern" } ], @@ -3452,13 +3339,13 @@ "datasourceStates": { "formBased": { "layers": { - "f83c655e-003c-4cc5-a2e3-789acb23b691": { + "9d8d04b8-42e9-488a-9c18-39f38153e46a": { "columnOrder": [ - "d427f2bd-912c-476e-85a7-3110216b3b8d", - "7fead18f-d40b-4539-ace7-5328e84140d2" + "3629412b-4ee6-4169-92d4-d5d8ebb7ab62", + "324989fb-f85e-4bbc-b7f9-b85472d54928" ], "columns": { - "7fead18f-d40b-4539-ace7-5328e84140d2": { + "324989fb-f85e-4bbc-b7f9-b85472d54928": { "customLabel": true, "dataType": "number", "isBucketed": false, @@ -3467,30 +3354,24 @@ "scale": "ratio", "sourceField": "sentinel_one.threat.id" }, - "d427f2bd-912c-476e-85a7-3110216b3b8d": { + "3629412b-4ee6-4169-92d4-d5d8ebb7ab62": { + "customLabel": true, "dataType": "string", "isBucketed": true, - "label": "Filters", - "operationType": "filters", + "label": "Prevalent Threats", + "operationType": "terms", "params": { - "filters": [ - { - "input": { - "language": "kuery", - "query": "sentinel_one.threat.agent.is_active : true " - }, - "label": "Active Agents" - }, - { - "input": { - "language": "kuery", - "query": "sentinel_one.threat.agent.is_active : false " - }, - "label": "Inactive Agents" - } - ] + "missingBucket": false, + "orderBy": { + "columnId": "324989fb-f85e-4bbc-b7f9-b85472d54928", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "size": 10 }, - "scale": "ordinal" + "scale": "ordinal", + "sourceField": "sentinel_one.threat.name" } }, "incompleteColumns": {} @@ -3506,17 +3387,19 @@ "meta": { "alias": null, "disabled": false, - "index": "eabcac79-7f09-4f55-8d66-0df00a4f4358", - "key": "sentinel_one.threat.agent.is_active", - "negate": false, - "type": "exists", - "value": "exists" - }, - "query": { - "exists": { - "field": "sentinel_one.threat.agent.is_active" - } - } + "index": "5eccfc13-a814-49f3-9b20-9be2db6b75a9", + "key": "sentinel_one.threat.incident.status", + "negate": true, + "params": { + "query": "resolved" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "sentinel_one.threat.incident.status": "resolved" + } + } }, { "$state": { @@ -3526,7 +3409,7 @@ "alias": null, "disabled": false, "field": "data_stream.dataset", - "index": "33030a53-9eef-4416-9030-de2b09f3100f", + "index": "2dfeb86f-904e-4f76-bd4a-502859e3ffa4", "key": "data_stream.dataset", "negate": false, "params": { @@ -3549,28 +3432,39 @@ "visualization": { "layers": [ { - "categoryDisplay": "default", - "layerId": "f83c655e-003c-4cc5-a2e3-789acb23b691", - "layerType": "data", - "legendDisplay": "show", - "legendSize": "auto", - "metrics": [ - "7fead18f-d40b-4539-ace7-5328e84140d2" - ], - "nestedLegend": false, - "numberDisplay": "percent", - "primaryGroups": [ - "d427f2bd-912c-476e-85a7-3110216b3b8d" + "accessors": [ + "324989fb-f85e-4bbc-b7f9-b85472d54928" ], - "truncateLegend": false + "layerId": "9d8d04b8-42e9-488a-9c18-39f38153e46a", + "layerType": "data", + "position": "top", + "seriesType": "bar_horizontal_stacked", + "showGridlines": false, + "xAccessor": "3629412b-4ee6-4169-92d4-d5d8ebb7ab62" } ], - "shape": "pie" + "legend": { + "isInside": false, + "isVisible": true, + "legendSize": "auto", + "position": "right", + "shouldTruncate": false, + "showSingleSeries": false + }, + "preferredSeriesType": "bar_stacked", + "title": "Empty XY chart", + "valueLabels": "hide", + "yLeftExtent": { + "mode": "full" + }, + "yRightExtent": { + "mode": "full" + } } }, - "title": "Distribution of Threats by Agent Status", + "title": "Most Prevalent Threats", "type": "lens", - "visualizationType": "lnsPie" + "visualizationType": "lnsXY" }, "enhancements": { "dynamicActions": { @@ -3585,15 +3479,17 @@ "meta": { "alias": null, "disabled": false, - "index": "eabcac79-7f09-4f55-8d66-0df00a4f4358", - "key": "sentinel_one.threat.agent.is_active", - "negate": false, - "type": "exists", - "value": "exists" + "index": "5eccfc13-a814-49f3-9b20-9be2db6b75a9", + "key": "sentinel_one.threat.incident.status", + "negate": true, + "params": { + "query": "resolved" + }, + "type": "phrase" }, "query": { - "exists": { - "field": "sentinel_one.threat.agent.is_active" + "match_phrase": { + "sentinel_one.threat.incident.status": "resolved" } } }, @@ -3605,7 +3501,7 @@ "alias": null, "disabled": false, "field": "data_stream.dataset", - "index": "33030a53-9eef-4416-9030-de2b09f3100f", + "index": "2dfeb86f-904e-4f76-bd4a-502859e3ffa4", "key": "data_stream.dataset", "negate": false, "params": { @@ -3620,7 +3516,6 @@ } } ], - "hidePanelTitles": false, "query": { "language": "kuery", "query": "" @@ -3630,15 +3525,126 @@ "syncTooltips": false }, "gridData": { - "h": 14, - "i": "dc9ba6b7-0c35-4333-99ad-653d57c20fd7", - "w": 18, - "x": 10, - "y": 28 + "h": 15, + "i": "213a2279-8bb5-491b-b0f0-d5a7a2473670", + "w": 33, + "x": 15, + "y": 44 }, - "panelIndex": "dc9ba6b7-0c35-4333-99ad-653d57c20fd7", + "panelIndex": "213a2279-8bb5-491b-b0f0-d5a7a2473670", "type": "lens" }, + { + "embeddableConfig": { + "attributes": { + "layout": "vertical", + "links": [ + { + "destinationRefName": "link_f4098683-cf5c-4602-9b24-9aea15918578_dashboard", + "id": "f4098683-cf5c-4602-9b24-9aea15918578", + "label": "Activities", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 0, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_8deb9939-2ec5-4132-ba5f-b1df63e439b7_dashboard", + "id": "8deb9939-2ec5-4132-ba5f-b1df63e439b7", + "label": "Agents", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 1, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_87aa4d55-d0ff-4287-aa67-de9fd33bdcaf_dashboard", + "id": "87aa4d55-d0ff-4287-aa67-de9fd33bdcaf", + "label": "Alerts", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 2, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_255c3f86-ba80-43a5-b1c9-077b54a35cae_dashboard", + "id": "255c3f86-ba80-43a5-b1c9-077b54a35cae", + "label": "Application", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 3, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_e4098063-4b72-4076-9062-e0ec2cbaacdd_dashboard", + "id": "e4098063-4b72-4076-9062-e0ec2cbaacdd", + "label": "Application Risk", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 4, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_a6a5c107-3f8e-48bd-b142-6aa46defabd2_dashboard", + "id": "a6a5c107-3f8e-48bd-b142-6aa46defabd2", + "label": "Groups", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 5, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_8cbb5cad-64bb-48fc-a682-8083e3b46f94_dashboard", + "id": "8cbb5cad-64bb-48fc-a682-8083e3b46f94", + "label": "Threats", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 6, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_f9cecb5e-18b1-4c47-9b7e-7269f673a147_dashboard", + "id": "f9cecb5e-18b1-4c47-9b7e-7269f673a147", + "label": "Threat Events", + "order": 7, + "type": "dashboardLink" + } + ] + }, + "enhancements": {} + }, + "gridData": { + "h": 13, + "i": "96d47662-1411-4c98-a33d-8eccf5f23307", + "w": 10, + "x": 0, + "y": 0 + }, + "panelIndex": "96d47662-1411-4c98-a33d-8eccf5f23307", + "title": "Navigation", + "type": "links" + }, { "embeddableConfig": { "attributes": { @@ -3646,12 +3652,17 @@ "references": [ { "id": "logs-*", - "name": "indexpattern-datasource-layer-c5e5c6f0-5d4d-48f4-9ad4-727d5f1c0ebd", + "name": "indexpattern-datasource-layer-f83c655e-003c-4cc5-a2e3-789acb23b691", "type": "index-pattern" }, { "id": "logs-*", - "name": "af63bf2a-f185-4472-99fa-9c42ffadb4bc", + "name": "eabcac79-7f09-4f55-8d66-0df00a4f4358", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "33030a53-9eef-4416-9030-de2b09f3100f", "type": "index-pattern" } ], @@ -3660,32 +3671,13 @@ "datasourceStates": { "formBased": { "layers": { - "c5e5c6f0-5d4d-48f4-9ad4-727d5f1c0ebd": { + "f83c655e-003c-4cc5-a2e3-789acb23b691": { "columnOrder": [ - "039a2941-5111-4bf1-a02a-af4a8fe09609", - "86f6d3c9-4b8b-4d98-afae-df8ba9fd0e43" + "d427f2bd-912c-476e-85a7-3110216b3b8d", + "7fead18f-d40b-4539-ace7-5328e84140d2" ], "columns": { - "039a2941-5111-4bf1-a02a-af4a8fe09609": { - "customLabel": true, - "dataType": "string", - "isBucketed": true, - "label": "Mitigation Status", - "operationType": "terms", - "params": { - "missingBucket": false, - "orderBy": { - "columnId": "86f6d3c9-4b8b-4d98-afae-df8ba9fd0e43", - "type": "column" - }, - "orderDirection": "desc", - "otherBucket": true, - "size": 5 - }, - "scale": "ordinal", - "sourceField": "sentinel_one.threat.mitigation_status.status" - }, - "86f6d3c9-4b8b-4d98-afae-df8ba9fd0e43": { + "7fead18f-d40b-4539-ace7-5328e84140d2": { "customLabel": true, "dataType": "number", "isBucketed": false, @@ -3693,6 +3685,31 @@ "operationType": "unique_count", "scale": "ratio", "sourceField": "sentinel_one.threat.id" + }, + "d427f2bd-912c-476e-85a7-3110216b3b8d": { + "dataType": "string", + "isBucketed": true, + "label": "Filters", + "operationType": "filters", + "params": { + "filters": [ + { + "input": { + "language": "kuery", + "query": "sentinel_one.threat.agent.is_active : true " + }, + "label": "Active Agents" + }, + { + "input": { + "language": "kuery", + "query": "sentinel_one.threat.agent.is_active : false " + }, + "label": "Inactive Agents" + } + ] + }, + "scale": "ordinal" } }, "incompleteColumns": {} @@ -3701,6 +3718,25 @@ } }, "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "eabcac79-7f09-4f55-8d66-0df00a4f4358", + "key": "sentinel_one.threat.agent.is_active", + "negate": false, + "type": "exists", + "value": "exists" + }, + "query": { + "exists": { + "field": "sentinel_one.threat.agent.is_active" + } + } + }, { "$state": { "store": "appState" @@ -3709,7 +3745,7 @@ "alias": null, "disabled": false, "field": "data_stream.dataset", - "index": "af63bf2a-f185-4472-99fa-9c42ffadb4bc", + "index": "33030a53-9eef-4416-9030-de2b09f3100f", "key": "data_stream.dataset", "negate": false, "params": { @@ -3733,17 +3769,17 @@ "layers": [ { "categoryDisplay": "default", - "layerId": "c5e5c6f0-5d4d-48f4-9ad4-727d5f1c0ebd", + "layerId": "f83c655e-003c-4cc5-a2e3-789acb23b691", "layerType": "data", "legendDisplay": "show", "legendSize": "auto", "metrics": [ - "86f6d3c9-4b8b-4d98-afae-df8ba9fd0e43" + "7fead18f-d40b-4539-ace7-5328e84140d2" ], "nestedLegend": false, "numberDisplay": "percent", "primaryGroups": [ - "039a2941-5111-4bf1-a02a-af4a8fe09609" + "d427f2bd-912c-476e-85a7-3110216b3b8d" ], "truncateLegend": false } @@ -3751,7 +3787,7 @@ "shape": "pie" } }, - "title": "Distribution of Threats by Mitigation Status", + "title": "Distribution of Threats by Agent Status", "type": "lens", "visualizationType": "lnsPie" }, @@ -3761,6 +3797,25 @@ } }, "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "eabcac79-7f09-4f55-8d66-0df00a4f4358", + "key": "sentinel_one.threat.agent.is_active", + "negate": false, + "type": "exists", + "value": "exists" + }, + "query": { + "exists": { + "field": "sentinel_one.threat.agent.is_active" + } + } + }, { "$state": { "store": "appState" @@ -3769,7 +3824,7 @@ "alias": null, "disabled": false, "field": "data_stream.dataset", - "index": "af63bf2a-f185-4472-99fa-9c42ffadb4bc", + "index": "33030a53-9eef-4416-9030-de2b09f3100f", "key": "data_stream.dataset", "negate": false, "params": { @@ -3784,6 +3839,7 @@ } } ], + "hidePanelTitles": false, "query": { "language": "kuery", "query": "" @@ -3793,13 +3849,13 @@ "syncTooltips": false }, "gridData": { - "h": 15, - "i": "accf3797-c215-44a4-829d-c9ff30758f7b", - "w": 15, - "x": 0, - "y": 42 + "h": 16, + "i": "dc9ba6b7-0c35-4333-99ad-653d57c20fd7", + "w": 18, + "x": 10, + "y": 28 }, - "panelIndex": "accf3797-c215-44a4-829d-c9ff30758f7b", + "panelIndex": "dc9ba6b7-0c35-4333-99ad-653d57c20fd7", "type": "lens" }, { @@ -3809,17 +3865,12 @@ "references": [ { "id": "logs-*", - "name": "indexpattern-datasource-layer-9d8d04b8-42e9-488a-9c18-39f38153e46a", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "5eccfc13-a814-49f3-9b20-9be2db6b75a9", + "name": "indexpattern-datasource-layer-a64559b1-90c9-4859-9d5f-2585172bcda4", "type": "index-pattern" }, { "id": "logs-*", - "name": "2dfeb86f-904e-4f76-bd4a-502859e3ffa4", + "name": "6f8ea6e2-8a4c-45ec-aa08-b533cc8e6ac4", "type": "index-pattern" } ], @@ -3828,13 +3879,13 @@ "datasourceStates": { "formBased": { "layers": { - "9d8d04b8-42e9-488a-9c18-39f38153e46a": { + "a64559b1-90c9-4859-9d5f-2585172bcda4": { "columnOrder": [ - "3629412b-4ee6-4169-92d4-d5d8ebb7ab62", - "324989fb-f85e-4bbc-b7f9-b85472d54928" + "e8b50532-e3ed-47d7-a0d4-7aaced47afa3", + "ad08fd36-cbe4-4baa-ac1d-9454a3fd297b" ], "columns": { - "324989fb-f85e-4bbc-b7f9-b85472d54928": { + "ad08fd36-cbe4-4baa-ac1d-9454a3fd297b": { "customLabel": true, "dataType": "number", "isBucketed": false, @@ -3843,16 +3894,16 @@ "scale": "ratio", "sourceField": "sentinel_one.threat.id" }, - "3629412b-4ee6-4169-92d4-d5d8ebb7ab62": { + "e8b50532-e3ed-47d7-a0d4-7aaced47afa3": { "customLabel": true, "dataType": "string", "isBucketed": true, - "label": "Prevalent Threats", + "label": "Mitigation Mode", "operationType": "terms", "params": { "missingBucket": false, "orderBy": { - "columnId": "324989fb-f85e-4bbc-b7f9-b85472d54928", + "columnId": "ad08fd36-cbe4-4baa-ac1d-9454a3fd297b", "type": "column" }, "orderDirection": "desc", @@ -3860,7 +3911,7 @@ "size": 10 }, "scale": "ordinal", - "sourceField": "sentinel_one.threat.name" + "sourceField": "sentinel_one.threat.agent.mitigation_mode" } }, "incompleteColumns": {} @@ -3869,27 +3920,6 @@ } }, "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "5eccfc13-a814-49f3-9b20-9be2db6b75a9", - "key": "sentinel_one.threat.incident.status", - "negate": true, - "params": { - "query": "resolved" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "sentinel_one.threat.incident.status": "resolved" - } - } - }, { "$state": { "store": "appState" @@ -3898,7 +3928,7 @@ "alias": null, "disabled": false, "field": "data_stream.dataset", - "index": "2dfeb86f-904e-4f76-bd4a-502859e3ffa4", + "index": "6f8ea6e2-8a4c-45ec-aa08-b533cc8e6ac4", "key": "data_stream.dataset", "negate": false, "params": { @@ -3922,23 +3952,21 @@ "layers": [ { "accessors": [ - "324989fb-f85e-4bbc-b7f9-b85472d54928" + "ad08fd36-cbe4-4baa-ac1d-9454a3fd297b" ], - "layerId": "9d8d04b8-42e9-488a-9c18-39f38153e46a", + "layerId": "a64559b1-90c9-4859-9d5f-2585172bcda4", "layerType": "data", "position": "top", - "seriesType": "bar_horizontal_stacked", + "seriesType": "bar_stacked", "showGridlines": false, - "xAccessor": "3629412b-4ee6-4169-92d4-d5d8ebb7ab62" + "xAccessor": "e8b50532-e3ed-47d7-a0d4-7aaced47afa3" } ], "legend": { - "isInside": false, "isVisible": true, "legendSize": "auto", "position": "right", - "shouldTruncate": false, - "showSingleSeries": false + "shouldTruncate": false }, "preferredSeriesType": "bar_stacked", "title": "Empty XY chart", @@ -3951,7 +3979,7 @@ } } }, - "title": "Most Prevalent Threats", + "title": "Distribution of Threats by Agent Mitigation Mode", "type": "lens", "visualizationType": "lnsXY" }, @@ -3961,27 +3989,6 @@ } }, "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "5eccfc13-a814-49f3-9b20-9be2db6b75a9", - "key": "sentinel_one.threat.incident.status", - "negate": true, - "params": { - "query": "resolved" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "sentinel_one.threat.incident.status": "resolved" - } - } - }, { "$state": { "store": "appState" @@ -3990,7 +3997,7 @@ "alias": null, "disabled": false, "field": "data_stream.dataset", - "index": "2dfeb86f-904e-4f76-bd4a-502859e3ffa4", + "index": "6f8ea6e2-8a4c-45ec-aa08-b533cc8e6ac4", "key": "data_stream.dataset", "negate": false, "params": { @@ -4014,13 +4021,13 @@ "syncTooltips": false }, "gridData": { - "h": 15, - "i": "213a2279-8bb5-491b-b0f0-d5a7a2473670", - "w": 33, - "x": 15, - "y": 42 + "h": 16, + "i": "301b13f1-59c8-40e0-80f8-ecc1892b938d", + "w": 20, + "x": 28, + "y": 28 }, - "panelIndex": "213a2279-8bb5-491b-b0f0-d5a7a2473670", + "panelIndex": "301b13f1-59c8-40e0-80f8-ecc1892b938d", "type": "lens" } ], @@ -4029,7 +4036,7 @@ "version": 3 }, "coreMigrationVersion": "8.8.0", - "created_at": "2025-10-06T10:09:52.045Z", + "created_at": "2025-10-27T19:44:47.686Z", "id": "sentinel_one-0dd17490-bbb8-11ec-82b7-8fcb232e9538", "references": [ { @@ -4127,41 +4134,6 @@ "name": "f7c0e875-f75f-4d06-b4dd-a8e50965eabe:9cde3279-3409-4cdf-99ab-f18b887a92cf", "type": "index-pattern" }, - { - "id": "sentinel_one-899f2630-bb27-11ec-82b7-8fcb232e9538", - "name": "96d47662-1411-4c98-a33d-8eccf5f23307:link_f4098683-cf5c-4602-9b24-9aea15918578_dashboard", - "type": "dashboard" - }, - { - "id": "sentinel_one-67844880-bbb5-11ec-82b7-8fcb232e9538", - "name": "96d47662-1411-4c98-a33d-8eccf5f23307:link_8deb9939-2ec5-4132-ba5f-b1df63e439b7_dashboard", - "type": "dashboard" - }, - { - "id": "sentinel_one-bcf1f680-bba3-11ec-82b7-8fcb232e9538", - "name": "96d47662-1411-4c98-a33d-8eccf5f23307:link_87aa4d55-d0ff-4287-aa67-de9fd33bdcaf_dashboard", - "type": "dashboard" - }, - { - "id": "sentinel_one-acd472d9-a6b7-4a53-a58d-06c315764c8d", - "name": "96d47662-1411-4c98-a33d-8eccf5f23307:link_255c3f86-ba80-43a5-b1c9-077b54a35cae_dashboard", - "type": "dashboard" - }, - { - "id": "sentinel_one-9d3f16ad-d421-4475-b0e2-c9b3f795e0d5", - "name": "96d47662-1411-4c98-a33d-8eccf5f23307:link_e4098063-4b72-4076-9062-e0ec2cbaacdd_dashboard", - "type": "dashboard" - }, - { - "id": "sentinel_one-5881f5f0-bb2c-11ec-82b7-8fcb232e9538", - "name": "96d47662-1411-4c98-a33d-8eccf5f23307:link_a6a5c107-3f8e-48bd-b142-6aa46defabd2_dashboard", - "type": "dashboard" - }, - { - "id": "sentinel_one-0dd17490-bbb8-11ec-82b7-8fcb232e9538", - "name": "96d47662-1411-4c98-a33d-8eccf5f23307:link_8cbb5cad-64bb-48fc-a682-8083e3b46f94_dashboard", - "type": "dashboard" - }, { "id": "logs-*", "name": "1684da14-7484-42a6-91d6-b9659883e20d:indexpattern-datasource-layer-01d7bdc3-638b-4d23-9ae6-d24678743470", @@ -4229,52 +4201,92 @@ }, { "id": "logs-*", - "name": "301b13f1-59c8-40e0-80f8-ecc1892b938d:indexpattern-datasource-layer-a64559b1-90c9-4859-9d5f-2585172bcda4", + "name": "accf3797-c215-44a4-829d-c9ff30758f7b:indexpattern-datasource-layer-c5e5c6f0-5d4d-48f4-9ad4-727d5f1c0ebd", "type": "index-pattern" }, { "id": "logs-*", - "name": "301b13f1-59c8-40e0-80f8-ecc1892b938d:6f8ea6e2-8a4c-45ec-aa08-b533cc8e6ac4", + "name": "accf3797-c215-44a4-829d-c9ff30758f7b:af63bf2a-f185-4472-99fa-9c42ffadb4bc", "type": "index-pattern" }, { "id": "logs-*", - "name": "dc9ba6b7-0c35-4333-99ad-653d57c20fd7:indexpattern-datasource-layer-f83c655e-003c-4cc5-a2e3-789acb23b691", + "name": "213a2279-8bb5-491b-b0f0-d5a7a2473670:indexpattern-datasource-layer-9d8d04b8-42e9-488a-9c18-39f38153e46a", "type": "index-pattern" }, { "id": "logs-*", - "name": "dc9ba6b7-0c35-4333-99ad-653d57c20fd7:eabcac79-7f09-4f55-8d66-0df00a4f4358", + "name": "213a2279-8bb5-491b-b0f0-d5a7a2473670:5eccfc13-a814-49f3-9b20-9be2db6b75a9", "type": "index-pattern" }, { "id": "logs-*", - "name": "dc9ba6b7-0c35-4333-99ad-653d57c20fd7:33030a53-9eef-4416-9030-de2b09f3100f", + "name": "213a2279-8bb5-491b-b0f0-d5a7a2473670:2dfeb86f-904e-4f76-bd4a-502859e3ffa4", "type": "index-pattern" }, + { + "id": "sentinel_one-899f2630-bb27-11ec-82b7-8fcb232e9538", + "name": "96d47662-1411-4c98-a33d-8eccf5f23307:link_f4098683-cf5c-4602-9b24-9aea15918578_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-67844880-bbb5-11ec-82b7-8fcb232e9538", + "name": "96d47662-1411-4c98-a33d-8eccf5f23307:link_8deb9939-2ec5-4132-ba5f-b1df63e439b7_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-bcf1f680-bba3-11ec-82b7-8fcb232e9538", + "name": "96d47662-1411-4c98-a33d-8eccf5f23307:link_87aa4d55-d0ff-4287-aa67-de9fd33bdcaf_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-acd472d9-a6b7-4a53-a58d-06c315764c8d", + "name": "96d47662-1411-4c98-a33d-8eccf5f23307:link_255c3f86-ba80-43a5-b1c9-077b54a35cae_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-9d3f16ad-d421-4475-b0e2-c9b3f795e0d5", + "name": "96d47662-1411-4c98-a33d-8eccf5f23307:link_e4098063-4b72-4076-9062-e0ec2cbaacdd_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-5881f5f0-bb2c-11ec-82b7-8fcb232e9538", + "name": "96d47662-1411-4c98-a33d-8eccf5f23307:link_a6a5c107-3f8e-48bd-b142-6aa46defabd2_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-0dd17490-bbb8-11ec-82b7-8fcb232e9538", + "name": "96d47662-1411-4c98-a33d-8eccf5f23307:link_8cbb5cad-64bb-48fc-a682-8083e3b46f94_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-413bf268-78f7-4bea-b668-55b5adacbf08", + "name": "96d47662-1411-4c98-a33d-8eccf5f23307:link_f9cecb5e-18b1-4c47-9b7e-7269f673a147_dashboard", + "type": "dashboard" + }, { "id": "logs-*", - "name": "accf3797-c215-44a4-829d-c9ff30758f7b:indexpattern-datasource-layer-c5e5c6f0-5d4d-48f4-9ad4-727d5f1c0ebd", + "name": "dc9ba6b7-0c35-4333-99ad-653d57c20fd7:indexpattern-datasource-layer-f83c655e-003c-4cc5-a2e3-789acb23b691", "type": "index-pattern" }, { "id": "logs-*", - "name": "accf3797-c215-44a4-829d-c9ff30758f7b:af63bf2a-f185-4472-99fa-9c42ffadb4bc", + "name": "dc9ba6b7-0c35-4333-99ad-653d57c20fd7:eabcac79-7f09-4f55-8d66-0df00a4f4358", "type": "index-pattern" }, { "id": "logs-*", - "name": "213a2279-8bb5-491b-b0f0-d5a7a2473670:indexpattern-datasource-layer-9d8d04b8-42e9-488a-9c18-39f38153e46a", + "name": "dc9ba6b7-0c35-4333-99ad-653d57c20fd7:33030a53-9eef-4416-9030-de2b09f3100f", "type": "index-pattern" }, { "id": "logs-*", - "name": "213a2279-8bb5-491b-b0f0-d5a7a2473670:5eccfc13-a814-49f3-9b20-9be2db6b75a9", + "name": "301b13f1-59c8-40e0-80f8-ecc1892b938d:indexpattern-datasource-layer-a64559b1-90c9-4859-9d5f-2585172bcda4", "type": "index-pattern" }, { "id": "logs-*", - "name": "213a2279-8bb5-491b-b0f0-d5a7a2473670:2dfeb86f-904e-4f76-bd4a-502859e3ffa4", + "name": "301b13f1-59c8-40e0-80f8-ecc1892b938d:6f8ea6e2-8a4c-45ec-aa08-b533cc8e6ac4", "type": "index-pattern" }, { diff --git a/packages/sentinel_one/kibana/dashboard/sentinel_one-413bf268-78f7-4bea-b668-55b5adacbf08.json b/packages/sentinel_one/kibana/dashboard/sentinel_one-413bf268-78f7-4bea-b668-55b5adacbf08.json new file mode 100644 index 00000000000..20e6ef2ca71 --- /dev/null +++ b/packages/sentinel_one/kibana/dashboard/sentinel_one-413bf268-78f7-4bea-b668-55b5adacbf08.json @@ -0,0 +1,1656 @@ +{ + "attributes": { + "controlGroupInput": { + "chainingSystem": "HIERARCHICAL", + "controlStyle": "oneLine", + "ignoreParentSettingsJSON": { + "ignoreFilters": false, + "ignoreQuery": false, + "ignoreTimerange": false, + "ignoreValidations": false + }, + "panelsJSON": { + "54be5b45-06d1-4e3b-9717-449bd247105d": { + "explicitInput": { + "dataViewId": "logs-*", + "fieldName": "user.name", + "searchTechnique": "prefix", + "selectedOptions": [], + "sort": { + "by": "_count", + "direction": "desc" + }, + "title": "User Name" + }, + "grow": true, + "order": 1, + "type": "optionsListControl", + "width": "medium" + }, + "e77e3fdd-579c-407d-8947-4579dd191531": { + "explicitInput": { + "dataViewId": "logs-*", + "fieldName": "event.id", + "searchTechnique": "prefix", + "selectedOptions": [], + "sort": { + "by": "_count", + "direction": "desc" + }, + "title": "Event ID" + }, + "grow": true, + "order": 0, + "type": "optionsListControl", + "width": "medium" + } + }, + "showApplySelections": false + }, + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "query": { + "language": "kuery", + "query": "" + } + } + }, + "optionsJSON": { + "hidePanelTitles": false, + "syncColors": false, + "syncCursor": true, + "syncTooltips": false, + "useMargins": true + }, + "panelsJSON": [ + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-84b3f5e8-3f77-4321-be5a-509c706f64fc", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "84b3f5e8-3f77-4321-be5a-509c706f64fc": { + "columnOrder": [ + "5df1c211-1eb3-4a81-a499-b48ddfac2a7e", + "dde9e6e9-ff36-4f27-ac4b-bfc9a52df9b5" + ], + "columns": { + "5df1c211-1eb3-4a81-a499-b48ddfac2a7e": { + "dataType": "string", + "isBucketed": true, + "label": "Top 30 values of file.type", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [ + "Unknown" + ], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "columnId": "dde9e6e9-ff36-4f27-ac4b-bfc9a52df9b5", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 30 + }, + "scale": "ordinal", + "sourceField": "file.type" + }, + "dde9e6e9-ff36-4f27-ac4b-bfc9a52df9b5": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Count", + "operationType": "count", + "params": { + "emptyAsNull": false + }, + "scale": "ratio", + "sourceField": "___records___" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "layers": [ + { + "categoryDisplay": "default", + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "eui_amsterdam_color_blind", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rule": { + "type": "other" + }, + "touched": false + } + ] + }, + "layerId": "84b3f5e8-3f77-4321-be5a-509c706f64fc", + "layerType": "data", + "legendDisplay": "show", + "metrics": [ + "dde9e6e9-ff36-4f27-ac4b-bfc9a52df9b5" + ], + "nestedLegend": false, + "numberDisplay": "percent", + "primaryGroups": [ + "5df1c211-1eb3-4a81-a499-b48ddfac2a7e" + ], + "secondaryGroups": null, + "truncateLegend": false + } + ], + "shape": "pie" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsPie" + }, + "enhancements": { + "dynamicActions": { + "events": [] + } + }, + "filters": [], + "query": { + "language": "kuery", + "query": "" + }, + "syncColors": false, + "syncCursor": true, + "syncTooltips": false + }, + "gridData": { + "h": 15, + "i": "1d969a62-fef3-49cf-9cb7-e85f58838945", + "w": 24, + "x": 24, + "y": 39 + }, + "panelIndex": "1d969a62-fef3-49cf-9cb7-e85f58838945", + "title": "Threat Events by User", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "layout": "vertical", + "links": [ + { + "destinationRefName": "link_7f353e09-4ed5-48db-b5e9-a7c061fe6f2c_dashboard", + "id": "7f353e09-4ed5-48db-b5e9-a7c061fe6f2c", + "label": "Activities", + "order": 0, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_dca4702c-fe3a-4370-bcb9-6b0b1d916bda_dashboard", + "id": "dca4702c-fe3a-4370-bcb9-6b0b1d916bda", + "label": "Agents", + "order": 1, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_9b517a21-1545-4647-b27d-9ae352625d5a_dashboard", + "id": "9b517a21-1545-4647-b27d-9ae352625d5a", + "label": "Alerts", + "order": 2, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_b9d6a48b-8734-4307-a47d-879e237fee6b_dashboard", + "id": "b9d6a48b-8734-4307-a47d-879e237fee6b", + "label": "Application", + "order": 3, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_710ca0e7-8ab2-411e-9a7e-ff317d99a750_dashboard", + "id": "710ca0e7-8ab2-411e-9a7e-ff317d99a750", + "label": "Application Risk", + "order": 4, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_81cbde88-b25e-47cb-ab85-659afe99cf83_dashboard", + "id": "81cbde88-b25e-47cb-ab85-659afe99cf83", + "label": "Groups", + "order": 5, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_4221b0f1-92f7-4984-9c87-7a48ffa93828_dashboard", + "id": "4221b0f1-92f7-4984-9c87-7a48ffa93828", + "label": "Threats", + "order": 6, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_d32aebbf-b3b8-430c-b720-54ec75f85e22_dashboard", + "id": "d32aebbf-b3b8-430c-b720-54ec75f85e22", + "label": "Threat Events", + "order": 7, + "type": "dashboardLink" + } + ] + }, + "enhancements": {} + }, + "gridData": { + "h": 13, + "i": "5d7434d7-fc6e-4928-9a04-330d7a1517e9", + "w": 10, + "x": 0, + "y": 0 + }, + "panelIndex": "5d7434d7-fc6e-4928-9a04-330d7a1517e9", + "title": "Navigation", + "type": "links" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-bd39ffce-e2d8-4023-8eef-4558a4b1632f", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "9ddd4c62-8efa-4c22-8800-c6a4b4d4153f", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "c186ee58-4044-4c4d-bb9a-c92d89d97511", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "bd39ffce-e2d8-4023-8eef-4558a4b1632f": { + "columnOrder": [ + "00e6fa2b-060a-442c-aa66-a3b8496dd9d4", + "d5b1287c-7588-400a-a974-f5b9aa3f53cb" + ], + "columns": { + "00e6fa2b-060a-442c-aa66-a3b8496dd9d4": { + "customLabel": true, + "dataType": "date", + "isBucketed": true, + "label": "Timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": false, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + }, + "d5b1287c-7588-400a-a974-f5b9aa3f53cb": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Count", + "operationType": "count", + "params": { + "emptyAsNull": false + }, + "scale": "ratio", + "sourceField": "___records___" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "data_stream.dataset", + "index": "9ddd4c62-8efa-4c22-8800-c6a4b4d4153f", + "key": "data_stream.dataset", + "negate": false, + "params": { + "query": "sentinel_one.threat_event" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "data_stream.dataset": "sentinel_one.threat_event" + } + } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "labels.is_transform_source", + "index": "c186ee58-4044-4c4d-bb9a-c92d89d97511", + "key": "labels.is_transform_source", + "negate": false, + "params": { + "query": "false" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "labels.is_transform_source": "false" + } + } + } + ], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "layers": [ + { + "accessors": [ + "d5b1287c-7588-400a-a974-f5b9aa3f53cb" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "eui_amsterdam_color_blind", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rule": { + "type": "other" + }, + "touched": false + } + ] + }, + "layerId": "bd39ffce-e2d8-4023-8eef-4558a4b1632f", + "layerType": "data", + "position": "top", + "seriesType": "line", + "showGridlines": false, + "xAccessor": "00e6fa2b-060a-442c-aa66-a3b8496dd9d4" + } + ], + "legend": { + "isVisible": true, + "position": "right", + "shouldTruncate": false + }, + "preferredSeriesType": "line", + "title": "Empty XY chart", + "valueLabels": "hide" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "enhancements": { + "dynamicActions": { + "events": [] + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "data_stream.dataset", + "index": "9ddd4c62-8efa-4c22-8800-c6a4b4d4153f", + "key": "data_stream.dataset", + "negate": false, + "params": { + "query": "sentinel_one.threat_event" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "data_stream.dataset": "sentinel_one.threat_event" + } + } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "labels.is_transform_source", + "index": "c186ee58-4044-4c4d-bb9a-c92d89d97511", + "key": "labels.is_transform_source", + "negate": false, + "params": { + "query": "false" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "labels.is_transform_source": "false" + } + } + } + ], + "query": { + "language": "kuery", + "query": "" + }, + "syncColors": false, + "syncCursor": true, + "syncTooltips": false + }, + "gridData": { + "h": 17, + "i": "52e8196e-a441-49e7-901b-2c13a072cd6e", + "w": 38, + "x": 10, + "y": 0 + }, + "panelIndex": "52e8196e-a441-49e7-901b-2c13a072cd6e", + "title": "Threat Events over Time", + "type": "lens" + }, + { + "embeddableConfig": { + "enhancements": { + "dynamicActions": { + "events": [] + } + }, + "savedVis": { + "data": { + "aggs": [], + "searchSource": { + "filter": [], + "query": { + "language": "kuery", + "query": "" + } + } + }, + "description": "", + "id": "", + "params": { + "fontSize": 12, + "markdown": "**Overview**\n\nThis dashboard provides a comprehensive view of SentinelOne Threat Events, helping analysts monitor and investigate potential security incidents effectively. The Threat Events Over Time trend highlights activity spikes and emerging threats, while Threat Events by User and Indicator Name visualize which users and threat indicators are most frequently involved. Threat Events by File Type offers insight into commonly targeted or malicious file formats. Additionally, the Top Source and Destination IPs tables identify key network endpoints associated with threat activity, aiding in rapid detection, containment, and response.\n\n[**Integrations Page**](/app/integrations/detail/sentinel_one/overview)", + "openLinksInNewTab": false + }, + "title": "", + "type": "markdown", + "uiState": {} + } + }, + "gridData": { + "h": 26, + "i": "276efa99-fcfe-462c-a23c-13c8afb83cd2", + "w": 10, + "x": 0, + "y": 13 + }, + "panelIndex": "276efa99-fcfe-462c-a23c-13c8afb83cd2", + "type": "visualization" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-6adecb30-ba39-4c43-aa8a-d750b53794d2", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "ccc8b035-b93a-4ac2-9f45-a9ff469a454d", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "56a806ff-3e27-4f78-b768-a4dd0e4c14ce", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "6adecb30-ba39-4c43-aa8a-d750b53794d2": { + "columnOrder": [ + "5825ba7a-1ec3-4c52-a0fe-c1ae519db875", + "95317bc8-1e22-4bba-a554-5956c5f3aa22" + ], + "columns": { + "5825ba7a-1ec3-4c52-a0fe-c1ae519db875": { + "customLabel": true, + "dataType": "string", + "isBucketed": true, + "label": "File Type", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "columnId": "95317bc8-1e22-4bba-a554-5956c5f3aa22", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 10 + }, + "scale": "ordinal", + "sourceField": "file.type" + }, + "95317bc8-1e22-4bba-a554-5956c5f3aa22": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Count", + "operationType": "count", + "params": { + "emptyAsNull": false + }, + "scale": "ratio", + "sourceField": "___records___" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "data_stream.dataset", + "index": "ccc8b035-b93a-4ac2-9f45-a9ff469a454d", + "key": "data_stream.dataset", + "negate": false, + "params": { + "query": "sentinel_one.threat_event" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "data_stream.dataset": "sentinel_one.threat_event" + } + } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "labels.is_transform_source", + "index": "56a806ff-3e27-4f78-b768-a4dd0e4c14ce", + "key": "labels.is_transform_source", + "negate": false, + "params": { + "query": "false" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "labels.is_transform_source": "false" + } + } + } + ], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "layers": [ + { + "accessors": [ + "95317bc8-1e22-4bba-a554-5956c5f3aa22" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "eui_amsterdam_color_blind", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rule": { + "type": "other" + }, + "touched": false + } + ] + }, + "layerId": "6adecb30-ba39-4c43-aa8a-d750b53794d2", + "layerType": "data", + "position": "top", + "seriesType": "bar_horizontal_stacked", + "showGridlines": false, + "xAccessor": "5825ba7a-1ec3-4c52-a0fe-c1ae519db875" + } + ], + "legend": { + "isVisible": true, + "position": "right", + "shouldTruncate": false + }, + "preferredSeriesType": "bar_stacked", + "title": "Empty XY chart", + "valueLabels": "hide" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "enhancements": { + "dynamicActions": { + "events": [] + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "data_stream.dataset", + "index": "ccc8b035-b93a-4ac2-9f45-a9ff469a454d", + "key": "data_stream.dataset", + "negate": false, + "params": { + "query": "sentinel_one.threat_event" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "data_stream.dataset": "sentinel_one.threat_event" + } + } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "labels.is_transform_source", + "index": "56a806ff-3e27-4f78-b768-a4dd0e4c14ce", + "key": "labels.is_transform_source", + "negate": false, + "params": { + "query": "false" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "labels.is_transform_source": "false" + } + } + } + ], + "query": { + "language": "kuery", + "query": "" + }, + "syncColors": false, + "syncCursor": true, + "syncTooltips": false + }, + "gridData": { + "h": 15, + "i": "b346c136-462f-42be-971d-c2fd569925f8", + "w": 24, + "x": 0, + "y": 39 + }, + "panelIndex": "b346c136-462f-42be-971d-c2fd569925f8", + "title": "Threat Events by File Type", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-bb455125-92a9-4a19-812b-4c606c76bcbd", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "16b529d5-9f9d-4333-bc1c-24b3a4758088", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "971f9173-93ed-44ba-bdfe-b83ede1616b3", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "bb455125-92a9-4a19-812b-4c606c76bcbd": { + "columnOrder": [ + "93dbffe0-4c92-4948-9f76-95244f8c364d", + "8422488d-992e-40d5-9a45-93f68bb7f191" + ], + "columns": { + "8422488d-992e-40d5-9a45-93f68bb7f191": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Count", + "operationType": "count", + "params": { + "emptyAsNull": false + }, + "scale": "ratio", + "sourceField": "___records___" + }, + "93dbffe0-4c92-4948-9f76-95244f8c364d": { + "customLabel": true, + "dataType": "string", + "isBucketed": true, + "label": "Threat Indicator Name", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "columnId": "8422488d-992e-40d5-9a45-93f68bb7f191", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 10 + }, + "scale": "ordinal", + "sourceField": "threat.indicator.name" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "data_stream.dataset", + "index": "16b529d5-9f9d-4333-bc1c-24b3a4758088", + "key": "data_stream.dataset", + "negate": false, + "params": { + "query": "sentinel_one.threat_event" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "data_stream.dataset": "sentinel_one.threat_event" + } + } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "labels.is_transform_source", + "index": "971f9173-93ed-44ba-bdfe-b83ede1616b3", + "key": "labels.is_transform_source", + "negate": false, + "params": { + "query": "false" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "labels.is_transform_source": "false" + } + } + } + ], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "layers": [ + { + "accessors": [ + "8422488d-992e-40d5-9a45-93f68bb7f191" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "eui_amsterdam_color_blind", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rule": { + "type": "other" + }, + "touched": false + } + ] + }, + "layerId": "bb455125-92a9-4a19-812b-4c606c76bcbd", + "layerType": "data", + "position": "top", + "seriesType": "bar_horizontal_stacked", + "showGridlines": false, + "xAccessor": "93dbffe0-4c92-4948-9f76-95244f8c364d" + } + ], + "legend": { + "isVisible": true, + "position": "right", + "shouldTruncate": false + }, + "preferredSeriesType": "bar_stacked", + "title": "Empty XY chart", + "valueLabels": "hide" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "enhancements": { + "dynamicActions": { + "events": [] + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "data_stream.dataset", + "index": "16b529d5-9f9d-4333-bc1c-24b3a4758088", + "key": "data_stream.dataset", + "negate": false, + "params": { + "query": "sentinel_one.threat_event" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "data_stream.dataset": "sentinel_one.threat_event" + } + } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "labels.is_transform_source", + "index": "971f9173-93ed-44ba-bdfe-b83ede1616b3", + "key": "labels.is_transform_source", + "negate": false, + "params": { + "query": "false" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "labels.is_transform_source": "false" + } + } + } + ], + "query": { + "language": "kuery", + "query": "" + }, + "syncColors": false, + "syncCursor": true, + "syncTooltips": false + }, + "gridData": { + "h": 16, + "i": "6cc85613-d12a-4896-af43-becf646b9c9e", + "w": 48, + "x": 0, + "y": 54 + }, + "panelIndex": "6cc85613-d12a-4896-af43-becf646b9c9e", + "title": "Threat Events by Indicator Name", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-98d2b68c-ac37-421d-8f2f-8585794b1500", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "currentIndexPatternId": "logs-*", + "layers": { + "98d2b68c-ac37-421d-8f2f-8585794b1500": { + "columnOrder": [ + "035729af-810d-4528-9099-40465fc27f17", + "019e0104-5c05-4068-a089-36eef7da3ca7" + ], + "columns": { + "019e0104-5c05-4068-a089-36eef7da3ca7": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Count", + "operationType": "count", + "params": { + "emptyAsNull": false + }, + "scale": "ratio", + "sourceField": "___records___" + }, + "035729af-810d-4528-9099-40465fc27f17": { + "customLabel": true, + "dataType": "ip", + "isBucketed": true, + "label": "Destination IP", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "columnId": "019e0104-5c05-4068-a089-36eef7da3ca7", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": false, + "parentFormat": { + "id": "terms" + }, + "size": 3 + }, + "scale": "ordinal", + "sourceField": "destination.ip" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "indexPatternId": "logs-*", + "sampling": 1 + } + } + }, + "indexpattern": { + "currentIndexPatternId": "logs-*", + "layers": {} + }, + "textBased": { + "indexPatternRefs": [ + { + "id": "logs-*", + "timeField": "@timestamp", + "title": "logs-*" + } + ], + "initialContext": null, + "layers": {} + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "data_stream.dataset", + "index": "80d05f75-7116-4866-b839-bfa5142e90ca", + "key": "data_stream.dataset", + "negate": false, + "params": { + "query": "sentinel_one.threat_event" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "data_stream.dataset": "sentinel_one.threat_event" + } + } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "labels.is_transform_source", + "index": "b15fffb5-0bd4-47e5-abbc-73f745aff02a", + "key": "labels.is_transform_source", + "negate": false, + "params": { + "query": "false" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "labels.is_transform_source": "false" + } + } + } + ], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "columns": [ + { + "columnId": "035729af-810d-4528-9099-40465fc27f17", + "isMetric": false, + "isTransposed": false + }, + { + "columnId": "019e0104-5c05-4068-a089-36eef7da3ca7", + "isMetric": true, + "isTransposed": false + } + ], + "layerId": "98d2b68c-ac37-421d-8f2f-8585794b1500", + "layerType": "data" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsDatatable" + }, + "enhancements": { + "dynamicActions": { + "events": [] + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "data_stream.dataset", + "index": "80d05f75-7116-4866-b839-bfa5142e90ca", + "key": "data_stream.dataset", + "negate": false, + "params": { + "query": "sentinel_one.threat_event" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "data_stream.dataset": "sentinel_one.threat_event" + } + } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "labels.is_transform_source", + "index": "b15fffb5-0bd4-47e5-abbc-73f745aff02a", + "key": "labels.is_transform_source", + "negate": false, + "params": { + "query": "false" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "labels.is_transform_source": "false" + } + } + } + ], + "query": { + "language": "kuery", + "query": "" + }, + "syncColors": false, + "syncCursor": true, + "syncTooltips": false + }, + "gridData": { + "h": 22, + "i": "b50512ff-53e3-4e0d-96f1-0698031602fd", + "w": 19, + "x": 29, + "y": 17 + }, + "panelIndex": "b50512ff-53e3-4e0d-96f1-0698031602fd", + "title": "Top Destination IPs", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-01c0b982-7c4c-43a8-a239-1ef6a6d14de1", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "0434ab6d-b665-4280-9c7e-db2227f4290c", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "78dbbf0c-8fa6-45a9-97ce-f01dc71c303d", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "01c0b982-7c4c-43a8-a239-1ef6a6d14de1": { + "columnOrder": [ + "6e3ad618-47d4-46d5-a588-fd1773c4f145", + "106f34bf-38dc-4085-bc42-ac7fddd25c50" + ], + "columns": { + "106f34bf-38dc-4085-bc42-ac7fddd25c50": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Count", + "operationType": "count", + "params": { + "emptyAsNull": false + }, + "scale": "ratio", + "sourceField": "___records___" + }, + "6e3ad618-47d4-46d5-a588-fd1773c4f145": { + "customLabel": true, + "dataType": "ip", + "isBucketed": true, + "label": "Source IP", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "columnId": "106f34bf-38dc-4085-bc42-ac7fddd25c50", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": false, + "parentFormat": { + "id": "terms" + }, + "size": 10 + }, + "scale": "ordinal", + "sourceField": "source.ip" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "data_stream.dataset", + "index": "0434ab6d-b665-4280-9c7e-db2227f4290c", + "key": "data_stream.dataset", + "negate": false, + "params": { + "query": "sentinel_one.threat_event" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "data_stream.dataset": "sentinel_one.threat_event" + } + } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "labels.is_transform_source", + "index": "78dbbf0c-8fa6-45a9-97ce-f01dc71c303d", + "key": "labels.is_transform_source", + "negate": false, + "params": { + "query": "false" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "labels.is_transform_source": "false" + } + } + } + ], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "columns": [ + { + "columnId": "6e3ad618-47d4-46d5-a588-fd1773c4f145", + "isMetric": false, + "isTransposed": false + }, + { + "columnId": "106f34bf-38dc-4085-bc42-ac7fddd25c50", + "isMetric": true, + "isTransposed": false + } + ], + "layerId": "01c0b982-7c4c-43a8-a239-1ef6a6d14de1", + "layerType": "data" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsDatatable" + }, + "enhancements": { + "dynamicActions": { + "events": [] + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "data_stream.dataset", + "index": "0434ab6d-b665-4280-9c7e-db2227f4290c", + "key": "data_stream.dataset", + "negate": false, + "params": { + "query": "sentinel_one.threat_event" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "data_stream.dataset": "sentinel_one.threat_event" + } + } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "labels.is_transform_source", + "index": "78dbbf0c-8fa6-45a9-97ce-f01dc71c303d", + "key": "labels.is_transform_source", + "negate": false, + "params": { + "query": "false" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "labels.is_transform_source": "false" + } + } + } + ], + "query": { + "language": "kuery", + "query": "" + }, + "syncColors": false, + "syncCursor": true, + "syncTooltips": false + }, + "gridData": { + "h": 22, + "i": "808c3921-df43-4a4b-824b-f7f412e2b8b6", + "w": 19, + "x": 10, + "y": 17 + }, + "panelIndex": "808c3921-df43-4a4b-824b-f7f412e2b8b6", + "title": "Top Source IPs", + "type": "lens" + } + ], + "timeRestore": false, + "title": "[Logs SentinelOne] Threat Events", + "version": 3 + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2025-10-27T18:28:47.690Z", + "created_by": "u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0", + "id": "sentinel_one-413bf268-78f7-4bea-b668-55b5adacbf08", + "references": [ + { + "id": "logs-*", + "name": "1d969a62-fef3-49cf-9cb7-e85f58838945:indexpattern-datasource-layer-84b3f5e8-3f77-4321-be5a-509c706f64fc", + "type": "index-pattern" + }, + { + "id": "sentinel_one-899f2630-bb27-11ec-82b7-8fcb232e9538", + "name": "5d7434d7-fc6e-4928-9a04-330d7a1517e9:link_7f353e09-4ed5-48db-b5e9-a7c061fe6f2c_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-67844880-bbb5-11ec-82b7-8fcb232e9538", + "name": "5d7434d7-fc6e-4928-9a04-330d7a1517e9:link_dca4702c-fe3a-4370-bcb9-6b0b1d916bda_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-bcf1f680-bba3-11ec-82b7-8fcb232e9538", + "name": "5d7434d7-fc6e-4928-9a04-330d7a1517e9:link_9b517a21-1545-4647-b27d-9ae352625d5a_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-acd472d9-a6b7-4a53-a58d-06c315764c8d", + "name": "5d7434d7-fc6e-4928-9a04-330d7a1517e9:link_b9d6a48b-8734-4307-a47d-879e237fee6b_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-9d3f16ad-d421-4475-b0e2-c9b3f795e0d5", + "name": "5d7434d7-fc6e-4928-9a04-330d7a1517e9:link_710ca0e7-8ab2-411e-9a7e-ff317d99a750_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-5881f5f0-bb2c-11ec-82b7-8fcb232e9538", + "name": "5d7434d7-fc6e-4928-9a04-330d7a1517e9:link_81cbde88-b25e-47cb-ab85-659afe99cf83_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-0dd17490-bbb8-11ec-82b7-8fcb232e9538", + "name": "5d7434d7-fc6e-4928-9a04-330d7a1517e9:link_4221b0f1-92f7-4984-9c87-7a48ffa93828_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-413bf268-78f7-4bea-b668-55b5adacbf08", + "name": "5d7434d7-fc6e-4928-9a04-330d7a1517e9:link_d32aebbf-b3b8-430c-b720-54ec75f85e22_dashboard", + "type": "dashboard" + }, + { + "id": "logs-*", + "name": "52e8196e-a441-49e7-901b-2c13a072cd6e:indexpattern-datasource-layer-bd39ffce-e2d8-4023-8eef-4558a4b1632f", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "52e8196e-a441-49e7-901b-2c13a072cd6e:9ddd4c62-8efa-4c22-8800-c6a4b4d4153f", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "52e8196e-a441-49e7-901b-2c13a072cd6e:c186ee58-4044-4c4d-bb9a-c92d89d97511", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "b346c136-462f-42be-971d-c2fd569925f8:indexpattern-datasource-layer-6adecb30-ba39-4c43-aa8a-d750b53794d2", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "b346c136-462f-42be-971d-c2fd569925f8:ccc8b035-b93a-4ac2-9f45-a9ff469a454d", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "b346c136-462f-42be-971d-c2fd569925f8:56a806ff-3e27-4f78-b768-a4dd0e4c14ce", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "6cc85613-d12a-4896-af43-becf646b9c9e:indexpattern-datasource-layer-bb455125-92a9-4a19-812b-4c606c76bcbd", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "6cc85613-d12a-4896-af43-becf646b9c9e:16b529d5-9f9d-4333-bc1c-24b3a4758088", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "6cc85613-d12a-4896-af43-becf646b9c9e:971f9173-93ed-44ba-bdfe-b83ede1616b3", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "b50512ff-53e3-4e0d-96f1-0698031602fd:indexpattern-datasource-layer-98d2b68c-ac37-421d-8f2f-8585794b1500", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "808c3921-df43-4a4b-824b-f7f412e2b8b6:indexpattern-datasource-layer-01c0b982-7c4c-43a8-a239-1ef6a6d14de1", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "808c3921-df43-4a4b-824b-f7f412e2b8b6:0434ab6d-b665-4280-9c7e-db2227f4290c", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "808c3921-df43-4a4b-824b-f7f412e2b8b6:78dbbf0c-8fa6-45a9-97ce-f01dc71c303d", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "controlGroup_e77e3fdd-579c-407d-8947-4579dd191531:optionsListDataView", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "controlGroup_54be5b45-06d1-4e3b-9717-449bd247105d:optionsListDataView", + "type": "index-pattern" + } + ], + "type": "dashboard", + "typeMigrationVersion": "10.2.0", + "updated_by": "u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0" +} \ No newline at end of file diff --git a/packages/sentinel_one/kibana/dashboard/sentinel_one-5881f5f0-bb2c-11ec-82b7-8fcb232e9538.json b/packages/sentinel_one/kibana/dashboard/sentinel_one-5881f5f0-bb2c-11ec-82b7-8fcb232e9538.json index 5fe50cec65b..203c58536f9 100644 --- a/packages/sentinel_one/kibana/dashboard/sentinel_one-5881f5f0-bb2c-11ec-82b7-8fcb232e9538.json +++ b/packages/sentinel_one/kibana/dashboard/sentinel_one-5881f5f0-bb2c-11ec-82b7-8fcb232e9538.json @@ -83,110 +83,6 @@ "useMargins": true }, "panelsJSON": [ - { - "embeddableConfig": { - "attributes": { - "layout": "vertical", - "links": [ - { - "destinationRefName": "link_0bcbb1fa-7d97-488a-9198-bc0ac712229e_dashboard", - "id": "0bcbb1fa-7d97-488a-9198-bc0ac712229e", - "label": "Activities", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 0, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_45e6c331-8ed7-433f-bf55-5b8d08b6f770_dashboard", - "id": "45e6c331-8ed7-433f-bf55-5b8d08b6f770", - "label": "Agents", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 1, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_64046556-1dbd-4e7c-b7c4-35edc515d7e3_dashboard", - "id": "64046556-1dbd-4e7c-b7c4-35edc515d7e3", - "label": "Alerts", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 2, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_4317b4ea-9795-44df-b333-8f0c584fdc0d_dashboard", - "id": "4317b4ea-9795-44df-b333-8f0c584fdc0d", - "label": "Application", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 3, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_ef8b2f3d-7f87-47c2-a262-8f82f322c2e7_dashboard", - "id": "ef8b2f3d-7f87-47c2-a262-8f82f322c2e7", - "label": "Application Risk", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 4, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_f48c0ce1-bcf1-4ca6-9fef-3d3fa7ecc91c_dashboard", - "id": "f48c0ce1-bcf1-4ca6-9fef-3d3fa7ecc91c", - "label": "Groups", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 5, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_23a7efb8-0ecb-4605-8462-3685d3f70634_dashboard", - "id": "23a7efb8-0ecb-4605-8462-3685d3f70634", - "label": "Threats", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 6, - "type": "dashboardLink" - } - ] - }, - "enhancements": {} - }, - "gridData": { - "h": 12, - "i": "ef9d506d-8b22-4d26-b3fe-a3d8e6b268f3", - "w": 10, - "x": 0, - "y": 0 - }, - "panelIndex": "ef9d506d-8b22-4d26-b3fe-a3d8e6b268f3", - "title": "Navigation", - "type": "links" - }, { "embeddableConfig": { "attributes": { @@ -820,47 +716,6 @@ "panelIndex": "26084a13-4083-4c3e-9f81-677b4ca38ca7", "type": "lens" }, - { - "embeddableConfig": { - "enhancements": { - "dynamicActions": { - "events": [] - } - }, - "savedVis": { - "data": { - "aggs": [], - "searchSource": { - "filter": [], - "query": { - "language": "kuery", - "query": "" - } - } - }, - "description": "", - "id": "", - "params": { - "fontSize": 12, - "markdown": "**Overview**\n\nThe Groups Dashboard offers an overview of group-related insights within the environment. At the top, a key metric displays the total number of groups. Pie charts provide a breakdown of groups by rank and type, helping to understand their distribution and categorization. A bar chart shows groups by agent count, making it easy to identify groups with higher concentrations of agents. Finally, a table lists the top 10 group creators, offering visibility into the most active creators for better management and auditing.\n\n[**Integrations Page**](/app/integrations/detail/sentinel_one/overview)", - "openLinksInNewTab": false - }, - "title": "", - "type": "markdown", - "uiState": {} - } - }, - "gridData": { - "h": 31, - "i": "12e33f1a-06c0-4dde-ae49-fb2aa441c371", - "w": 10, - "x": 0, - "y": 12 - }, - "panelIndex": "12e33f1a-06c0-4dde-ae49-fb2aa441c371", - "title": "Table of Contents", - "type": "visualization" - }, { "embeddableConfig": { "attributes": { @@ -1018,6 +873,158 @@ }, "panelIndex": "4694770f-8a83-4877-992c-1a078c45e3c6", "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "layout": "vertical", + "links": [ + { + "destinationRefName": "link_0bcbb1fa-7d97-488a-9198-bc0ac712229e_dashboard", + "id": "0bcbb1fa-7d97-488a-9198-bc0ac712229e", + "label": "Activities", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 0, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_45e6c331-8ed7-433f-bf55-5b8d08b6f770_dashboard", + "id": "45e6c331-8ed7-433f-bf55-5b8d08b6f770", + "label": "Agents", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 1, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_64046556-1dbd-4e7c-b7c4-35edc515d7e3_dashboard", + "id": "64046556-1dbd-4e7c-b7c4-35edc515d7e3", + "label": "Alerts", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 2, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_4317b4ea-9795-44df-b333-8f0c584fdc0d_dashboard", + "id": "4317b4ea-9795-44df-b333-8f0c584fdc0d", + "label": "Application", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 3, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_ef8b2f3d-7f87-47c2-a262-8f82f322c2e7_dashboard", + "id": "ef8b2f3d-7f87-47c2-a262-8f82f322c2e7", + "label": "Application Risk", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 4, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_f48c0ce1-bcf1-4ca6-9fef-3d3fa7ecc91c_dashboard", + "id": "f48c0ce1-bcf1-4ca6-9fef-3d3fa7ecc91c", + "label": "Groups", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 5, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_23a7efb8-0ecb-4605-8462-3685d3f70634_dashboard", + "id": "23a7efb8-0ecb-4605-8462-3685d3f70634", + "label": "Threats", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 6, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_44b09a95-27eb-4203-a194-38a075039d29_dashboard", + "id": "44b09a95-27eb-4203-a194-38a075039d29", + "label": "Threat Events", + "order": 7, + "type": "dashboardLink" + } + ] + }, + "enhancements": {} + }, + "gridData": { + "h": 13, + "i": "ef9d506d-8b22-4d26-b3fe-a3d8e6b268f3", + "w": 10, + "x": 0, + "y": 0 + }, + "panelIndex": "ef9d506d-8b22-4d26-b3fe-a3d8e6b268f3", + "title": "Navigation", + "type": "links" + }, + { + "embeddableConfig": { + "enhancements": { + "dynamicActions": { + "events": [] + } + }, + "savedVis": { + "data": { + "aggs": [], + "searchSource": { + "filter": [], + "query": { + "language": "kuery", + "query": "" + } + } + }, + "description": "", + "id": "", + "params": { + "fontSize": 12, + "markdown": "**Overview**\n\nThe Groups Dashboard offers an overview of group-related insights within the environment. At the top, a key metric displays the total number of groups. Pie charts provide a breakdown of groups by rank and type, helping to understand their distribution and categorization. A bar chart shows groups by agent count, making it easy to identify groups with higher concentrations of agents. Finally, a table lists the top 10 group creators, offering visibility into the most active creators for better management and auditing.\n\n[**Integrations Page**](/app/integrations/detail/sentinel_one/overview)", + "openLinksInNewTab": false + }, + "title": "", + "type": "markdown", + "uiState": {} + } + }, + "gridData": { + "h": 30, + "i": "12e33f1a-06c0-4dde-ae49-fb2aa441c371", + "w": 10, + "x": 0, + "y": 13 + }, + "panelIndex": "12e33f1a-06c0-4dde-ae49-fb2aa441c371", + "title": "Table of Contents", + "type": "visualization" } ], "timeRestore": false, @@ -1025,7 +1032,7 @@ "version": 3 }, "coreMigrationVersion": "8.8.0", - "created_at": "2025-10-06T10:09:51.036Z", + "created_at": "2025-10-27T19:44:46.699Z", "id": "sentinel_one-5881f5f0-bb2c-11ec-82b7-8fcb232e9538", "references": [ { @@ -1038,41 +1045,6 @@ "name": "tag-ref-security-solution-default", "type": "tag" }, - { - "id": "sentinel_one-899f2630-bb27-11ec-82b7-8fcb232e9538", - "name": "ef9d506d-8b22-4d26-b3fe-a3d8e6b268f3:link_0bcbb1fa-7d97-488a-9198-bc0ac712229e_dashboard", - "type": "dashboard" - }, - { - "id": "sentinel_one-67844880-bbb5-11ec-82b7-8fcb232e9538", - "name": "ef9d506d-8b22-4d26-b3fe-a3d8e6b268f3:link_45e6c331-8ed7-433f-bf55-5b8d08b6f770_dashboard", - "type": "dashboard" - }, - { - "id": "sentinel_one-bcf1f680-bba3-11ec-82b7-8fcb232e9538", - "name": "ef9d506d-8b22-4d26-b3fe-a3d8e6b268f3:link_64046556-1dbd-4e7c-b7c4-35edc515d7e3_dashboard", - "type": "dashboard" - }, - { - "id": "sentinel_one-acd472d9-a6b7-4a53-a58d-06c315764c8d", - "name": "ef9d506d-8b22-4d26-b3fe-a3d8e6b268f3:link_4317b4ea-9795-44df-b333-8f0c584fdc0d_dashboard", - "type": "dashboard" - }, - { - "id": "sentinel_one-9d3f16ad-d421-4475-b0e2-c9b3f795e0d5", - "name": "ef9d506d-8b22-4d26-b3fe-a3d8e6b268f3:link_ef8b2f3d-7f87-47c2-a262-8f82f322c2e7_dashboard", - "type": "dashboard" - }, - { - "id": "sentinel_one-5881f5f0-bb2c-11ec-82b7-8fcb232e9538", - "name": "ef9d506d-8b22-4d26-b3fe-a3d8e6b268f3:link_f48c0ce1-bcf1-4ca6-9fef-3d3fa7ecc91c_dashboard", - "type": "dashboard" - }, - { - "id": "sentinel_one-0dd17490-bbb8-11ec-82b7-8fcb232e9538", - "name": "ef9d506d-8b22-4d26-b3fe-a3d8e6b268f3:link_23a7efb8-0ecb-4605-8462-3685d3f70634_dashboard", - "type": "dashboard" - }, { "id": "logs-*", "name": "c4c1c721-dabf-4a99-bd53-934afe7bb4d7:indexpattern-datasource-layer-1b0e558e-537e-40a9-bc0a-f8b42329c6b5", @@ -1123,6 +1095,46 @@ "name": "4694770f-8a83-4877-992c-1a078c45e3c6:52dff4e0-68f1-43c5-b4f9-c8f0d477cb3e", "type": "index-pattern" }, + { + "id": "sentinel_one-899f2630-bb27-11ec-82b7-8fcb232e9538", + "name": "ef9d506d-8b22-4d26-b3fe-a3d8e6b268f3:link_0bcbb1fa-7d97-488a-9198-bc0ac712229e_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-67844880-bbb5-11ec-82b7-8fcb232e9538", + "name": "ef9d506d-8b22-4d26-b3fe-a3d8e6b268f3:link_45e6c331-8ed7-433f-bf55-5b8d08b6f770_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-bcf1f680-bba3-11ec-82b7-8fcb232e9538", + "name": "ef9d506d-8b22-4d26-b3fe-a3d8e6b268f3:link_64046556-1dbd-4e7c-b7c4-35edc515d7e3_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-acd472d9-a6b7-4a53-a58d-06c315764c8d", + "name": "ef9d506d-8b22-4d26-b3fe-a3d8e6b268f3:link_4317b4ea-9795-44df-b333-8f0c584fdc0d_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-9d3f16ad-d421-4475-b0e2-c9b3f795e0d5", + "name": "ef9d506d-8b22-4d26-b3fe-a3d8e6b268f3:link_ef8b2f3d-7f87-47c2-a262-8f82f322c2e7_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-5881f5f0-bb2c-11ec-82b7-8fcb232e9538", + "name": "ef9d506d-8b22-4d26-b3fe-a3d8e6b268f3:link_f48c0ce1-bcf1-4ca6-9fef-3d3fa7ecc91c_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-0dd17490-bbb8-11ec-82b7-8fcb232e9538", + "name": "ef9d506d-8b22-4d26-b3fe-a3d8e6b268f3:link_23a7efb8-0ecb-4605-8462-3685d3f70634_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-413bf268-78f7-4bea-b668-55b5adacbf08", + "name": "ef9d506d-8b22-4d26-b3fe-a3d8e6b268f3:link_44b09a95-27eb-4203-a194-38a075039d29_dashboard", + "type": "dashboard" + }, { "id": "logs-*", "name": "controlGroup_5dae62b6-bb2a-41ec-a2e8-71a4d0e4786e:optionsListDataView", diff --git a/packages/sentinel_one/kibana/dashboard/sentinel_one-67844880-bbb5-11ec-82b7-8fcb232e9538.json b/packages/sentinel_one/kibana/dashboard/sentinel_one-67844880-bbb5-11ec-82b7-8fcb232e9538.json index aade797120f..f09b9a11f5b 100644 --- a/packages/sentinel_one/kibana/dashboard/sentinel_one-67844880-bbb5-11ec-82b7-8fcb232e9538.json +++ b/packages/sentinel_one/kibana/dashboard/sentinel_one-67844880-bbb5-11ec-82b7-8fcb232e9538.json @@ -1479,110 +1479,6 @@ "panelIndex": "a6230b4c-2b1a-4db7-96f5-a8b767794e6a", "type": "lens" }, - { - "embeddableConfig": { - "attributes": { - "layout": "vertical", - "links": [ - { - "destinationRefName": "link_52f9fd42-bbac-4b9f-80d4-ec601095196f_dashboard", - "id": "52f9fd42-bbac-4b9f-80d4-ec601095196f", - "label": "Activities", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 0, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_eeb3cde3-9528-49b5-931f-f876186a797f_dashboard", - "id": "eeb3cde3-9528-49b5-931f-f876186a797f", - "label": "Agents", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 1, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_fd77b638-3178-4922-8a5d-3888e694f2cd_dashboard", - "id": "fd77b638-3178-4922-8a5d-3888e694f2cd", - "label": "Alerts", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 2, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_7874cd4f-76dd-4e0e-8855-b2140620ab79_dashboard", - "id": "7874cd4f-76dd-4e0e-8855-b2140620ab79", - "label": "Application", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 3, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_2a4f48d7-ea97-452f-9475-a856d2880aaf_dashboard", - "id": "2a4f48d7-ea97-452f-9475-a856d2880aaf", - "label": "Application Risk", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 4, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_8307b976-ffd0-4b58-97d9-99b0e4931f1f_dashboard", - "id": "8307b976-ffd0-4b58-97d9-99b0e4931f1f", - "label": "Groups", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 5, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_df39f05e-cae4-473a-8513-d07af4088128_dashboard", - "id": "df39f05e-cae4-473a-8513-d07af4088128", - "label": "Threats", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 6, - "type": "dashboardLink" - } - ] - }, - "enhancements": {} - }, - "gridData": { - "h": 12, - "i": "d4c39dde-4003-46a3-8eec-e8874c0b373c", - "w": 10, - "x": 0, - "y": 0 - }, - "panelIndex": "d4c39dde-4003-46a3-8eec-e8874c0b373c", - "title": "Navigation", - "type": "links" - }, { "embeddableConfig": { "attributes": { @@ -3138,6 +3034,117 @@ "panelIndex": "88da7d9d-b377-4455-a528-719f58c796f7", "type": "lens" }, + { + "embeddableConfig": { + "attributes": { + "layout": "vertical", + "links": [ + { + "destinationRefName": "link_52f9fd42-bbac-4b9f-80d4-ec601095196f_dashboard", + "id": "52f9fd42-bbac-4b9f-80d4-ec601095196f", + "label": "Activities", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 0, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_eeb3cde3-9528-49b5-931f-f876186a797f_dashboard", + "id": "eeb3cde3-9528-49b5-931f-f876186a797f", + "label": "Agents", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 1, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_fd77b638-3178-4922-8a5d-3888e694f2cd_dashboard", + "id": "fd77b638-3178-4922-8a5d-3888e694f2cd", + "label": "Alerts", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 2, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_7874cd4f-76dd-4e0e-8855-b2140620ab79_dashboard", + "id": "7874cd4f-76dd-4e0e-8855-b2140620ab79", + "label": "Application", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 3, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_2a4f48d7-ea97-452f-9475-a856d2880aaf_dashboard", + "id": "2a4f48d7-ea97-452f-9475-a856d2880aaf", + "label": "Application Risk", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 4, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_8307b976-ffd0-4b58-97d9-99b0e4931f1f_dashboard", + "id": "8307b976-ffd0-4b58-97d9-99b0e4931f1f", + "label": "Groups", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 5, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_df39f05e-cae4-473a-8513-d07af4088128_dashboard", + "id": "df39f05e-cae4-473a-8513-d07af4088128", + "label": "Threats", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 6, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_10bff287-8eec-4a50-8b0e-fa897e4658a5_dashboard", + "id": "10bff287-8eec-4a50-8b0e-fa897e4658a5", + "label": "Threat Events", + "order": 7, + "type": "dashboardLink" + } + ] + }, + "enhancements": {} + }, + "gridData": { + "h": 13, + "i": "d4c39dde-4003-46a3-8eec-e8874c0b373c", + "w": 10, + "x": 0, + "y": 0 + }, + "panelIndex": "d4c39dde-4003-46a3-8eec-e8874c0b373c", + "title": "Navigation", + "type": "links" + }, { "embeddableConfig": { "enhancements": { @@ -3169,11 +3176,11 @@ } }, "gridData": { - "h": 49, + "h": 48, "i": "117ca9ec-9cd9-46c3-bb02-bbde555ea01e", "w": 10, "x": 0, - "y": 12 + "y": 13 }, "panelIndex": "117ca9ec-9cd9-46c3-bb02-bbde555ea01e", "title": "Table of Contents", @@ -3185,7 +3192,7 @@ "version": 3 }, "coreMigrationVersion": "8.8.0", - "created_at": "2025-10-06T10:09:47.006Z", + "created_at": "2025-10-27T19:44:42.642Z", "id": "sentinel_one-67844880-bbb5-11ec-82b7-8fcb232e9538", "references": [ { @@ -3283,41 +3290,6 @@ "name": "a6230b4c-2b1a-4db7-96f5-a8b767794e6a:210b916d-f74f-442a-b396-9625ba85ced4", "type": "index-pattern" }, - { - "id": "sentinel_one-899f2630-bb27-11ec-82b7-8fcb232e9538", - "name": "d4c39dde-4003-46a3-8eec-e8874c0b373c:link_52f9fd42-bbac-4b9f-80d4-ec601095196f_dashboard", - "type": "dashboard" - }, - { - "id": "sentinel_one-67844880-bbb5-11ec-82b7-8fcb232e9538", - "name": "d4c39dde-4003-46a3-8eec-e8874c0b373c:link_eeb3cde3-9528-49b5-931f-f876186a797f_dashboard", - "type": "dashboard" - }, - { - "id": "sentinel_one-bcf1f680-bba3-11ec-82b7-8fcb232e9538", - "name": "d4c39dde-4003-46a3-8eec-e8874c0b373c:link_fd77b638-3178-4922-8a5d-3888e694f2cd_dashboard", - "type": "dashboard" - }, - { - "id": "sentinel_one-acd472d9-a6b7-4a53-a58d-06c315764c8d", - "name": "d4c39dde-4003-46a3-8eec-e8874c0b373c:link_7874cd4f-76dd-4e0e-8855-b2140620ab79_dashboard", - "type": "dashboard" - }, - { - "id": "sentinel_one-9d3f16ad-d421-4475-b0e2-c9b3f795e0d5", - "name": "d4c39dde-4003-46a3-8eec-e8874c0b373c:link_2a4f48d7-ea97-452f-9475-a856d2880aaf_dashboard", - "type": "dashboard" - }, - { - "id": "sentinel_one-5881f5f0-bb2c-11ec-82b7-8fcb232e9538", - "name": "d4c39dde-4003-46a3-8eec-e8874c0b373c:link_8307b976-ffd0-4b58-97d9-99b0e4931f1f_dashboard", - "type": "dashboard" - }, - { - "id": "sentinel_one-0dd17490-bbb8-11ec-82b7-8fcb232e9538", - "name": "d4c39dde-4003-46a3-8eec-e8874c0b373c:link_df39f05e-cae4-473a-8513-d07af4088128_dashboard", - "type": "dashboard" - }, { "id": "logs-*", "name": "a1308966-3dec-431c-82e3-29890ad87785:indexpattern-datasource-layer-e4082dc4-e9cc-4589-aed3-bf66cdac7d34", @@ -3423,6 +3395,46 @@ "name": "88da7d9d-b377-4455-a528-719f58c796f7:759d39de-195e-4c49-b2ab-6c4020f5c8df", "type": "index-pattern" }, + { + "id": "sentinel_one-899f2630-bb27-11ec-82b7-8fcb232e9538", + "name": "d4c39dde-4003-46a3-8eec-e8874c0b373c:link_52f9fd42-bbac-4b9f-80d4-ec601095196f_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-67844880-bbb5-11ec-82b7-8fcb232e9538", + "name": "d4c39dde-4003-46a3-8eec-e8874c0b373c:link_eeb3cde3-9528-49b5-931f-f876186a797f_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-bcf1f680-bba3-11ec-82b7-8fcb232e9538", + "name": "d4c39dde-4003-46a3-8eec-e8874c0b373c:link_fd77b638-3178-4922-8a5d-3888e694f2cd_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-acd472d9-a6b7-4a53-a58d-06c315764c8d", + "name": "d4c39dde-4003-46a3-8eec-e8874c0b373c:link_7874cd4f-76dd-4e0e-8855-b2140620ab79_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-9d3f16ad-d421-4475-b0e2-c9b3f795e0d5", + "name": "d4c39dde-4003-46a3-8eec-e8874c0b373c:link_2a4f48d7-ea97-452f-9475-a856d2880aaf_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-5881f5f0-bb2c-11ec-82b7-8fcb232e9538", + "name": "d4c39dde-4003-46a3-8eec-e8874c0b373c:link_8307b976-ffd0-4b58-97d9-99b0e4931f1f_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-0dd17490-bbb8-11ec-82b7-8fcb232e9538", + "name": "d4c39dde-4003-46a3-8eec-e8874c0b373c:link_df39f05e-cae4-473a-8513-d07af4088128_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-413bf268-78f7-4bea-b668-55b5adacbf08", + "name": "d4c39dde-4003-46a3-8eec-e8874c0b373c:link_10bff287-8eec-4a50-8b0e-fa897e4658a5_dashboard", + "type": "dashboard" + }, { "id": "logs-*", "name": "controlGroup_c1048b25-930c-47d0-8e45-eeebfee87fba:optionsListDataView", diff --git a/packages/sentinel_one/kibana/dashboard/sentinel_one-899f2630-bb27-11ec-82b7-8fcb232e9538.json b/packages/sentinel_one/kibana/dashboard/sentinel_one-899f2630-bb27-11ec-82b7-8fcb232e9538.json index f386d94a9a0..6ed22e0f948 100644 --- a/packages/sentinel_one/kibana/dashboard/sentinel_one-899f2630-bb27-11ec-82b7-8fcb232e9538.json +++ b/packages/sentinel_one/kibana/dashboard/sentinel_one-899f2630-bb27-11ec-82b7-8fcb232e9538.json @@ -381,110 +381,6 @@ "panelIndex": "822b1071-df2f-43bd-84a8-da1bcdd97528", "type": "lens" }, - { - "embeddableConfig": { - "attributes": { - "layout": "vertical", - "links": [ - { - "destinationRefName": "link_7c6029cf-8f42-4127-8a61-7ef0fc6aa58b_dashboard", - "id": "7c6029cf-8f42-4127-8a61-7ef0fc6aa58b", - "label": "Activities", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 0, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_8ce64390-457f-468d-b124-5680a5a21b26_dashboard", - "id": "8ce64390-457f-468d-b124-5680a5a21b26", - "label": "Agents", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 1, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_d8da014b-1528-4750-b0ee-847e4da3ad0e_dashboard", - "id": "d8da014b-1528-4750-b0ee-847e4da3ad0e", - "label": "Alerts", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 2, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_b9ca2221-4f96-4709-9bd8-8697bca76c4e_dashboard", - "id": "b9ca2221-4f96-4709-9bd8-8697bca76c4e", - "label": "Application", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 3, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_ab017407-9d33-4877-9516-510ab696ea7b_dashboard", - "id": "ab017407-9d33-4877-9516-510ab696ea7b", - "label": "Application Risk", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 4, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_b619f0bd-8ea8-45a0-a3c4-a6b5efdb6224_dashboard", - "id": "b619f0bd-8ea8-45a0-a3c4-a6b5efdb6224", - "label": "Groups", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 5, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_1e414e69-58cd-49ee-866a-fe7a134e8802_dashboard", - "id": "1e414e69-58cd-49ee-866a-fe7a134e8802", - "label": "Threats", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 6, - "type": "dashboardLink" - } - ] - }, - "enhancements": {} - }, - "gridData": { - "h": 12, - "i": "f77c1173-e086-4886-820c-ecdabfba0a72", - "w": 10, - "x": 0, - "y": 0 - }, - "panelIndex": "f77c1173-e086-4886-820c-ecdabfba0a72", - "title": "Navigation", - "type": "links" - }, { "embeddableConfig": { "attributes": { @@ -1330,6 +1226,117 @@ "title": "Top 10 Primary Description by Computer Name", "type": "lens" }, + { + "embeddableConfig": { + "attributes": { + "layout": "vertical", + "links": [ + { + "destinationRefName": "link_7c6029cf-8f42-4127-8a61-7ef0fc6aa58b_dashboard", + "id": "7c6029cf-8f42-4127-8a61-7ef0fc6aa58b", + "label": "Activities", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 0, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_8ce64390-457f-468d-b124-5680a5a21b26_dashboard", + "id": "8ce64390-457f-468d-b124-5680a5a21b26", + "label": "Agents", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 1, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_d8da014b-1528-4750-b0ee-847e4da3ad0e_dashboard", + "id": "d8da014b-1528-4750-b0ee-847e4da3ad0e", + "label": "Alerts", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 2, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_b9ca2221-4f96-4709-9bd8-8697bca76c4e_dashboard", + "id": "b9ca2221-4f96-4709-9bd8-8697bca76c4e", + "label": "Application", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 3, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_ab017407-9d33-4877-9516-510ab696ea7b_dashboard", + "id": "ab017407-9d33-4877-9516-510ab696ea7b", + "label": "Application Risk", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 4, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_b619f0bd-8ea8-45a0-a3c4-a6b5efdb6224_dashboard", + "id": "b619f0bd-8ea8-45a0-a3c4-a6b5efdb6224", + "label": "Groups", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 5, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_1e414e69-58cd-49ee-866a-fe7a134e8802_dashboard", + "id": "1e414e69-58cd-49ee-866a-fe7a134e8802", + "label": "Threats", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 6, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_f066dfd9-2919-46a7-8e42-473b792c3f47_dashboard", + "id": "f066dfd9-2919-46a7-8e42-473b792c3f47", + "label": "Threat Events", + "order": 7, + "type": "dashboardLink" + } + ] + }, + "enhancements": {} + }, + "gridData": { + "h": 13, + "i": "f77c1173-e086-4886-820c-ecdabfba0a72", + "w": 10, + "x": 0, + "y": 0 + }, + "panelIndex": "f77c1173-e086-4886-820c-ecdabfba0a72", + "title": "Navigation", + "type": "links" + }, { "embeddableConfig": { "enhancements": { @@ -1361,11 +1368,11 @@ } }, "gridData": { - "h": 32, + "h": 31, "i": "074b445d-d7a2-4617-a654-5c34a22101c8", "w": 10, "x": 0, - "y": 12 + "y": 13 }, "panelIndex": "074b445d-d7a2-4617-a654-5c34a22101c8", "title": "Table of Contents", @@ -1377,7 +1384,7 @@ "version": 3 }, "coreMigrationVersion": "8.8.0", - "created_at": "2025-10-06T10:09:46.298Z", + "created_at": "2025-10-27T19:44:42.345Z", "id": "sentinel_one-899f2630-bb27-11ec-82b7-8fcb232e9538", "references": [ { @@ -1410,41 +1417,6 @@ "name": "822b1071-df2f-43bd-84a8-da1bcdd97528:cb6d2a1b-ab3d-4ed8-8124-cb224449636d", "type": "index-pattern" }, - { - "id": "sentinel_one-899f2630-bb27-11ec-82b7-8fcb232e9538", - "name": "f77c1173-e086-4886-820c-ecdabfba0a72:link_7c6029cf-8f42-4127-8a61-7ef0fc6aa58b_dashboard", - "type": "dashboard" - }, - { - "id": "sentinel_one-67844880-bbb5-11ec-82b7-8fcb232e9538", - "name": "f77c1173-e086-4886-820c-ecdabfba0a72:link_8ce64390-457f-468d-b124-5680a5a21b26_dashboard", - "type": "dashboard" - }, - { - "id": "sentinel_one-bcf1f680-bba3-11ec-82b7-8fcb232e9538", - "name": "f77c1173-e086-4886-820c-ecdabfba0a72:link_d8da014b-1528-4750-b0ee-847e4da3ad0e_dashboard", - "type": "dashboard" - }, - { - "id": "sentinel_one-acd472d9-a6b7-4a53-a58d-06c315764c8d", - "name": "f77c1173-e086-4886-820c-ecdabfba0a72:link_b9ca2221-4f96-4709-9bd8-8697bca76c4e_dashboard", - "type": "dashboard" - }, - { - "id": "sentinel_one-9d3f16ad-d421-4475-b0e2-c9b3f795e0d5", - "name": "f77c1173-e086-4886-820c-ecdabfba0a72:link_ab017407-9d33-4877-9516-510ab696ea7b_dashboard", - "type": "dashboard" - }, - { - "id": "sentinel_one-5881f5f0-bb2c-11ec-82b7-8fcb232e9538", - "name": "f77c1173-e086-4886-820c-ecdabfba0a72:link_b619f0bd-8ea8-45a0-a3c4-a6b5efdb6224_dashboard", - "type": "dashboard" - }, - { - "id": "sentinel_one-0dd17490-bbb8-11ec-82b7-8fcb232e9538", - "name": "f77c1173-e086-4886-820c-ecdabfba0a72:link_1e414e69-58cd-49ee-866a-fe7a134e8802_dashboard", - "type": "dashboard" - }, { "id": "logs-*", "name": "6b1d0060-0c72-441e-9901-855d5ee70a67:indexpattern-datasource-layer-3aa4f16e-85bd-466a-b665-445b6d5de2cd", @@ -1500,6 +1472,46 @@ "name": "6776b675-6e78-4293-9419-abb2052779a9:d1a621a7-c64f-469d-9e3e-42f36a5f5b9b", "type": "index-pattern" }, + { + "id": "sentinel_one-899f2630-bb27-11ec-82b7-8fcb232e9538", + "name": "f77c1173-e086-4886-820c-ecdabfba0a72:link_7c6029cf-8f42-4127-8a61-7ef0fc6aa58b_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-67844880-bbb5-11ec-82b7-8fcb232e9538", + "name": "f77c1173-e086-4886-820c-ecdabfba0a72:link_8ce64390-457f-468d-b124-5680a5a21b26_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-bcf1f680-bba3-11ec-82b7-8fcb232e9538", + "name": "f77c1173-e086-4886-820c-ecdabfba0a72:link_d8da014b-1528-4750-b0ee-847e4da3ad0e_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-acd472d9-a6b7-4a53-a58d-06c315764c8d", + "name": "f77c1173-e086-4886-820c-ecdabfba0a72:link_b9ca2221-4f96-4709-9bd8-8697bca76c4e_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-9d3f16ad-d421-4475-b0e2-c9b3f795e0d5", + "name": "f77c1173-e086-4886-820c-ecdabfba0a72:link_ab017407-9d33-4877-9516-510ab696ea7b_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-5881f5f0-bb2c-11ec-82b7-8fcb232e9538", + "name": "f77c1173-e086-4886-820c-ecdabfba0a72:link_b619f0bd-8ea8-45a0-a3c4-a6b5efdb6224_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-0dd17490-bbb8-11ec-82b7-8fcb232e9538", + "name": "f77c1173-e086-4886-820c-ecdabfba0a72:link_1e414e69-58cd-49ee-866a-fe7a134e8802_dashboard", + "type": "dashboard" + }, + { + "id": "sentinel_one-413bf268-78f7-4bea-b668-55b5adacbf08", + "name": "f77c1173-e086-4886-820c-ecdabfba0a72:link_f066dfd9-2919-46a7-8e42-473b792c3f47_dashboard", + "type": "dashboard" + }, { "id": "logs-*", "name": "controlGroup_693cf6a7-fb3a-438d-b23c-58a15baf8392:optionsListDataView", diff --git a/packages/sentinel_one/kibana/dashboard/sentinel_one-9d3f16ad-d421-4475-b0e2-c9b3f795e0d5.json b/packages/sentinel_one/kibana/dashboard/sentinel_one-9d3f16ad-d421-4475-b0e2-c9b3f795e0d5.json index 576a2f6931b..c5942bcb078 100644 --- a/packages/sentinel_one/kibana/dashboard/sentinel_one-9d3f16ad-d421-4475-b0e2-c9b3f795e0d5.json +++ b/packages/sentinel_one/kibana/dashboard/sentinel_one-9d3f16ad-d421-4475-b0e2-c9b3f795e0d5.json @@ -609,151 +609,6 @@ "title": "Application Vulnerability by Severity", "type": "lens" }, - { - "embeddableConfig": { - "attributes": { - "layout": "vertical", - "links": [ - { - "destinationRefName": "link_efea38fe-a94d-46dc-b168-28394982113c_dashboard", - "id": "efea38fe-a94d-46dc-b168-28394982113c", - "label": "Activities", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 0, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_7cce4ee8-b858-43ad-bd67-f7b8c86a606e_dashboard", - "id": "7cce4ee8-b858-43ad-bd67-f7b8c86a606e", - "label": "Agents", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 1, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_5f8c6014-3ecd-41ae-aef1-e1abbef83140_dashboard", - "id": "5f8c6014-3ecd-41ae-aef1-e1abbef83140", - "label": "Alerts", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 2, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_fdab263c-7cde-4859-b9de-725d6e71eb0c_dashboard", - "id": "fdab263c-7cde-4859-b9de-725d6e71eb0c", - "label": "Application", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 3, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_3ec3f897-ecd7-41f3-9bbc-b154dc1bbb23_dashboard", - "id": "3ec3f897-ecd7-41f3-9bbc-b154dc1bbb23", - "label": "Application Risk", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 4, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_7d0782b6-e727-4606-9e1c-a74efecf4c65_dashboard", - "id": "7d0782b6-e727-4606-9e1c-a74efecf4c65", - "label": "Groups", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 5, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_867d4423-712f-43dc-9ff0-e9180b57c533_dashboard", - "id": "867d4423-712f-43dc-9ff0-e9180b57c533", - "label": "Threats", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 6, - "type": "dashboardLink" - } - ] - }, - "enhancements": {} - }, - "gridData": { - "h": 11, - "i": "0406f25f-089d-4874-9c95-b9bb8206f23a", - "w": 10, - "x": 0, - "y": 0 - }, - "panelIndex": "0406f25f-089d-4874-9c95-b9bb8206f23a", - "title": "Navigation", - "type": "links" - }, - { - "embeddableConfig": { - "enhancements": { - "dynamicActions": { - "events": [] - } - }, - "savedVis": { - "data": { - "aggs": [], - "searchSource": { - "filter": [], - "query": { - "language": "kuery", - "query": "" - } - } - }, - "description": "", - "id": "", - "params": { - "fontSize": 12, - "markdown": "**Overview**\n\nThis dashboard provides a clear overview of application risk data from the SentinelOne integration. It includes total vulnerability metrics, highlights the number of high and critical vulnerabilities, and visualizes application vulnerabilities by severity through a pie chart. A bar chart shows the distribution of applications based on their vulnerability count, while a table lists the top vulnerabilities for deeper insight.\n\n[**Integrations Page**](/app/integrations/detail/sentinel_one/overview)", - "openLinksInNewTab": false - }, - "title": "", - "type": "markdown", - "uiState": {} - } - }, - "gridData": { - "h": 33, - "i": "1bc96a69-6907-4a25-9000-f1d476808080", - "w": 10, - "x": 0, - "y": 11 - }, - "panelIndex": "1bc96a69-6907-4a25-9000-f1d476808080", - "title": "Table of Content", - "type": "visualization" - }, { "embeddableConfig": { "attributes": { @@ -1134,6 +989,158 @@ "panelIndex": "a317ce8c-e92a-4b6e-9887-0bb678a25cf8", "title": "Top Vulnerability", "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "layout": "vertical", + "links": [ + { + "destinationRefName": "link_efea38fe-a94d-46dc-b168-28394982113c_dashboard", + "id": "efea38fe-a94d-46dc-b168-28394982113c", + "label": "Activities", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 0, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_7cce4ee8-b858-43ad-bd67-f7b8c86a606e_dashboard", + "id": "7cce4ee8-b858-43ad-bd67-f7b8c86a606e", + "label": "Agents", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 1, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_5f8c6014-3ecd-41ae-aef1-e1abbef83140_dashboard", + "id": "5f8c6014-3ecd-41ae-aef1-e1abbef83140", + "label": "Alerts", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 2, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_fdab263c-7cde-4859-b9de-725d6e71eb0c_dashboard", + "id": "fdab263c-7cde-4859-b9de-725d6e71eb0c", + "label": "Application", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 3, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_3ec3f897-ecd7-41f3-9bbc-b154dc1bbb23_dashboard", + "id": "3ec3f897-ecd7-41f3-9bbc-b154dc1bbb23", + "label": "Application Risk", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 4, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_7d0782b6-e727-4606-9e1c-a74efecf4c65_dashboard", + "id": "7d0782b6-e727-4606-9e1c-a74efecf4c65", + "label": "Groups", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 5, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_867d4423-712f-43dc-9ff0-e9180b57c533_dashboard", + "id": "867d4423-712f-43dc-9ff0-e9180b57c533", + "label": "Threats", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 6, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_b02f8849-3fc2-4530-9ee3-d47c16963f63_dashboard", + "id": "b02f8849-3fc2-4530-9ee3-d47c16963f63", + "label": "Threat Events", + "order": 7, + "type": "dashboardLink" + } + ] + }, + "enhancements": {} + }, + "gridData": { + "h": 13, + "i": "0406f25f-089d-4874-9c95-b9bb8206f23a", + "w": 10, + "x": 0, + "y": 0 + }, + "panelIndex": "0406f25f-089d-4874-9c95-b9bb8206f23a", + "title": "Navigation", + "type": "links" + }, + { + "embeddableConfig": { + "enhancements": { + "dynamicActions": { + "events": [] + } + }, + "savedVis": { + "data": { + "aggs": [], + "searchSource": { + "filter": [], + "query": { + "language": "kuery", + "query": "" + } + } + }, + "description": "", + "id": "", + "params": { + "fontSize": 12, + "markdown": "**Overview**\n\nThis dashboard provides a clear overview of application risk data from the SentinelOne integration. It includes total vulnerability metrics, highlights the number of high and critical vulnerabilities, and visualizes application vulnerabilities by severity through a pie chart. A bar chart shows the distribution of applications based on their vulnerability count, while a table lists the top vulnerabilities for deeper insight.\n\n[**Integrations Page**](/app/integrations/detail/sentinel_one/overview)", + "openLinksInNewTab": false + }, + "title": "", + "type": "markdown", + "uiState": {} + } + }, + "gridData": { + "h": 31, + "i": "1bc96a69-6907-4a25-9000-f1d476808080", + "w": 10, + "x": 0, + "y": 13 + }, + "panelIndex": "1bc96a69-6907-4a25-9000-f1d476808080", + "title": "Table of Content", + "type": "visualization" } ], "timeRestore": false, @@ -1141,7 +1148,7 @@ "version": 3 }, "coreMigrationVersion": "8.8.0", - "created_at": "2025-10-06T10:09:50.025Z", + "created_at": "2025-10-27T19:44:45.662Z", "id": "sentinel_one-9d3f16ad-d421-4475-b0e2-c9b3f795e0d5", "references": [ { @@ -1189,6 +1196,26 @@ "name": "b301c7d1-65fb-4e9c-bd88-149976cbfaa6:616b71d6-348f-4e22-969f-04b8d2a29c90", "type": "index-pattern" }, + { + "id": "logs-*", + "name": "a02957bb-1603-4f3e-8bb9-35244d6690a7:indexpattern-datasource-layer-d6a2a1d4-7970-4e71-87ff-b30c10342bad", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "a02957bb-1603-4f3e-8bb9-35244d6690a7:8787a6ed-278b-4eea-9967-e12a3dbeb417", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "a317ce8c-e92a-4b6e-9887-0bb678a25cf8:indexpattern-datasource-layer-e18d30d0-f39a-4d0f-8044-0fcbd1862198", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "a317ce8c-e92a-4b6e-9887-0bb678a25cf8:ae1f4334-1303-4cbc-9644-28c064db2a6a", + "type": "index-pattern" + }, { "id": "sentinel_one-899f2630-bb27-11ec-82b7-8fcb232e9538", "name": "0406f25f-089d-4874-9c95-b9bb8206f23a:link_efea38fe-a94d-46dc-b168-28394982113c_dashboard", @@ -1225,24 +1252,9 @@ "type": "dashboard" }, { - "id": "logs-*", - "name": "a02957bb-1603-4f3e-8bb9-35244d6690a7:indexpattern-datasource-layer-d6a2a1d4-7970-4e71-87ff-b30c10342bad", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "a02957bb-1603-4f3e-8bb9-35244d6690a7:8787a6ed-278b-4eea-9967-e12a3dbeb417", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "a317ce8c-e92a-4b6e-9887-0bb678a25cf8:indexpattern-datasource-layer-e18d30d0-f39a-4d0f-8044-0fcbd1862198", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "a317ce8c-e92a-4b6e-9887-0bb678a25cf8:ae1f4334-1303-4cbc-9644-28c064db2a6a", - "type": "index-pattern" + "id": "sentinel_one-413bf268-78f7-4bea-b668-55b5adacbf08", + "name": "0406f25f-089d-4874-9c95-b9bb8206f23a:link_b02f8849-3fc2-4530-9ee3-d47c16963f63_dashboard", + "type": "dashboard" }, { "id": "logs-*", diff --git a/packages/sentinel_one/kibana/dashboard/sentinel_one-acd472d9-a6b7-4a53-a58d-06c315764c8d.json b/packages/sentinel_one/kibana/dashboard/sentinel_one-acd472d9-a6b7-4a53-a58d-06c315764c8d.json index db6e827fbbe..3f64aa05504 100644 --- a/packages/sentinel_one/kibana/dashboard/sentinel_one-acd472d9-a6b7-4a53-a58d-06c315764c8d.json +++ b/packages/sentinel_one/kibana/dashboard/sentinel_one-acd472d9-a6b7-4a53-a58d-06c315764c8d.json @@ -306,7 +306,7 @@ "i": "11ffffb5-230c-4b9a-b2f5-ab8919b22822", "w": 24, "x": 0, - "y": 34 + "y": 35 }, "panelIndex": "11ffffb5-230c-4b9a-b2f5-ab8919b22822", "title": "Applications by Host OS", @@ -557,116 +557,12 @@ "i": "6485ee8c-c0a6-4046-8510-5b308823b33b", "w": 24, "x": 24, - "y": 34 + "y": 35 }, "panelIndex": "6485ee8c-c0a6-4046-8510-5b308823b33b", "title": "Applications by Host Name", "type": "lens" }, - { - "embeddableConfig": { - "attributes": { - "layout": "vertical", - "links": [ - { - "destinationRefName": "link_81cc8355-af43-42be-a636-6650086f4e79_dashboard", - "id": "81cc8355-af43-42be-a636-6650086f4e79", - "label": "Activities", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 0, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_53c86433-0b66-4b46-88a3-a336138209de_dashboard", - "id": "53c86433-0b66-4b46-88a3-a336138209de", - "label": "Agents", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 1, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_b0539fc7-e321-4ace-b24e-9750a2644290_dashboard", - "id": "b0539fc7-e321-4ace-b24e-9750a2644290", - "label": "Alerts", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 2, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_e7d6602e-2e3f-40a1-b0ca-605d0183e3bc_dashboard", - "id": "e7d6602e-2e3f-40a1-b0ca-605d0183e3bc", - "label": "Application", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 3, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_7929e211-dc8d-4d6e-9cf2-69abc0906a72_dashboard", - "id": "7929e211-dc8d-4d6e-9cf2-69abc0906a72", - "label": "Application Risk", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 4, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_a7fe8f54-ed51-49bb-a051-ba9f2ec5b51b_dashboard", - "id": "a7fe8f54-ed51-49bb-a051-ba9f2ec5b51b", - "label": "Groups", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 5, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_3d77f510-2b08-4ec5-8ed1-121b05e9f580_dashboard", - "id": "3d77f510-2b08-4ec5-8ed1-121b05e9f580", - "label": "Threats", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 6, - "type": "dashboardLink" - } - ] - }, - "enhancements": {} - }, - "gridData": { - "h": 12, - "i": "20dce263-4407-4352-a6da-13f0145dfeac", - "w": 10, - "x": 0, - "y": 0 - }, - "panelIndex": "20dce263-4407-4352-a6da-13f0145dfeac", - "title": "Navigation", - "type": "links" - }, { "embeddableConfig": { "enhancements": { @@ -702,7 +598,7 @@ "i": "85d82c57-dd36-4041-a223-73c2f4442539", "w": 10, "x": 0, - "y": 12 + "y": 13 }, "panelIndex": "85d82c57-dd36-4041-a223-73c2f4442539", "title": "Table of Contents", @@ -948,6 +844,117 @@ "title": "Applications by Installation Time", "type": "lens" }, + { + "embeddableConfig": { + "attributes": { + "layout": "vertical", + "links": [ + { + "destinationRefName": "link_81cc8355-af43-42be-a636-6650086f4e79_dashboard", + "id": "81cc8355-af43-42be-a636-6650086f4e79", + "label": "Activities", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 0, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_53c86433-0b66-4b46-88a3-a336138209de_dashboard", + "id": "53c86433-0b66-4b46-88a3-a336138209de", + "label": "Agents", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 1, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_b0539fc7-e321-4ace-b24e-9750a2644290_dashboard", + "id": "b0539fc7-e321-4ace-b24e-9750a2644290", + "label": "Alerts", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 2, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_e7d6602e-2e3f-40a1-b0ca-605d0183e3bc_dashboard", + "id": "e7d6602e-2e3f-40a1-b0ca-605d0183e3bc", + "label": "Application", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 3, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_7929e211-dc8d-4d6e-9cf2-69abc0906a72_dashboard", + "id": "7929e211-dc8d-4d6e-9cf2-69abc0906a72", + "label": "Application Risk", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 4, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_a7fe8f54-ed51-49bb-a051-ba9f2ec5b51b_dashboard", + "id": "a7fe8f54-ed51-49bb-a051-ba9f2ec5b51b", + "label": "Groups", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 5, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_3d77f510-2b08-4ec5-8ed1-121b05e9f580_dashboard", + "id": "3d77f510-2b08-4ec5-8ed1-121b05e9f580", + "label": "Threats", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 6, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_7d5c2542-6482-467c-a9f1-cbe134232164_dashboard", + "id": "7d5c2542-6482-467c-a9f1-cbe134232164", + "label": "Threat Events", + "order": 7, + "type": "dashboardLink" + } + ] + }, + "enhancements": {} + }, + "gridData": { + "h": 13, + "i": "20dce263-4407-4352-a6da-13f0145dfeac", + "w": 10, + "x": 0, + "y": 0 + }, + "panelIndex": "20dce263-4407-4352-a6da-13f0145dfeac", + "title": "Navigation", + "type": "links" + }, { "embeddableConfig": { "attributes": { @@ -1176,7 +1183,7 @@ "syncTooltips": false }, "gridData": { - "h": 18, + "h": 19, "i": "7fd6d3f8-56ee-4f98-a5ed-93f0d9af50a7", "w": 38, "x": 10, @@ -1192,7 +1199,7 @@ "version": 3 }, "coreMigrationVersion": "8.8.0", - "created_at": "2025-10-06T10:09:49.017Z", + "created_at": "2025-10-27T19:44:44.653Z", "id": "sentinel_one-acd472d9-a6b7-4a53-a58d-06c315764c8d", "references": [ { @@ -1235,6 +1242,21 @@ "name": "6485ee8c-c0a6-4046-8510-5b308823b33b:a13846a5-ee17-4ade-969d-b887080d8326", "type": "index-pattern" }, + { + "id": "logs-*", + "name": "5dd87d43-fe2a-4e27-8f82-ce29182aca99:indexpattern-datasource-layer-80e9df50-99dc-4baa-9748-cd6f34848b25", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "5dd87d43-fe2a-4e27-8f82-ce29182aca99:a5fdd8ff-efa9-48f7-8eb4-d8d43a9581f3", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "5dd87d43-fe2a-4e27-8f82-ce29182aca99:fa090d58-647b-4b2c-afaf-19828e8d8b2b", + "type": "index-pattern" + }, { "id": "sentinel_one-899f2630-bb27-11ec-82b7-8fcb232e9538", "name": "20dce263-4407-4352-a6da-13f0145dfeac:link_81cc8355-af43-42be-a636-6650086f4e79_dashboard", @@ -1271,19 +1293,9 @@ "type": "dashboard" }, { - "id": "logs-*", - "name": "5dd87d43-fe2a-4e27-8f82-ce29182aca99:indexpattern-datasource-layer-80e9df50-99dc-4baa-9748-cd6f34848b25", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "5dd87d43-fe2a-4e27-8f82-ce29182aca99:a5fdd8ff-efa9-48f7-8eb4-d8d43a9581f3", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "5dd87d43-fe2a-4e27-8f82-ce29182aca99:fa090d58-647b-4b2c-afaf-19828e8d8b2b", - "type": "index-pattern" + "id": "sentinel_one-413bf268-78f7-4bea-b668-55b5adacbf08", + "name": "20dce263-4407-4352-a6da-13f0145dfeac:link_7d5c2542-6482-467c-a9f1-cbe134232164_dashboard", + "type": "dashboard" }, { "id": "logs-*", diff --git a/packages/sentinel_one/kibana/dashboard/sentinel_one-bcf1f680-bba3-11ec-82b7-8fcb232e9538.json b/packages/sentinel_one/kibana/dashboard/sentinel_one-bcf1f680-bba3-11ec-82b7-8fcb232e9538.json index edae1b6b992..9a15082b0ec 100644 --- a/packages/sentinel_one/kibana/dashboard/sentinel_one-bcf1f680-bba3-11ec-82b7-8fcb232e9538.json +++ b/packages/sentinel_one/kibana/dashboard/sentinel_one-bcf1f680-bba3-11ec-82b7-8fcb232e9538.json @@ -1070,151 +1070,6 @@ "title": "Alert Essential Details", "type": "search" }, - { - "embeddableConfig": { - "attributes": { - "layout": "vertical", - "links": [ - { - "destinationRefName": "link_54792b04-4904-4ce8-a469-58881d4b6b32_dashboard", - "id": "54792b04-4904-4ce8-a469-58881d4b6b32", - "label": "Activities", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 0, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_c21b4ea4-4679-49c9-ab3d-593cbe9372c9_dashboard", - "id": "c21b4ea4-4679-49c9-ab3d-593cbe9372c9", - "label": "Agents", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 1, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_aecf833a-b0ec-4363-87c8-7e95adc973a7_dashboard", - "id": "aecf833a-b0ec-4363-87c8-7e95adc973a7", - "label": "Alerts", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 2, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_44d2eef5-09db-4163-b9f1-810d1039996f_dashboard", - "id": "44d2eef5-09db-4163-b9f1-810d1039996f", - "label": "Application", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 3, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_af8841b0-1f67-47e8-8a2a-f842b82e386f_dashboard", - "id": "af8841b0-1f67-47e8-8a2a-f842b82e386f", - "label": "Application Risk", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 4, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_5138d751-e31f-44ae-ad0d-fe7b46f339ad_dashboard", - "id": "5138d751-e31f-44ae-ad0d-fe7b46f339ad", - "label": "Groups", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 5, - "type": "dashboardLink" - }, - { - "destinationRefName": "link_25247eb9-2bca-4653-8bfb-ca9cb5853024_dashboard", - "id": "25247eb9-2bca-4653-8bfb-ca9cb5853024", - "label": "Threats", - "options": { - "openInNewTab": false, - "useCurrentDateRange": true, - "useCurrentFilters": true - }, - "order": 6, - "type": "dashboardLink" - } - ] - }, - "enhancements": {} - }, - "gridData": { - "h": 12, - "i": "256b1f19-8d6b-4ec3-bd59-f258e29e2d06", - "w": 10, - "x": 0, - "y": 0 - }, - "panelIndex": "256b1f19-8d6b-4ec3-bd59-f258e29e2d06", - "title": "Navigation", - "type": "links" - }, - { - "embeddableConfig": { - "enhancements": { - "dynamicActions": { - "events": [] - } - }, - "savedVis": { - "data": { - "aggs": [], - "searchSource": { - "filter": [], - "query": { - "language": "kuery", - "query": "" - } - } - }, - "description": "", - "id": "", - "params": { - "fontSize": 12, - "markdown": "**Overview**\n\nThe Alert Dashboard provides a comprehensive view of all security alerts in the environment. At the top, a key metric displays the total number of alerts for quick monitoring. A bar chart highlights alerts by rule severity, making it easy to prioritize critical issues. Pie charts break down alerts by OS family, agent version, scope level, incident status, treated-as-threat status, and event type, giving clear visibility into alert distribution and trends. A table lists the top 10 rule names, helping to identify the most frequently triggered rules. Additionally, a saved search of recent alerts provides real-time visibility into the latest events, enabling quick investigation and response.\n\n[**Integrations Page**](/app/integrations/detail/sentinel_one/overview)", - "openLinksInNewTab": false - }, - "title": "", - "type": "markdown", - "uiState": {} - } - }, - "gridData": { - "h": 32, - "i": "7303139b-f06e-4df1-afef-23d898076297", - "w": 10, - "x": 0, - "y": 12 - }, - "panelIndex": "7303139b-f06e-4df1-afef-23d898076297", - "title": "Table of Contents", - "type": "visualization" - }, { "embeddableConfig": { "attributes": { @@ -1670,6 +1525,158 @@ }, "panelIndex": "c328a3b4-108a-4a1f-a545-5e6a3acc40b0", "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "layout": "vertical", + "links": [ + { + "destinationRefName": "link_54792b04-4904-4ce8-a469-58881d4b6b32_dashboard", + "id": "54792b04-4904-4ce8-a469-58881d4b6b32", + "label": "Activities", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 0, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_c21b4ea4-4679-49c9-ab3d-593cbe9372c9_dashboard", + "id": "c21b4ea4-4679-49c9-ab3d-593cbe9372c9", + "label": "Agents", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 1, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_aecf833a-b0ec-4363-87c8-7e95adc973a7_dashboard", + "id": "aecf833a-b0ec-4363-87c8-7e95adc973a7", + "label": "Alerts", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 2, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_44d2eef5-09db-4163-b9f1-810d1039996f_dashboard", + "id": "44d2eef5-09db-4163-b9f1-810d1039996f", + "label": "Application", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 3, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_af8841b0-1f67-47e8-8a2a-f842b82e386f_dashboard", + "id": "af8841b0-1f67-47e8-8a2a-f842b82e386f", + "label": "Application Risk", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 4, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_5138d751-e31f-44ae-ad0d-fe7b46f339ad_dashboard", + "id": "5138d751-e31f-44ae-ad0d-fe7b46f339ad", + "label": "Groups", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 5, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_25247eb9-2bca-4653-8bfb-ca9cb5853024_dashboard", + "id": "25247eb9-2bca-4653-8bfb-ca9cb5853024", + "label": "Threats", + "options": { + "openInNewTab": false, + "useCurrentDateRange": true, + "useCurrentFilters": true + }, + "order": 6, + "type": "dashboardLink" + }, + { + "destinationRefName": "link_802e09a2-2670-4bd9-ac16-86555d934eca_dashboard", + "id": "802e09a2-2670-4bd9-ac16-86555d934eca", + "label": "Threat Events", + "order": 7, + "type": "dashboardLink" + } + ] + }, + "enhancements": {} + }, + "gridData": { + "h": 13, + "i": "256b1f19-8d6b-4ec3-bd59-f258e29e2d06", + "w": 10, + "x": 0, + "y": 0 + }, + "panelIndex": "256b1f19-8d6b-4ec3-bd59-f258e29e2d06", + "title": "Navigation", + "type": "links" + }, + { + "embeddableConfig": { + "enhancements": { + "dynamicActions": { + "events": [] + } + }, + "savedVis": { + "data": { + "aggs": [], + "searchSource": { + "filter": [], + "query": { + "language": "kuery", + "query": "" + } + } + }, + "description": "", + "id": "", + "params": { + "fontSize": 12, + "markdown": "**Overview**\n\nThe Alert Dashboard provides a comprehensive view of all security alerts in the environment. At the top, a key metric displays the total number of alerts for quick monitoring. A bar chart highlights alerts by rule severity, making it easy to prioritize critical issues. Pie charts break down alerts by OS family, agent version, scope level, incident status, treated-as-threat status, and event type, giving clear visibility into alert distribution and trends. A table lists the top 10 rule names, helping to identify the most frequently triggered rules. Additionally, a saved search of recent alerts provides real-time visibility into the latest events, enabling quick investigation and response.\n\n[**Integrations Page**](/app/integrations/detail/sentinel_one/overview)", + "openLinksInNewTab": false + }, + "title": "", + "type": "markdown", + "uiState": {} + } + }, + "gridData": { + "h": 31, + "i": "7303139b-f06e-4df1-afef-23d898076297", + "w": 10, + "x": 0, + "y": 13 + }, + "panelIndex": "7303139b-f06e-4df1-afef-23d898076297", + "title": "Table of Contents", + "type": "visualization" } ], "timeRestore": false, @@ -1677,7 +1684,7 @@ "version": 3 }, "coreMigrationVersion": "8.8.0", - "created_at": "2025-10-06T10:09:48.009Z", + "created_at": "2025-10-27T19:44:43.645Z", "id": "sentinel_one-bcf1f680-bba3-11ec-82b7-8fcb232e9538", "references": [ { @@ -1755,6 +1762,36 @@ "name": "24c1e7fd-242a-49b1-bff0-521218255ed7:61bd6662-6ca8-409f-a745-75215e509c47", "type": "index-pattern" }, + { + "id": "logs-*", + "name": "b1454cbc-86ff-4612-9129-bc0b2b710079:indexpattern-datasource-layer-a70c9f24-f23c-453b-8c96-f1e710d919fc", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "b1454cbc-86ff-4612-9129-bc0b2b710079:26650be8-4563-4450-bfd9-ce143b5fce37", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "02d8b05a-a909-43e8-bab4-41c424e0e889:indexpattern-datasource-layer-b50e4935-fe9a-460a-ab6d-43dcb1da50cb", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "02d8b05a-a909-43e8-bab4-41c424e0e889:2c0fdd0a-74c4-491e-ac42-51fbcd8f7cf9", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "c328a3b4-108a-4a1f-a545-5e6a3acc40b0:indexpattern-datasource-layer-12bb8402-74e9-4f83-96db-18e874c28661", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "c328a3b4-108a-4a1f-a545-5e6a3acc40b0:ed64974b-8c3c-416c-96b6-38637655081d", + "type": "index-pattern" + }, { "id": "sentinel_one-899f2630-bb27-11ec-82b7-8fcb232e9538", "name": "256b1f19-8d6b-4ec3-bd59-f258e29e2d06:link_54792b04-4904-4ce8-a469-58881d4b6b32_dashboard", @@ -1791,34 +1828,9 @@ "type": "dashboard" }, { - "id": "logs-*", - "name": "b1454cbc-86ff-4612-9129-bc0b2b710079:indexpattern-datasource-layer-a70c9f24-f23c-453b-8c96-f1e710d919fc", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "b1454cbc-86ff-4612-9129-bc0b2b710079:26650be8-4563-4450-bfd9-ce143b5fce37", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "02d8b05a-a909-43e8-bab4-41c424e0e889:indexpattern-datasource-layer-b50e4935-fe9a-460a-ab6d-43dcb1da50cb", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "02d8b05a-a909-43e8-bab4-41c424e0e889:2c0fdd0a-74c4-491e-ac42-51fbcd8f7cf9", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "c328a3b4-108a-4a1f-a545-5e6a3acc40b0:indexpattern-datasource-layer-12bb8402-74e9-4f83-96db-18e874c28661", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "c328a3b4-108a-4a1f-a545-5e6a3acc40b0:ed64974b-8c3c-416c-96b6-38637655081d", - "type": "index-pattern" + "id": "sentinel_one-413bf268-78f7-4bea-b668-55b5adacbf08", + "name": "256b1f19-8d6b-4ec3-bd59-f258e29e2d06:link_802e09a2-2670-4bd9-ac16-86555d934eca_dashboard", + "type": "dashboard" }, { "id": "logs-*", diff --git a/packages/sentinel_one/kibana/search/sentinel_one-35fe472a-8994-4b8d-a6bc-df41aa12ca46.json b/packages/sentinel_one/kibana/search/sentinel_one-35fe472a-8994-4b8d-a6bc-df41aa12ca46.json index 2f796712600..5de5f1967e4 100644 --- a/packages/sentinel_one/kibana/search/sentinel_one-35fe472a-8994-4b8d-a6bc-df41aa12ca46.json +++ b/packages/sentinel_one/kibana/search/sentinel_one-35fe472a-8994-4b8d-a6bc-df41aa12ca46.json @@ -57,7 +57,7 @@ "title": "Alert Essential Details" }, "coreMigrationVersion": "8.8.0", - "created_at": "2025-10-06T10:08:10.039Z", + "created_at": "2025-10-27T18:18:53.615Z", "id": "sentinel_one-35fe472a-8994-4b8d-a6bc-df41aa12ca46", "references": [ { diff --git a/packages/sentinel_one/kibana/tag/sentinel_one-security-solution-default.json b/packages/sentinel_one/kibana/tag/sentinel_one-security-solution-default.json index 366b86f5b85..9a5192fd87a 100644 --- a/packages/sentinel_one/kibana/tag/sentinel_one-security-solution-default.json +++ b/packages/sentinel_one/kibana/tag/sentinel_one-security-solution-default.json @@ -1,11 +1,11 @@ { "attributes": { - "color": "#54B399", + "color": "#F04E98", "description": "Tag defined in package-spec", "name": "Security Solution" }, "coreMigrationVersion": "8.8.0", - "created_at": "2025-09-22T10:56:25.007Z", + "created_at": "2025-10-22T19:09:12.504Z", "id": "sentinel_one-security-solution-default", "references": [], "type": "tag", diff --git a/packages/sentinel_one/manifest.yml b/packages/sentinel_one/manifest.yml index 0d3ea52b84e..ca824398f0d 100644 --- a/packages/sentinel_one/manifest.yml +++ b/packages/sentinel_one/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.4.0" name: sentinel_one title: SentinelOne -version: "1.41.0" +version: "1.42.0" description: Collect logs from SentinelOne with Elastic Agent. type: integration categories: @@ -39,6 +39,10 @@ screenshots: title: SentinelOne Threat Dashboard size: 600x600 type: image/png + - src: /img/sentinel-one-threat-event-dashboard.png + title: SentinelOne Threat Event Dashboard + size: 600x600 + type: image/png icons: - src: /img/sentinel-one-logo.svg title: SentinelOne Logo From cd06861070db761a2b1e264d2e6f18379adc982a Mon Sep 17 00:00:00 2001 From: mohitjha_elastic Date: Tue, 28 Oct 2025 02:02:07 +0530 Subject: [PATCH 2/7] Update changelog entry --- packages/sentinel_one/changelog.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sentinel_one/changelog.yml b/packages/sentinel_one/changelog.yml index 5bff0e6d1ff..16511d913bb 100644 --- a/packages/sentinel_one/changelog.yml +++ b/packages/sentinel_one/changelog.yml @@ -3,7 +3,7 @@ changes: - description: Add support for threat event data stream. type: enhancement - link: https://github.com/elastic/integrations/pull/1 + link: https://github.com/elastic/integrations/pull/15771 - version: "1.41.0" changes: - description: Add configuration option to filter results by Site IDs in the application data stream, improve UI layout, and readme document. From 27e61ff00642d43bb079241053aa5ce6389a32a3 Mon Sep 17 00:00:00 2001 From: mohitjha_elastic Date: Tue, 28 Oct 2025 02:35:41 +0530 Subject: [PATCH 3/7] Update validation.yml --- packages/sentinel_one/validation.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/sentinel_one/validation.yml b/packages/sentinel_one/validation.yml index 0d5da503363..9dcaa3b03ff 100644 --- a/packages/sentinel_one/validation.yml +++ b/packages/sentinel_one/validation.yml @@ -1,4 +1,5 @@ errors: exclude_checks: + - SVR00002 # Mandatory filters in dashboards. - SVR00004 # References in dashboards. - SVR00005 # Kibana version for saved tags. From fbc8a445bbaff257dec671dafceb2114b44d03c4 Mon Sep 17 00:00:00 2001 From: mohitjha_elastic Date: Tue, 28 Oct 2025 12:22:22 +0530 Subject: [PATCH 4/7] Resolve policy test --- .../threat_event/_dev/test/policy/test-all.expected | 5 ++++- .../threat_event/_dev/test/policy/test-default.expected | 5 ++++- .../data_stream/threat_event/agent/stream/cel.yml.hbs | 6 +++--- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/sentinel_one/data_stream/threat_event/_dev/test/policy/test-all.expected b/packages/sentinel_one/data_stream/threat_event/_dev/test/policy/test-all.expected index f2911c3de01..bef08aec6c1 100644 --- a/packages/sentinel_one/data_stream/threat_event/_dev/test/policy/test-all.expected +++ b/packages/sentinel_one/data_stream/threat_event/_dev/test/policy/test-all.expected @@ -105,7 +105,10 @@ inputs: "worklist": { "data": (body.?pagination.nextCursor.orValue(null) != null) ? state.worklist.data : tail(state.worklist.data), }, - "want_more": state.?fetch_more.orValue(false) ? state.fetch_more : (body.?pagination.nextCursor.orValue(null) != null), + "want_more": state.?fetch_more.orValue(false) ? + state.fetch_more + : + size(state.worklist.data) > 1 || (body.?pagination.nextCursor.orValue(null) != null), } ) : diff --git a/packages/sentinel_one/data_stream/threat_event/_dev/test/policy/test-default.expected b/packages/sentinel_one/data_stream/threat_event/_dev/test/policy/test-default.expected index 69e08468376..055e6988aef 100644 --- a/packages/sentinel_one/data_stream/threat_event/_dev/test/policy/test-default.expected +++ b/packages/sentinel_one/data_stream/threat_event/_dev/test/policy/test-default.expected @@ -94,7 +94,10 @@ inputs: "worklist": { "data": (body.?pagination.nextCursor.orValue(null) != null) ? state.worklist.data : tail(state.worklist.data), }, - "want_more": state.?fetch_more.orValue(false) ? state.fetch_more : (body.?pagination.nextCursor.orValue(null) != null), + "want_more": state.?fetch_more.orValue(false) ? + state.fetch_more + : + size(state.worklist.data) > 1 || (body.?pagination.nextCursor.orValue(null) != null), } ) : diff --git a/packages/sentinel_one/data_stream/threat_event/agent/stream/cel.yml.hbs b/packages/sentinel_one/data_stream/threat_event/agent/stream/cel.yml.hbs index 5342adbd0c1..c7025c32696 100644 --- a/packages/sentinel_one/data_stream/threat_event/agent/stream/cel.yml.hbs +++ b/packages/sentinel_one/data_stream/threat_event/agent/stream/cel.yml.hbs @@ -107,9 +107,9 @@ program: |- "worklist": { "data": (body.?pagination.nextCursor.orValue(null) != null) ? state.worklist.data : tail(state.worklist.data), }, - "want_more": state.?fetch_more.orValue(false) ? - state.fetch_more - : + "want_more": state.?fetch_more.orValue(false) ? + state.fetch_more + : size(state.worklist.data) > 1 || (body.?pagination.nextCursor.orValue(null) != null), } ) From 9d6addf8afa53728ab2e4f990843c50da69f27d3 Mon Sep 17 00:00:00 2001 From: mohitjha_elastic Date: Tue, 4 Nov 2025 14:08:56 +0530 Subject: [PATCH 5/7] Update the kibana versions in manifest --- packages/sentinel_one/manifest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sentinel_one/manifest.yml b/packages/sentinel_one/manifest.yml index ca824398f0d..d76941f3804 100644 --- a/packages/sentinel_one/manifest.yml +++ b/packages/sentinel_one/manifest.yml @@ -9,7 +9,7 @@ categories: - edr_xdr conditions: kibana: - version: ^8.18.7 || ^8.19.4 || ^9.0.7 || ^9.1.4 + version: ^8.19.7 || ^9.1.7 || ^9.2.1 || ^9.3.0 screenshots: - src: /img/sentinel-one-activities-dashboard.png title: SentinelOne Activity Dashboard From c9fe680a3c5b1ef497cd243ae3e3ae15b5c1dc41 Mon Sep 17 00:00:00 2001 From: mohitjha_elastic Date: Wed, 5 Nov 2025 15:45:16 +0530 Subject: [PATCH 6/7] Add ignore_empty_value in httpjson cursor --- .../data_stream/activity/agent/stream/httpjson.yml.hbs | 1 + .../sentinel_one/data_stream/agent/agent/stream/httpjson.yml.hbs | 1 + .../sentinel_one/data_stream/alert/agent/stream/httpjson.yml.hbs | 1 + .../sentinel_one/data_stream/group/agent/stream/httpjson.yml.hbs | 1 + .../data_stream/threat/agent/stream/httpjson.yml.hbs | 1 + 5 files changed, 5 insertions(+) diff --git a/packages/sentinel_one/data_stream/activity/agent/stream/httpjson.yml.hbs b/packages/sentinel_one/data_stream/activity/agent/stream/httpjson.yml.hbs index 5b324b615d9..eb0444feff8 100644 --- a/packages/sentinel_one/data_stream/activity/agent/stream/httpjson.yml.hbs +++ b/packages/sentinel_one/data_stream/activity/agent/stream/httpjson.yml.hbs @@ -42,6 +42,7 @@ response.pagination: cursor: last_create_at: value: '[[.last_event.createdAt]]' + ignore_empty_value: true response.split: target: body.data ignore_empty_value: true diff --git a/packages/sentinel_one/data_stream/agent/agent/stream/httpjson.yml.hbs b/packages/sentinel_one/data_stream/agent/agent/stream/httpjson.yml.hbs index 099e3db2992..f4f1a63e9c6 100644 --- a/packages/sentinel_one/data_stream/agent/agent/stream/httpjson.yml.hbs +++ b/packages/sentinel_one/data_stream/agent/agent/stream/httpjson.yml.hbs @@ -42,6 +42,7 @@ response.pagination: cursor: last_update_at: value: '[[.last_event.updatedAt]]' + ignore_empty_value: true response.split: target: body.data ignore_empty_value: true diff --git a/packages/sentinel_one/data_stream/alert/agent/stream/httpjson.yml.hbs b/packages/sentinel_one/data_stream/alert/agent/stream/httpjson.yml.hbs index 1e920c96a14..b3abd87d68f 100644 --- a/packages/sentinel_one/data_stream/alert/agent/stream/httpjson.yml.hbs +++ b/packages/sentinel_one/data_stream/alert/agent/stream/httpjson.yml.hbs @@ -42,6 +42,7 @@ response.pagination: cursor: last_create_at: value: '[[.last_event.alertInfo.createdAt]]' + ignore_empty_value: true response.split: target: body.data ignore_empty_value: true diff --git a/packages/sentinel_one/data_stream/group/agent/stream/httpjson.yml.hbs b/packages/sentinel_one/data_stream/group/agent/stream/httpjson.yml.hbs index a8280253820..e0cdf3b9699 100644 --- a/packages/sentinel_one/data_stream/group/agent/stream/httpjson.yml.hbs +++ b/packages/sentinel_one/data_stream/group/agent/stream/httpjson.yml.hbs @@ -42,6 +42,7 @@ response.pagination: cursor: last_update_at: value: '[[.last_event.updatedAt]]' + ignore_empty_value: true response.split: target: body.data ignore_empty_value: true diff --git a/packages/sentinel_one/data_stream/threat/agent/stream/httpjson.yml.hbs b/packages/sentinel_one/data_stream/threat/agent/stream/httpjson.yml.hbs index cd9b2b892c9..952a7f74839 100644 --- a/packages/sentinel_one/data_stream/threat/agent/stream/httpjson.yml.hbs +++ b/packages/sentinel_one/data_stream/threat/agent/stream/httpjson.yml.hbs @@ -42,6 +42,7 @@ response.pagination: cursor: last_update_at: value: '[[.last_event.threatInfo.updatedAt]]' + ignore_empty_value: true response.split: target: body.data ignore_empty_value: true From e95d3a99f348541a881b427b3c484a64d98e35d0 Mon Sep 17 00:00:00 2001 From: mohitjha_elastic Date: Tue, 11 Nov 2025 14:41:16 +0530 Subject: [PATCH 7/7] Update policy test and input titles --- .../data_stream/activity/_dev/test/policy/test-all.expected | 1 + .../activity/_dev/test/policy/test-default.expected | 1 + .../data_stream/agent/_dev/test/policy/test-all.expected | 1 + .../data_stream/agent/_dev/test/policy/test-default.expected | 1 + .../data_stream/alert/_dev/test/policy/test-all.expected | 1 + .../data_stream/alert/_dev/test/policy/test-default.expected | 1 + .../data_stream/group/_dev/test/policy/test-all.expected | 1 + .../data_stream/group/_dev/test/policy/test-default.expected | 1 + .../data_stream/threat/_dev/test/policy/test-all.expected | 1 + .../data_stream/threat/_dev/test/policy/test-default.expected | 1 + packages/sentinel_one/manifest.yml | 4 ++-- 11 files changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/sentinel_one/data_stream/activity/_dev/test/policy/test-all.expected b/packages/sentinel_one/data_stream/activity/_dev/test/policy/test-all.expected index 5eb0522116d..e4464d009f8 100644 --- a/packages/sentinel_one/data_stream/activity/_dev/test/policy/test-all.expected +++ b/packages/sentinel_one/data_stream/activity/_dev/test/policy/test-all.expected @@ -9,6 +9,7 @@ inputs: - config_version: 2 cursor: last_create_at: + ignore_empty_value: true value: '[[.last_event.createdAt]]' data_stream: dataset: sentinel_one.activity diff --git a/packages/sentinel_one/data_stream/activity/_dev/test/policy/test-default.expected b/packages/sentinel_one/data_stream/activity/_dev/test/policy/test-default.expected index 4d111fe108b..d4692157c27 100644 --- a/packages/sentinel_one/data_stream/activity/_dev/test/policy/test-default.expected +++ b/packages/sentinel_one/data_stream/activity/_dev/test/policy/test-default.expected @@ -9,6 +9,7 @@ inputs: - config_version: 2 cursor: last_create_at: + ignore_empty_value: true value: '[[.last_event.createdAt]]' data_stream: dataset: sentinel_one.activity diff --git a/packages/sentinel_one/data_stream/agent/_dev/test/policy/test-all.expected b/packages/sentinel_one/data_stream/agent/_dev/test/policy/test-all.expected index 01a34ffbb3c..71338838df8 100644 --- a/packages/sentinel_one/data_stream/agent/_dev/test/policy/test-all.expected +++ b/packages/sentinel_one/data_stream/agent/_dev/test/policy/test-all.expected @@ -9,6 +9,7 @@ inputs: - config_version: 2 cursor: last_update_at: + ignore_empty_value: true value: '[[.last_event.updatedAt]]' data_stream: dataset: sentinel_one.agent diff --git a/packages/sentinel_one/data_stream/agent/_dev/test/policy/test-default.expected b/packages/sentinel_one/data_stream/agent/_dev/test/policy/test-default.expected index e746921b302..2d2dcd042bc 100644 --- a/packages/sentinel_one/data_stream/agent/_dev/test/policy/test-default.expected +++ b/packages/sentinel_one/data_stream/agent/_dev/test/policy/test-default.expected @@ -9,6 +9,7 @@ inputs: - config_version: 2 cursor: last_update_at: + ignore_empty_value: true value: '[[.last_event.updatedAt]]' data_stream: dataset: sentinel_one.agent diff --git a/packages/sentinel_one/data_stream/alert/_dev/test/policy/test-all.expected b/packages/sentinel_one/data_stream/alert/_dev/test/policy/test-all.expected index 29cebb8e610..db095f443cc 100644 --- a/packages/sentinel_one/data_stream/alert/_dev/test/policy/test-all.expected +++ b/packages/sentinel_one/data_stream/alert/_dev/test/policy/test-all.expected @@ -9,6 +9,7 @@ inputs: - config_version: 2 cursor: last_create_at: + ignore_empty_value: true value: '[[.last_event.alertInfo.createdAt]]' data_stream: dataset: sentinel_one.alert diff --git a/packages/sentinel_one/data_stream/alert/_dev/test/policy/test-default.expected b/packages/sentinel_one/data_stream/alert/_dev/test/policy/test-default.expected index 746d2cd968c..0c531798804 100644 --- a/packages/sentinel_one/data_stream/alert/_dev/test/policy/test-default.expected +++ b/packages/sentinel_one/data_stream/alert/_dev/test/policy/test-default.expected @@ -9,6 +9,7 @@ inputs: - config_version: 2 cursor: last_create_at: + ignore_empty_value: true value: '[[.last_event.alertInfo.createdAt]]' data_stream: dataset: sentinel_one.alert diff --git a/packages/sentinel_one/data_stream/group/_dev/test/policy/test-all.expected b/packages/sentinel_one/data_stream/group/_dev/test/policy/test-all.expected index dd9dd2ce2ce..966f1204f96 100644 --- a/packages/sentinel_one/data_stream/group/_dev/test/policy/test-all.expected +++ b/packages/sentinel_one/data_stream/group/_dev/test/policy/test-all.expected @@ -9,6 +9,7 @@ inputs: - config_version: 2 cursor: last_update_at: + ignore_empty_value: true value: '[[.last_event.updatedAt]]' data_stream: dataset: sentinel_one.group diff --git a/packages/sentinel_one/data_stream/group/_dev/test/policy/test-default.expected b/packages/sentinel_one/data_stream/group/_dev/test/policy/test-default.expected index b75be0deda1..267f007a7a3 100644 --- a/packages/sentinel_one/data_stream/group/_dev/test/policy/test-default.expected +++ b/packages/sentinel_one/data_stream/group/_dev/test/policy/test-default.expected @@ -9,6 +9,7 @@ inputs: - config_version: 2 cursor: last_update_at: + ignore_empty_value: true value: '[[.last_event.updatedAt]]' data_stream: dataset: sentinel_one.group diff --git a/packages/sentinel_one/data_stream/threat/_dev/test/policy/test-all.expected b/packages/sentinel_one/data_stream/threat/_dev/test/policy/test-all.expected index 6437649f816..0e514b1973e 100644 --- a/packages/sentinel_one/data_stream/threat/_dev/test/policy/test-all.expected +++ b/packages/sentinel_one/data_stream/threat/_dev/test/policy/test-all.expected @@ -9,6 +9,7 @@ inputs: - config_version: 2 cursor: last_update_at: + ignore_empty_value: true value: '[[.last_event.threatInfo.updatedAt]]' data_stream: dataset: sentinel_one.threat diff --git a/packages/sentinel_one/data_stream/threat/_dev/test/policy/test-default.expected b/packages/sentinel_one/data_stream/threat/_dev/test/policy/test-default.expected index 8e37dba71b6..bb12cd6d8e8 100644 --- a/packages/sentinel_one/data_stream/threat/_dev/test/policy/test-default.expected +++ b/packages/sentinel_one/data_stream/threat/_dev/test/policy/test-default.expected @@ -9,6 +9,7 @@ inputs: - config_version: 2 cursor: last_update_at: + ignore_empty_value: true value: '[[.last_event.threatInfo.updatedAt]]' data_stream: dataset: sentinel_one.threat diff --git a/packages/sentinel_one/manifest.yml b/packages/sentinel_one/manifest.yml index e705d47a587..09cd5df731a 100644 --- a/packages/sentinel_one/manifest.yml +++ b/packages/sentinel_one/manifest.yml @@ -62,8 +62,8 @@ policy_templates: team: security-service-integrations inputs: - type: cel - title: Collect SentinelOne application and application risk events via API - description: Collecting SentinelOne application and application risk events via API. + title: Collect SentinelOne application, application risk, and threat_event events via API + description: Collecting SentinelOne application, application risk, and threat_event events via API. vars: - name: url type: url